2015-08-24 39 views
0

我試圖構建和重建遊戲引擎的格式,並且在嘗試將其恢復到Maya時,會產生奇怪的結果。通過Python在Maya中導入動畫給出了奇怪的結果

這不是一個真正的錯誤或類似的東西,但動畫的結果很奇怪。

我真的需要它Quaternion在發動機的目的,格式,因爲它處理它比Euler axis更好,而是試圖將其應用到瑪雅的時候,我不能找到一個妥善的辦法。

這是我做的,因爲我真的不能找到應用只是Quaternion的一個直接的方式:

arot_count = struct.unpack("<L", f.read(4))[ 0 ] # Reads the number of animation frames 

for i in range(0, arot_count): 
    keytime = (struct.unpack("<L", f.read(4))[ 0 ]/80) # Keyframe 
    arot = om.MQuaternion(struct.unpack("f", f.read(4))[ 0 ], struct.unpack("f", f.read(4)[ 0 ], struct.unpack("f", f.read(4))[ 0 ], struct.unpack("f", f.read(4))[ 0 ])# Reads quat from file 
    narot = arot.normal() # Normalizes the quaternion 
    rot = narot.asEulerRotation() # Converts it to euler angles 

    if isMesh == False: 
     cmds.setAttr((obj.name + ".rotate"), rot.x * 180/math.pi, rot.y * 180/math.pi, rot.z * 180/math.pi)      
     cmds.setKeyframe(obj.name, time = keytime) 

這裏的結果:

Walking anim

你可以看到它很容易告訴動畫是做什麼的,但你可以看到手臂或腿部飛行一段時間之間的那些奇怪的框架,並將整個動畫搞砸。

我相信這是因爲我對代碼做了轉換的數據丟失。我基本上規範了Quaternion(它實際上什麼都沒做,因爲它給出了相同的結果,但很多人推薦),然後我將它轉換爲來自Maya API的角度爲Euler,然後我只是將弧度傳遞給具有良好的舊數學的度數,但是這似乎沒有辦法去,可能是文件的一些數據丟失的結果。

我不知道是否有更好的方法來應用旋轉關鍵幀比這個,我會很感激。

在此先感謝。

回答

0

您可以嘗試在您的動畫角色上運行maya Euler濾鏡;由於四元數轉換爲歐拉轉換不是確定性的,因此不能確定一幀的eulerization與下一幀的相同象限是否相同,插值是否古怪。

https://www.youtube.com/watch?v=zo0xhw1B2dE

+0

雖然完全看是這樣的話,顯然它不是出於某種原因,這不是一個關鍵是怪異的框架集。 我將不得不繼續尋找其他解決方案,但這實際上對製作動畫非常有幫助,非常感謝:)。 –