前言
本人最近在学习AdvancedLocomotionV4,并尝试将其中可用部分移植到自己的项目上。在此分享一些自己的心得。
学习建议
首先应该从动画蓝图ALS_AnimBP看起,Editor为后处理动画蓝图可以跳过。个人建议从AnimatoinGraph开始看,你可以学习到状态机的层次逻辑、合理的动画图表折叠模式、IK的实现、动画融合逻辑(之后的文章我会举个例子说明)。
其中的相关变量驱动着状态机切换与动画融合,所以下一步你需要看UpdateGraph(AdvancedLocomotionV4将事件与更新逻辑分成了2个Graph),之后是EventGraph。这里是动画蓝图与角色类的数据沟通与变量更新逻辑都在于此。完成以上两个步骤后,你就了解了这个项目的总体脉络了,但还是推荐先把熟悉一下Ue4相关的动画要点。
Anim Modifiers
一种用于修改 Animation Sequence 或者 Skeleton Asset的蓝图类。
例如,精确定位左脚或右脚踩到地面时的帧来创建自动脚部同步标记(等诸如此类的各种应用)。通过使用该信息,可以将 动画同步标记 添加到脚部骨骼处于最低点(或接触地面)时的帧。
在AdvancedLocomotionV4中有大量的同步组、AnimNotify、以及曲线,纯靠手动指定费事费力。所以本人尝试制作了相应的AnimModifier,将在下一篇文章中分享。相比之下AdvancedLocomotionV4的Anim Modifiers做的就十分的菜了,让人怀疑是不是作者在隐藏些什么。
Virtual Bones
有了它就无需因为要制作Ik、FK等效果,而将原始美术资源返工重做。不过4.24有个限制就是无法重复添加相同父骨骼与相同目标骨骼的虚拟骨骼。
注意:LHS_ik_hand_gun用在后处理类型的动画蓝图Editor。
Anim Curve
可以在SkeletonAsset编辑器中查看所有的Curve,并且进行添加。
之后就可以在AnimationSequence中添加Anim Curve。但有个尴尬的问题就是无法查看哪些AnimationSequence设置了指定Curve。没有很好的引用关系图,这让学习项目的人十分头疼。总不可能为了学习而去写一个编辑器插件吧……
Pose Blend 与 Pose Driver
这个两个东西和流程相关,如果没有特殊流程,只适合于制作表情系统或是较为简单的动画。(有大佬告诉我还可以做肌肉效果,毕竟表情也是一种肌肉效果……)
节点
FABRIK
俗话说的正向动力学,关节弯曲效果。
转换空间节点
LocalSpace(局部空间):骨骼变换坐标系为其父骨骼所在坐标系。
ComponentSpace(组件空间):骨骼变换坐标系为SkeletalMeshComponent所在坐标系。
使用他们的原因在于,动画蓝图默认处于 局部空间。但特定的混合节点和所有的Skeletal Controls节点都处于组件空间中。所以在使用这些节点时需要进行空间转换。
注意:空间转换会带来性能损耗,所以建议把Skeletal Controls节点都放在一起进行计算。
Skeletal Controls
AnimDynamics
这个节点是一个小型动力学解算器。可以给SkeletalMeshComponent提供一些次要的物理效果。可以用来给锁链、头发、披风加上简单物理效果。
需要注意:
- 惯性效果是通过把骨骼转换为Box来计算的
- 不计算碰撞,但计算在物理资源中设置的约束
Apply a Percentage of Rotation
从指定骨骼获取旋转值,并按照指定比例应用到目标骨骼上。
Copy Bone
将指定骨骼数据复制到另一个骨骼上。将上面的模拟效果复制到另一侧的弹药包上。
Observe Bone
在界面中显示指定骨骼的Translate信息。
Spline IK
样条 Ik解算。用于模拟类似脊椎之类的样条结构骨骼动画效果。
Spring Controller
弹簧控制器,用于模拟因为前一个动作所造成的反作用力效果,就好像指定处的骨骼换成了弹簧。
Trail Controller
轨迹控制器,可以用于类似贪吃蛇之类动画效果。
Look At
让指定骨骼朝向目标骨骼位置。
Modify Curve
修改指定名称的曲线值(在Animation Sequence中),曲线值可以在材质、Niagara、蓝图中获得。
Rigid Body
使用在物理资源中设置碰撞体数据进行物理效果模拟。
在使用此节点之前,先在骨骼大纲视图选中所有需要模拟骨骼,点击右键将其设置为 Simulated 类型。
Hand IK Retargeting
对应用了IK效果的骨骼进行重定向。按照给定参数向指定的FK骨骼进行偏移。
Two Bone IK
适用于两根骨骼的反向动力学解算节点。
CCDIK
4.21加入的节点。轻量级,可用于驱动一段骨骼链。CCDIK提供了定义角约束的功能,需要在解算中限制任意骨骼的旋转时较为实用。
Bone Driven Controller
通过其中一个骨骼信息来设置另一个骨骼的信息。
例如B.Localtion.x=A.Localtion.y;
视频推荐
Cesar SC制作了UE4 Skeletal Controls系列视频,里面有简单演示过程,可以帮助你理解以上节点。
https://youtu.be/FrwB6iVh_DY
PhysicalAsset
刚体类型:有用于碰撞的、也有用于模拟的(用来做肚子上的肥肉效果)如果模拟中出现乱弹现象可以通过删除部分重叠刚体的碰撞来解决。4.18改善了编辑器,可以更好地观察刚体、约束、骨骼之间的关系。操作也方便了。具体的可以去看官方的视频。
布料与碰撞
通过在PhysicalAsset中创建胶囊来实现布料碰撞(布料只支持胶囊体)
注意:我在这个过程中遇到了碰撞失效的问题,后面发现是因为根骨骼的scale值不为1造成的,动画外包在导出文件时候,场景单位和导出单位设置有问题造成的。
biped骨骼与rootmotion
Biped骨骼的根骨骼会强制定义为Biped001,且无法修改。所以为了匹配Ue4的RootMotion动画规则。我们需要在在Biped001根节点外面再加一条Root骨骼。
经过测试,其他商城中的RootMotion动画也可以正确地重定向Biped骨骼中。
布料与环境碰撞
想要与环境碰撞,比就必须要StaticMesh的mobility 设置为Static。
在角色的SkeletalMesh中检查cloth-Collide with Environment是否勾选。并且关闭Collide with Attached Children选项。
其他有用功能
自动重新导入功能,在编辑器设置-General-Loading & Saving-Auto Reimport。动画师会十分喜欢这个功能,因为在DCC保存动画数据后,Ue4就会自动更新,不用再去点ReImport了。