step 1
MeshSpace和LocalSpace指的某根骨骼的transform是相对于root坐标系还是相对于parent坐标系。
选择mesh space additive 和不选择 有什么区别呢?查看源码
所以
MS的 Additive是translation和scale都是基于parent的坐标系的差值。而rotation的差值是基于root坐标系。
LS的 Additive是translation和scale都是基于parent的坐标系的差值(和MS值一样)。而rotation的差值是基于parent的坐标系。
仅仅是rotation在两个不同坐标系下的差值。
step 2
看代码发现只有胳膊用的是LS additive其他用的MS additive。这样的差别是当overlay要叠加base layer的additive的时候。胳膊部分的旋转用的是baselayer中胳膊相对于父亲的旋转。而身体其他部分用的旋转是baselayer中相对于root的旋转。
就是说任何时候叠加只叠加胳膊的局部形状。
step 3
又一个MS和LS之分,这个是只有胳膊才有的LS和MS曲线 之分。
step 2中这些缓存的pose都是完整的人的frame,只是根据每个部位曲线不同混合成不同的人形frame
step 3中的
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)