1. 程式人生 > >骨骼動畫的核心,你必須瞭解的骨骼初始變換矩陣和蒙皮初始變換矩陣!

骨骼動畫的核心,你必須瞭解的骨骼初始變換矩陣和蒙皮初始變換矩陣!

對於骨骼動畫來說,最核心的就是這兩個變換矩陣了吧:

骨骼初始變換矩陣

蒙皮初始變換矩陣

首先我們來了解一下骨骼層次框架:

骨骼層次框架就是由一個根節點衍生出一個或多個子節點,每個子節也同樣可以衍生出一個或多個子節點,如此逐層向下所組成的一個層次框架。

每個節點有一個唯一標記的節點名稱和一個骨骼初始變換矩陣。

根節點:與其說它是一個節點,不如說它標誌了我們的整個模型,它代表了我們模型自身座標系的原點,通常沒有蒙皮依附。

子節點:標誌了模型的一個關節,不能理解成一根骨骼,通常有蒙皮依附。

子節點的骨骼初始變換矩陣:以其父節點為座標系原點,從父節點變換到該子節點位置的變換矩陣,這個變換通常包含位移變換。

所以,我們要得到一個關節在世界座標系中的變換矩陣時,就必須把所有父關節的初始變換矩陣依次相乘。

再瞭解一下蒙皮資訊:

每個關節通常依附有蒙皮,蒙皮資訊描述了該關節對哪些頂點進行影響。

蒙皮資訊包括:

關節名稱:該蒙皮資訊由哪個關節控制。

一個頂點索引集合:整個模型的一個子集,比如一個手掌,說明該關節主要控制手掌的運動。

一個權重集合:和上面的頂點索引一一對應,說明該頂點受該關節影響的比重。如果不等於1.0,它還受其他關節影響。

一個蒙皮初始變換矩陣:由於我們的頂點資料儲存的都是世界座標,所以我們必須先把頂點集合(手掌)從世界座標系變換到關節座標系才能再對其進行骨骼變換。這個變換矩陣就是蒙皮初始變換矩陣。

比如,通常手掌在世界座標系時的位置不是原點,我們就需要把它的位置變換到關節座標系的原點。

所以,我們先把蒙皮變換回關節座標系,再對關節進行旋轉,蒙皮也就跟隨著關節進行旋轉了。