python importantion后,两个键之间的插值关闭

时间:2016-11-14 03:45:49

标签: python rotation maya quaternions euler-angles

我正在尝试将动画从文件导入Maya,但它在插值之间给出奇怪的结果:

https://i.imgur.com/cP27Yai.mp4

这很奇怪,因为他们的关键帧一开始看起来是正确的,直到我看到图形编辑器。

enter image description here

认为这首先是万向节锁定,所以我使用了欧拉过滤器,但它没有给出任何解决方案。有时,一个键和另一个键之间的差异是180,这就是为什么通过只看动画,键看起来很好,但插值使它旋转180度。

因此,如果我逐个去,并将键的值减去180,然后将数字反转(根据情况取决于正数或负数),我可以通过调整它来使其工作。

然而,这是太多的工作,特别是对于Biped动画,它可能需要我永远。

这是一个常见问题还是其他人之前发生过的事情?有没有什么办法解决这一问题?也许这是我应用欧拉角的方式,因为它们最初是四元数,但我没有找到直接应用四元数的方法:

#Taking a rotation from the QUATERNION Array and converting it to Euler.
arot = anim.AnimRot[index].normal().asEulerRotation()
frot = MEulerRotation(arot.x*180/math.pi, arot.y*180/math.pi, arot.z*180/math.pi) 

cmds.setAttr((obj + ".rotate"), frot.x, frot.y, frot.z) 
cmds.setKeyframe(obj, time=anim.TotalKeys[i])

有没有办法从编辑器或脚本中解决这个问题?任何修复它会帮我导入这个Biped动画。我相信这是由于euler转换,但我发现无法在maya API中将四元数应用于骨骼。

1 个答案:

答案 0 :(得分:0)

如果旋转已经是四元数,您可能只想使用类似

之类的设置将动画曲线设置为四元数插值
Content-Length

为了安全起见,我设置了一个密钥,然后应用cmds.rotationInterpolation( 'pSphere2.rotateX', 'pSphere2.rotateY', 'pSphere2.rotateZ', c="quaternionSquad") 将密钥更改为quats,然后逐步应用原始四元数。由于您已经在API领域,因此您可以制作MTransformationMatrix并使用其rotationInterpolation方法设置quat值,这样您就无法转换为eulers。