骨骼动画混合 upper/lower body,全局或局部 space

Skeletal animation blending upper/lower body, global or local space

如果模型由两个立方体组成,上立方体和下立方体沿 z 轴对齐,下立方体是上立方体的 parent。

赠送两个骨骼动画:

animation A: upper cube keep static, lower cube rotate-z clockwise.

animation B: upper cube keep static, lower cube keep static

骨骼动画文件存储局部变换。

也就是说,在动画A中,下立方体可能有两个关键帧: 第0帧:旋转0度,第50帧:旋转360度

然后将 A 和 B 混合

A: upper_weight = 1 lower_weight = 0

B: upper_weight = 0 lower_weight = 1

正确的结果是什么?

a. both upper and lower keep static

b. upper cube rotates counterclockwise

我认为他们应该保持静态, 融入全球 space, 因为 A 的较低权重 = 0,意味着忽略较低的转换?

但如果我将它们混合到本地 space, 根据A上立方体的局部旋转,它会旋转。

i google 看到有人说混合局部变换更好,但我认为它没有给出正确的结果,有什么建议吗?

i think they should keep static, that's blend in global space, because A's lower weight = 0, means ignore lower transformations?

没有

你说上半身是下半身的child。这意味着如果下半身有局部旋转,则该旋转会影响该骨骼的每个 child 的 "global" 旋转。

因此,A的上半身的"global"旋转将旋转360度。即使您屏蔽掉下半身的变形,那仍然是 A 的动画数据中定义的累积旋转。因此,如果您的动画数据存储为 "global" 变换,那么 A 的上半身仍将具有该旋转,即使局部变换是静态的。

这是动画不使用 "global"(更准确地说,model-relative)旋转的重要原因。如果您希望能够组合多个动画,唯一合理的方法是在本地进行,每个骨骼的动画都相对于其 parent.