2016-11-14 5 views
0

Je suis en train d'importer une animation à partir d'un fichier à Maya, mais il me donne des résultats étranges entre les interpolations:interpolation entre deux touches sont au bout de marques python importantion

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

Il était bizarre parce que Les images clés ont d'abord semblé jusqu'à ce que je regarde l'éditeur de graphique.

enter image description here

pensé que ce fut d'abord un verrou Cardan, donc j'utiliser le filtre Euler, mais il a donné aucune solution à ce problème. Parfois, la différence entre une clé et une autre est de 180, ce qui explique pourquoi, simplement voir l'animation, les touches ont l'air bien, mais l'interpolation fait faire une rotation de 180.

Donc, si je vais un par un, et soustraire la vaule de la clé de 180, puis inverser le nombre (positif ou négatif selon le cas), je peux le faire fonctionner en le peaufinant un peu.

Cependant, c'est trop de travail, surtout pour être des animations bipèdes, cela pourrait me prendre pour toujours.

Est-ce un problème commun ou quelque chose qui est arrivé auparavant à quelqu'un d'autre? Est-ce qu'il y a un moyen de réparer ceci? Peut-être qu'il est la façon dont je suis l'application des angles euler, car ils ont d'abord été Quaternions, mais je n'a pas trouvé un moyen d'appliquer les escouades directement:

#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]) 

Est-il possible de résoudre ce problème de l'éditeur ou scénario? tout ce qui le fixe me ferait une grande faveur pour l'importation de cette animation bipède. Je crois que cela est dû à la conversion euler, mais je n'ai trouvé aucun moyen d'appliquer un quaternion à un os dans l'API maya.

+0

Je suppose que vous avez besoin Double Quaternions pour une interpolation sans pression (180 rotation) –

+0

Est-il possible que je puisse les convertir en double quats à partir du fichier? Le problème est que je ne peux pas appliquer les quaternions directement de toute façon ... –

Répondre

0

Si les rotations déjà sont escouades, vous voudrez peut-être définir simplement les courbes de anim à quaternion interpolation à l'aide Pour être sûr que je avais mis une clé quelque chose comme

cmds.rotationInterpolation('pSphere2.rotateX', 'pSphere2.rotateY', 'pSphere2.rotateZ', c="quaternionSquad") 

, puis appliquer le rotationInterpolation changer la clés pour quats, puis étape par l'application de vos quaternions d'origine. Puisque vous êtes déjà dans la terre de l'API, vous pouvez faire une MTransformationMatrix et utiliser sa méthode setRotationComponents pour définir les valeurs de quat de sorte que vous ne jamais pas convertir à Eulers.

+0

Je vais essayer et vous le faire savoir, merci! J'enquête maintenant –

+0

Malheureusement, je ne l'ai pas réussi à en tirer, des idées sur la façon d'appliquer correctement? –