混合上/下身,全局或局部空间的骨骼动画

时间:2016-02-01 07:23:00

标签: opengl directx game-engine skeletal-animation skeletal-mesh

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

提供两个骨骼动画:

  

动画A:上方立方体保持静止,下方立方体顺时针旋转-z。

     

动画B:上方立方体保持静态,下方立方体保持静态

骨架动画文件存储了本地转换。

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

然后按

混合A和B.
  

A:upper_weight = 1 lower_weight = 0

     

B:u​​pper_weight = 0 lower_weight = 1

什么是正确的结果?

  

一个。上部和下部都保持静态

     

湾上方立方体逆时针旋转

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

但是如果我把它们混合在当地空间, 根据A立方体的局部旋转,它将旋转。

我谷歌并看到有人说它可以更好地融合本地变换,但我不认为它给出了正确的结果,任何建议?

1 个答案:

答案 0 :(得分:0)

  

我认为他们应该保持静态,这是在全球空间中的混合,因为A的权重较低= 0,意味着忽略较低的转换?

没有

你说上半身是下半身的孩子。这意味着如果下半身具有局部旋转,则此旋转会影响该骨骼的每个孩子的“全局”旋转。

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

这是为什么动画不使用“全局”(更准确地说,模型相对)旋转的主要原因。如果您希望能够编写多个动画,唯一合理的方法是在本地,每个骨骼的动画相对于其父动画。