UE5_ControlRig
本篇文章是基于《Control Rig for Unreal Engine 5》这门课程进行的,不涉及到前期的骨骼绑定内容,只针对UE5中的Control Rig模块。

Initialize BP

首先,创建一个Character类型的BP来作为对象的整体操控集合(Character是一种特殊类型的Pawn,默认带有Arrow、Movement和Mesh Component),将目标Skeletal Mesh指任到Mesh component上的Mesh上;

通过绑定好的SkeletalMesh创建Animation Blueprint,将ABP指认到上面Character类型的BP中的MeshComponent上的Animation上;

再通过绑定好的SkeletalMesh创建Control Rig,用Control Rig来驱动Animation Blueprint:

Control Rig

基础_Transform

接下来在Control Rig中进行逻辑制作。基础用法,通过选中的某跟骨骼进行相应Get/Set 位置调整:

创建骨骼名字数组集合

为什么要创建Array,是因为会遇到有重复同类型的多个Rig,比如:蝎子就会有多个脚,这样的话就可以把同类型的脚的名统一放在一个Array里面,以方便进行修改

Control Rig 的界面跟Blueprint比较相似,现创建一个Array类型的变量,在变量Default Value里面将目标名称填写上:

WorldSpace vs RigSpace

From World:WorldSpace > RigSpace

To World:RigSpace > WorldSpace

这两个是不同的空间位置信息,要将骨骼本身的RigSpace本地信息转换到WorldSpace中的实际位置才有意义,则需要在运行一开始的时候将RigSpace的信息存储到一个自建的Array类型的Transform变量中,并且进行To World 节点转化:

可视化Transform信息

需要注意的是目前使用的是For Each节点,会造成不必要的性能消耗,后续要改进:

Full Body IK

Full-Body IK官方文档 可以动态调证姿态。

The overall solver method is built on a Position Based IK framework, which enables faster rig performance, per-bone settings, preferred angles, squash and stretch, and more. FBIK is designed to act as a procedural adjustment tool within Control Rig, such as for ground alignment, or arm reaching behavior.

就可以根据上面存储的蝎子的Rig信息进行动态调整设置:

函数封装

通过上面的节点不难看出,整个界面小显得有些杂乱,所以,可以将功能节点集成到一个函数中。选中要集成到函数的节点,右键>Collapse to Function

World Transform > Rig Transform in solver

当我们编译保存后进入场景后会发现,蝎子的位置发生了偏移。这是因为World Transform和Rig Transform没有做相应匹配的原因。

首先,在ContrRig蓝图的construction event里面对蝎子脚进行了rig space到world spcae的转换,但是,在

Forwards Solve里面设置了FullBodyIK函数的逻辑,其中也涉及到Transfrom信息的读取,但是在这部分Transform的源头应设置为RigSpace,所以要在函数SetFullBodyIK中添加From World节点进行转换:

编译保存后,再回到场景中,点击Simulation就会看到,这是蝎子的位置没有了偏移问题。但是,当我们移动时也无法进行移动,是因为目前Transform信息都存在了WorldSpace中。

Calculate Velocity Function

公式:Distance / time

首先,创建一个函数:CalculateVelocity,关于速度的计算都在这个函数中,方便管理和调用。

因为首先要获得距离distance的值,那么要获得世界空间中的当前位置的上一帧的位置;获得世界空间下的世界时间间隔倍率;通过上述结果计算Velocity。

所以创建三个相应的变量:

功能实现:

并且需要手动输入以下cvar命令开启Debug模式:

a.AnimNode.ControlRig.Debug 1
ControlRig.EnableDrawInterfaceInGame 1

编译保存后,启用Simulation模式后,手动移动BP就会看到Debuge的速度信息显示。

Smooth the Calculate Velocity

经过上面的步骤会发现,速度信息显示会不连贯,需要对速度进行平滑处理,使用Spring Interpolate节点:

节点注释

Cycle and Cycle Function

目的是创建一个随着时间推移不断增加的计时器,并使用它来生成一个在0-1之间循环的周期。

未完待续…

欢迎评论交流,如果文章对您有帮助,可以支持下博主。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇