骨骼动画混合 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.
如果模型由两个立方体组成,上立方体和下立方体沿 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.