2024年7月20日 星期六

Retarget的疑惑

的魔力轉圈圈 

想你想到心花怒放 黑夜白天 🎶

什麼問題讓妳從下午糾結到晚上不睡覺 🤠🤔

以下截圖出自

Games105 第4講

Q1:

keyframe的bone存的是「Local 旋轉值I」
還是「和init pose的Local 旋轉差 dR」

上:init bone的local旋轉值I
I for initial

下:keyframe的旋轉資料

「T pose」 VS 「A pose」

把T pose 的旋轉資料,拿給A pose用

如果keyframe的bone存的是「Local 旋轉值I」
就不會有上面的結果

可見keyframe的bone存的是
「和init pose的Local 旋轉差dR」

Q5:

計算旋轉差dR有2種方式
動畫的過程看起來有什麼不同?


想對child沿著它的local x軸(紅色)旋轉90度
用intrinsic對使用者來說比較直觀

對映到的extrinsic就是
繞parent的y軸(綠色)旋轉90度

最終2個方法看起來的結果是一樣的

以下的推導都是用extrinsic


Q2:怎麼處理

直覺就是乘上旋轉差矩陣
補償回來
IB = IB (IA)-1 IA
(這裡的I不是單位矩陣)

這樣就可以繼續使用T pose的旋轉差dR了

「bone A」 VS 「bone B」

R 代表 local 旋轉差dR

Q3:

為什麼和教授推導的結果不1樣?

pi代表父bone
i代表子bone

Q是Global 旋轉差 dQ
R是Local 旋轉差 dR
旋轉矩陣的逆 = 旋轉矩陣的Transpose


原來是包2層 🙂

就像開車
1開始 方向盤向偏右10度
左轉90度 再右轉90度
結果還是向右偏10度 🙂

等1下 
左乘矩陣代表Local旋轉
右乘矩陣代表Global旋轉

只有在2D旋轉的case
上面的黃色(還有水藍)才能互消

3D旋轉的case
無法保證 ITRI = R 🤠
(這裡的I不是單位矩陣)

重新檢視

感覺教授這裡的推導
是在「只有2D旋轉」的前提下進行的


使用這張圖可以驗證上圖的做法在3D不成立

intrinsic
正常是 IRIRc
parent沿著local x軸(紅色)轉-45度
child沿著 local z軸(藍色)轉-90度

而IIRRc則是
把child變換到世界後
child先沿著local x軸(紅色)轉-45度
child再沿著local z軸(藍色)轉-90度

extrinsic
正常是 RIRIc
parent沿著世界y軸(綠色)轉-45度
child沿著parent z軸(藍色)轉-90度

而RRIIc則是
把child變換到世界後
child先沿著世界z軸(藍色)轉-90度
child再沿著l世界y軸(綠色)轉-45度


而使用Q2的式子很容易驗證下圖的

「式1」和「式2」會相等

Q4:

這裡Q沒改成I會怎樣


還是可以消掉
但結果和Q2的式子不同

而且出現了未知項
做為公式也沒辦法使用

妳用了幾張信封背面 🤠
也只有健保局和國民年金會寄信給我 🙂

沒有留言:

張貼留言