BlueRoseNote/03-UnrealEngine/Animation/动画蓝图修型相关.md
2023-06-29 11:55:02 +08:00

139 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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/