127 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			127 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: AdvancedLocomotionV4学习笔记(1)——动画节点
							 | 
						|||
| 
								 | 
							
								date: 2022-08-24 09:39:43
							 | 
						|||
| 
								 | 
							
								excerpt: 摘要
							 | 
						|||
| 
								 | 
							
								tags: 
							 | 
						|||
| 
								 | 
							
								rating: ⭐
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								# 前言
							 | 
						|||
| 
								 | 
							
								本人最近在学习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;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								https://docs.unrealengine.com/4.27/en-US/AnimatingObjects/SkeletalMeshAnimation/NodeReference/SkeletalControls/BoneDrivenController/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### 视频推荐
							 | 
						|||
| 
								 | 
							
								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了。
							 |