145 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						||
title: 动画蓝图修型相关
 | 
						||
date: 2023-01-12 17:03:24
 | 
						||
excerpt: 
 | 
						||
tags: 
 | 
						||
rating: ⭐
 | 
						||
---
 | 
						||
 | 
						||
## DAWA数字人
 | 
						||
主资产(全裸身体模型)使用`dawa_Skeleton_AnimBlueprint`动画蓝图,后处理蓝图用于在编辑器中预览,大部分曲线用于控制材质效果(EPIC的数字人技术);其他衣服使用CopyPose将主资产的动画结果拷贝到模型的骨骼上。
 | 
						||
 | 
						||
PS. 
 | 
						||
1. 调试时需要将后处理动画蓝图清除。
 | 
						||
2. 动画蓝图的tick部分那么多节点完全可以使用c++以提高性能。
 | 
						||
 | 
						||
### 流程
 | 
						||
1. 表情使用苹果ARKit驱动表情。此外LiveLink Face 也可以用于驱动一些曲线来控制头部旋转,但需要使用EvaluateLiveLinkFrame节点。本项目没有使用。
 | 
						||
2. AnimLayer biaoqing:主要用于计算与更新曲线数值,来实现一些材质/(Morph Target/Blend Shape)修型效果。该项目的动画资产并没有设置曲线值,所以这个层大部分逻辑都在空跑。
 | 
						||
3. Kawaii节点用于制作乳摇。
 | 
						||
4. SpringController 系列节点应该是没用作用的。
 | 
						||
5. AnimLayer xiuxing:一堆PoseDriver节点与2个上臂骨骼偏移。主要是通过PoseDriver进行修型。
 | 
						||
6. AnimLayer bonedriver:使用骨骼的一些数值对骨骼数值进行修改。
 | 
						||
7. AnimLayer Shoes:根据高跟鞋的形状调整脚部骨骼形变。该项目对脚部骨骼调整了旋转。
 | 
						||
 | 
						||
## Pose Driver 
 | 
						||
UE使用**Pose Driver**动画节点来实现修型,主要是通过几种类型的数据来驱动**Pose Targets**(Morph Target/Blend Shape)或者Curves。其主要参数是:
 | 
						||
- **源骨骼(Source Bone)** :由哪个骨骼进行驱动?
 | 
						||
- **驱动源(Drive Source)**:根据骨骼的哪个数据进行数据插值?有**Rotation/Location**。
 | 
						||
- **仅驱动骨骼(Only Drive Bones)**:Pose Driver节点仅修改阵列中指定的骨骼(Source Bone对应的修型Twist骨骼)。
 | 
						||
	1. 相当于过滤器,相关的形变数据K在动画中,位于PoseAsset。
 | 
						||
- **姿势目标(Pose Targets)**:指定的用于驱动的Pose集。
 | 
						||
	1. 着重需要设置好每个Pose的立面角。注意避免万向锁的产生。
 | 
						||
	2. 每个立面角最好保证有较小的重叠,以保证插值的正确性。
 | 
						||
- **驱动输出(Drive Output)**:选择驱动输出的是**Curves/Poses**。
 | 
						||
- **RBFParams**:插值参数。
 | 
						||
 | 
						||
### 小灰人的修型方案
 | 
						||
主要分为**Arm_Left/Right**与**Leg_Left/Right**。修型的方案基本查看骨骼与MorphTarget的名字就可以看出来。
 | 
						||
 | 
						||
- Arm
 | 
						||
	- Clavicle
 | 
						||
		- clavicle_l/r_fwd_30
 | 
						||
		- clavicle_l/r_down_20
 | 
						||
		- clavicle_l/r_back_30
 | 
						||
		- clavicle_l/r_up_40
 | 
						||
	- Upperarm
 | 
						||
		- upperarm_l/r_back_45
 | 
						||
		- upperarm_l/r_out_55
 | 
						||
		- upperarm_l/r_out110_twist_in_70
 | 
						||
		- lowerarm_l/r_in_35
 | 
						||
		- upperarm_l/r_out_85
 | 
						||
		- upperarm_l/r_fwd_110
 | 
						||
		- upperarm_l/r_in_10
 | 
						||
		- upperarm_l/r_out110_twist_out_70
 | 
						||
		- upperarm_l/r_out_twist_a
 | 
						||
		- upperarm_l/r_fwd_15
 | 
						||
		- upperarm_l/r_out_15
 | 
						||
		- upperarm_l/r_back_10
 | 
						||
		- upperarm_l/r_out110
 | 
						||
		- upperarm_l/r_fwd_twist_in_a
 | 
						||
		- upperarm_l/r_fwd_90
 | 
						||
	- Lowerarm
 | 
						||
		- lowerarm_l/r_in_110
 | 
						||
		- lowerarm_l/r_out_35
 | 
						||
		- lowerarm_l/r_in_50
 | 
						||
		- lowerarm_l/r_in_75
 | 
						||
		- lowerarm_l/r_out_10
 | 
						||
		- lowerarm_l/r_in_90
 | 
						||
		- lowerarm_l/r_in_10
 | 
						||
	- Hand
 | 
						||
		- hand_l/r_down_90
 | 
						||
		- hand_l/r_up_20
 | 
						||
		- hand_l/r_up_90
 | 
						||
- Leg
 | 
						||
	- Calf
 | 
						||
		- calf_l/r_back_50
 | 
						||
		- calf_l/r_back_120
 | 
						||
		- calf_l/r_back_90
 | 
						||
		- calf_l/r_back_150
 | 
						||
	- Thigh
 | 
						||
		- thigh_l/r_bck_10
 | 
						||
		- thigh_l/r_fwd_10
 | 
						||
		- thigh_l/r_in_45_out_90
 | 
						||
		- thigh_l/r_fwd_90
 | 
						||
		- thigh_l/r_bck_90
 | 
						||
		- thigh_l/r_bck_50
 | 
						||
		- thigh_l/r_out_110
 | 
						||
		- thigh_l/r_out_10
 | 
						||
		- thigh_l/r_fwd_45
 | 
						||
		- thigh_l/r_in_50
 | 
						||
		- thigh_l/r_fwd_110
 | 
						||
		- thigh_l/r_out_55
 | 
						||
		- thigh_l/r_out_85
 | 
						||
	- Foot
 | 
						||
		- foot_l/r_down_60
 | 
						||
		- foot_l/r_up_35
 | 
						||
 | 
						||
### 其他
 | 
						||
#### Maya中的类似操作
 | 
						||
在Maya中通过**Pose Editor**可以通过指定Pose+Morph实现动捕修型。
 | 
						||
 | 
						||
#### 使用Pose曲线驱动的程序动画
 | 
						||
UE曲线驱动的动画:https://docs.unrealengine.com/4.27/zh-CN/AnimatingObjects/SkeletalMeshAnimation/AnimHowTo/CurveDrivenAnimation/
 | 
						||
1. 通过AnimSequence资产创建PoseAsset。
 | 
						||
2. 使用PoseAsset->CreateAsset->CreateAnimation->ReferencePose,创建一个只有参考Pose的空AnimSequence资产。
 | 
						||
3. 通过添加Variables Curve,对指定的Pose添加曲线来制作曲线驱动动画。
 | 
						||
 | 
						||
## 厄风女神Echo
 | 
						||
角色蓝图没什么东西,主要的逻辑位于Echo_AnimBP
 | 
						||
- Echo_AnimLayerInterface:被Echo_AnimBP引用。但里面没有东西。
 | 
						||
- Echo_LiveLink_AnimBP:演示基础的LinkLive用法。
 | 
						||
 | 
						||
后处理动画蓝图使用了Echo_PostProcess_AnimBP。
 | 
						||
 | 
						||
### Echo_AnimBP
 | 
						||
简化简洁的AdvancedLocomotionV4逻辑。动画蓝图层级为
 | 
						||
- Locomotion
 | 
						||
- MainState
 | 
						||
- FullyBodyLayer(Echo_AnimLayerInterface)
 | 
						||
- AnimMontageSlot
 | 
						||
- Inertialization(过滤曲线?)
 | 
						||
- ControlRig
 | 
						||
 | 
						||
### Echo_PostProcess_AnimBP
 | 
						||
1. 将C Biped开头的修型曲线归零。
 | 
						||
2. 使用PoseDriver进行修型。
 | 
						||
	1. neck_02
 | 
						||
	2. upperarm_l
 | 
						||
	3. lowerarm_l
 | 
						||
	4. calf_l
 | 
						||
	5. hand_l
 | 
						||
	6. upperarm_r
 | 
						||
	7. lowerarm_r
 | 
						||
	8. calf_r
 | 
						||
	9. hand_r
 | 
						||
 | 
						||
## 表情
 | 
						||
- https://zhuanlan.zhihu.com/p/113396468
 | 
						||
- https://arkit-face-blendshapes.com/
 | 
						||
 | 
						||
# UE5.3新添加的功能 PoseDriverConnect
 | 
						||
- https://www.unrealengine.com/marketplace/zh-CN/product/pose-driver-connect
 | 
						||
- https://www.unrealengine.com/zh-CN/blog/create-more-realistic-animation-in-less-time-with-pose-driver-connect
 | 
						||
 | 
						||
主要的功能是通过PoseDriver来驱动其他次级PoseDriver,来此来得到更加好的修形效果。 |