ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace

step 1

MeshSpace和LocalSpace指的某根骨骼的transform是相对于root坐标系还是相对于parent坐标系。

ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace_第1张图片

选择mesh space additive 和不选择 有什么区别呢?查看源码

ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace_第2张图片

ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace_第3张图片

ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace_第4张图片

所以

MS的 Additive是translation和scale都是基于parent的坐标系的差值。而rotation的差值是基于root坐标系。

LS的 Additive是translation和scale都是基于parent的坐标系的差值(和MS值一样)。而rotation的差值是基于parent的坐标系。

仅仅是rotation在两个不同坐标系下的差值。


step 2

ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace_第5张图片

 

看代码发现只有胳膊用的是LS additive其他用的MS additive。这样的差别是当overlay要叠加base layer的additive的时候。胳膊部分的旋转用的是baselayer中胳膊相对于父亲的旋转。而身体其他部分用的旋转是baselayer中相对于root的旋转。

就是说任何时候叠加只叠加胳膊的局部形状。

 


 

step 3

ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace_第6张图片

又一个MS和LS之分,这个是只有胳膊才有的LS和MS曲线 之分。

ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace_第7张图片

step 2中这些缓存的pose都是完整的人的frame,只是根据每个部位曲线不同混合成不同的人形frame

 

step 3中的

ue4 als advanced locomotion system v4 part 3 MeshSpace And LocalSpace_第8张图片

 

step 3中才将step 2中每个完整的人frame再按指定的骨骼进行覆盖。而在这个过程中arm却有MS和LS之说。其他部分默认是MeshSpace下覆盖。

 

ms = 1-ls;一般来说ls除了0就是1,不能ms混合一部分ls混合一部分。

 

step2中的ms和ls 区分的是骨骼的旋转。

step3中的ms和ls 区分的骨骼的空间。

(void FAnimationRuntime::BlendPosesPerBoneFilter)


总结:

胳膊:

如果曲线layering arm add = 1 则overlay 叠加base layer的ls additive,也就是用的胳膊ls的旋转。

然后在和head骨骼覆盖的时候,ls=1的时候arm缓存以ls空间覆盖传进来的frame。ls= 0 的时候arm缓存以ms空间覆盖传进来的frame。

 

(我建的als QQ群号 922318447)

你可能感兴趣的:(ue4)