UE4 动画插件Advanced Locomotion System V4分析

动画结构:

UE4 动画插件Advanced Locomotion System V4分析_第1张图片

整个结构可以看成两种Pose,一种Pose是Layer Blending 加上瞄准偏移加上手和脚的IK,一种Pose是Ragdoll,根据MovementState选择,如果是MovementState是Ragdoll选择Ragdoll Pose,其他状态都选择第一种Pose。

MovementState状态枚举

 

Layer Blending:

UE4 动画插件Advanced Locomotion System V4分析_第2张图片

Layer Blending 包含了Grounded(地面),In Air(包括跳跃与降落),Mantling(攀爬)的MovementState的Pose

LayerBlending分成BaseLayer,OverlayLayer,BasePoses和LayerBlending层

BaseLayer 实现Grounded,InAir,Mantling的基础动作

OverlayLayer 是动作叠加如男女站姿不同,受伤,手背绑住,持枪,持弓箭,举着火炬等等动作

BasePoses 是站立ALS_N_Pose或下蹲ALS_CLF_Pose的混合

LayerBlending 是将前三个Layer分部位进行混合

 

BaseLayer:

UE4 动画插件Advanced Locomotion System V4分析_第3张图片

第一层:MainMovementStates 是Grounded和InAir状态转换

第二层:MainGroundedStates 是Gronded状态下站立与蹲下和滚动滚动的状态转换

第三层:(N) - Neutral Standing States 是Grouded状态下站立的移动Pose,(CLF) - Crouching Left Forward States 是Grounded状态下蹲下的移动Pose

整体的结构分为三层,第一层是第二层输出的MainGroundedStates和InAir之间的转换,第二层是(N) Locomotion States与(CLF) Locomotion States之间转换,第三层就是输出(N) Locomotion States,(CLF) Locomotion States

 

一、

UE4 动画插件Advanced Locomotion System V4分析_第4张图片

这一部分是地面部分Pose

(N) Locomotion Cycles:八方位的移动

(N) Locomotion Detail:行走奔跑冲刺转换

(N) Locomotion States:等待和移动的状态转换

(CLF) Locomotion Cycles:相当于蹲下状态的(N) Locomotion Cycles

(CLF) Locomotion States:相当于蹲下状态的Locomotion States

为什么没有(CLF) Locomotion Detail,是因为蹲下没有奔跑冲刺等动作

 

(1)(N) Locomotion Cycles:

UE4 动画插件Advanced Locomotion System V4分析_第5张图片

前,后,左前,右前,左后,右后六方向的行走奔跑混合空间和冲刺Pose传入(N) CycleBlending层进行方向的处理

 

1)Linked Anim Layer:(N)CycleBlending

UE4 动画插件Advanced Locomotion System V4分析_第6张图片

根据Gait枚举选择是否冲刺,Mask_Sprint这个曲线在ALS_N_Land_Heavy,ALS_N_Land_Heavy_Additive, ALS_N_Land_Light ,ALS_N_Land_Light_Additive这四个落地动画里。其实是因为落地与冲刺混合膝盖被过度压缩了,所以用Mask_Sprint和F Input做混合。

UE4 动画插件Advanced Locomotion System V4分析_第7张图片

一般根据MovementDirection切换状态。在MoveLB和MoveLF,MoveRB和MoveRF是会根据HipOrientation_Bias和Feet_Crossing切换。

HipOrientation_Bias是臀部朝向的。HipOrientation_Bias<-0.5是hip left , HipOrientation_Bias>0.5是hip right。HipOrientation_Bias曲线在ALS_Props_Bow_Poses,ALS_Props_M4A1_Poses,ALS_Props_Pistol_1H_Poses,ALS_Props_Pistol_2H_Poses,ALS_Props_Torch_Poses动画里。

Feet_Crossing值是脚的交叉。1是交叉,0是不交叉。Feet_Crossing曲线在ALS_CLF_Walk_L,ALS_CLF_Walk_R,ALS_CRF_Walk_L,ALS_CRF_Walk_R,ALS_N_Run_LB,ALS_N_Run_RB,ALS_N_Walk_LB,ALS_N_Walk_LF,ALS_N_Walk_RB,ALS_N_Walk_RF动画里。

 

2)

UE4 动画插件Advanced Locomotion System V4分析_第8张图片

这个是根据Diagonal Scale Amount值ik_foot_root骨骼的一个缩放,这是因为Ik,脚的对角移动位置可能不够。

 

3)

UE4 动画插件Advanced Locomotion System V4分析_第9张图片

ALS_N_Lean是混合了前后左右倾斜的BlendSpace,通过之前计算的加速度旋转值混合。

UE4 动画插件Advanced Locomotion System V4分析_第10张图片

Calculate Relative Acceleration Amount是求的当前加速度相对于actor方向上的值,并把范围限定在-1到1。Relative Acceleration Amount X是前后方向的值, Relative Acceleration Amount Y是左右方向值。

 

(2)(N) Locomotion Detail

UE4 动画插件Advanced Locomotion System V4分析_第11张图片

(N) Locomotion Detail:行走奔跑冲刺转换

 

 

(3)(N) Locomotion States

UE4 动画插件Advanced Locomotion System V4分析_第12张图片

(N) Locomotion States:等待和移动的状态转换

 

二、MainGroundedStates

UE4 动画插件Advanced Locomotion System V4分析_第13张图片

MainGroundedStates :Gronded状态下站立与蹲下和滚动滚动的状态转换

 

三、MainMovementStates

UE4 动画插件Advanced Locomotion System V4分析_第14张图片

MainMovementStates:Grounded和InAir状态转换

 

Mantling:

Mantling是使用播放Montage的方式,Montage的Slot是BaseLayer

BaseLayer里UE4 动画插件Advanced Locomotion System V4分析_第15张图片

在ALS_Base_CharacterBP里Mantle Start函数调用UE4 动画插件Advanced Locomotion System V4分析_第16张图片

 

 

Hand IK

UE4 动画插件Advanced Locomotion System V4分析_第17张图片

Two Bone IK (Bone:hand_l)

UE4 动画插件Advanced Locomotion System V4分析_第18张图片

IKBone:被控制的骨骼 hand_l

Effector :使用vb rhs_ik_hand_l的位置作为骨骼末端位置,IKBone达到这个位置

Joint :是关节位置,IK通过Effector位置与IKBone hand_l的父骨骼lowerArm_L的父骨骼upperArm_L算出了所在的高度位置,但是在这个高度上有无数个方向,所以要通过Joint位置来确定lowerArm_L应该到达的最终位置。

 

UE4 动画插件Advanced Locomotion System V4分析_第19张图片

通过Layering_Arm_L作为权重对0-Enable_HandIK_L的范围取值来设置Enable_HandIK_L。Enable_HandIK_R 同理。

 

Foot IK

UE4 动画插件Advanced Locomotion System V4分析_第20张图片

通过修改ik_foot_l、ik_foot_r、vb ik_foot_l_offset、vb ik_foot_r_offset、pelvis、vb ik_knee_target_l、vb_ik_knee_target_r这些骨骼的位置然后应用two bone ik节点设置ik

 

Foot Effector:

UE4 动画插件Advanced Locomotion System V4分析_第21张图片

IKFoot Floor Location是计算当前foot骨骼正常应该在的位置。使用射线检测,找到当前foot所在平面的位置和法线。加上IK_TraceDistanceAboveFoot作为Start值,减去IK_TraceDistanceBelowFoot作为End值,这个因为脚可能在地面上方或下方。

UE4 动画插件Advanced Locomotion System V4分析_第22张图片

地面减去脚的距离,这个位置插值后以世界坐标系加在vb ik_foot_l_offset、vb ik_foot_r_offset骨骼上设置Effector位置

UE4 动画插件Advanced Locomotion System V4分析_第23张图片

取地面的Roll角和Pitch角,该值插值后就是vb ik_foot_l_offset、vb ik_foot_r_offset的Rotation

 

Pelvis :

UE4 动画插件Advanced Locomotion System V4分析_第24张图片

Foot Offset Target 是地面减去脚的距离,取其中更小的距离做骨盆偏移。插值后以世界坐标系加在pelvis骨骼上

 

 

 

参考:

https://zhuanlan.zhihu.com/p/101477611

https://zhuanlan.zhihu.com/p/41425611

你可能感兴趣的:(UE4)