骨骼動畫技術後於幀動畫技術出現
最開始,骨骼動畫僅用於非實時渲染的建模領域,如3dmax這類建模軟體之中,以方便美工的建模。後來,cpu從渲染中解放後,骨骼動畫才用於實時渲染的遊戲中。
頂點動畫:早期的3d模型動畫,就是把每幀的頂點資料輸出到檔案中,所以3d模型的乙個動作就是一系列的模型,這樣做的目的主要是硬體資源有限,沒有多餘的時間去計算頂點。
骨骼動畫
隨著動畫越來越精細,將每幀的頂點資料輸出到檔案資料量太大。人們想出一種辦法,將3d模型抽象為一些關鍵點的集合,整個模型的運動可以當做是這些關鍵點的運動,而模型的頂點只是受這些關鍵點的影響而已。這些關鍵點就稱為骨骼
骨骼動畫原理
骨骼動畫的想法**於人體骨骼。
例如說,人的上肢所有肌肉和**都受上肢骨胳的影響,而人的踝關節則分別承受小腿骨胳和腳骨的影響。
根據這個我們可以將骨骼動畫理解為兩個概念:
骨骼:用以控制蒙皮的一種抽象的概念,如人體骨骼控制**。
蒙皮:被骨骼控制、並顯示在外的因素,如人體的**被骨骼所影響。
骨骼動畫原理:蒙皮(skinmesh)
在最終的渲染結果中,蒙皮將完全顯示出來,蒙皮實際上就是頂點、法線和紋理座標等將被渲染的元素。
而其中,最關鍵的當然是頂點,頂點將直接被骨頭牽扯運動,因而使得整個模型呈現骨骼所決定的樣子。
骨骼動畫原理:骨骼(skeleton)
o骨骼是一種抽象的概念,在最終的渲染結果中,它不可見。
o類如人體骨骼、骨骼是若干骨頭(bone)成樹狀的集合體,而每塊骨頭又分別與若干數量的蒙皮頂點關聯。
o當骨頭運動的時候,與之關聯的所有蒙皮頂點也會受骨骼的影響而運動。
骨骼動畫原理:權重
骨頭與蒙皮頂點的關聯需要考慮到每塊骨頭對蒙皮頂點的影響。
儘管大部分情況下,乙個頂點將僅僅被乙個骨頭的影響,但是關節處的頂點往往被多根骨頭影響,例如踝關節,可能會分別受小腿骨50%和腳骨50%的影響,這種影響叫作權重(weight)。
在這種情況下,我們稱踝關節的這些頂點,受小腿骨影響的權重是50%,受腳骨影響的權重也是50%。
骨骼動畫原理:演算法
骨頭究竟如何對頂點施加影響呢?
現實世界中,每一塊骨頭都可以位移、旋轉,受這些骨頭影響的表皮細胞也會跟隨骨頭同時按權重做位移旋轉。
在3d中,這種影響對於蒙皮頂點而言也是一樣的。
那麼實際上,每根骨頭最終將被換算成乙個矩陣,這個矩陣記錄了旋轉,平移資訊,我們用這個矩陣來對蒙皮頂點進行影響。
在骨頭中,一般使用四元數來獲得旋轉時的精確性,這樣,骨頭一般記錄表示旋轉的四元數和表示位移的乙個向量,最後,將四元數和向量換算成骨頭的矩陣,並用頂點與這個矩陣乘法以進行影響。
參考文章
骨骼動畫公式
本節你將回顧一些骨骼動畫用到的概念和數學公式。乙個骨骼動畫是由許多關鍵幀組成的,每個關鍵幀儲存了乙個bone的配置 朝向和位置 和bone對應的時間。在每個時間間隔,你使用乙個或多個關鍵幀改變bone的配置。圖11 7展示了一張如圖11 3中的骨骼的動畫,當left shoulder bone的朝向...
骨骼動畫換裝
之前看過好多有關骨骼動畫換裝的文章,雖然給予很大幫助,然而自己也是費了很大勁,最終也是自己解決了問題,我把自己的解決方式分享出來,希望對你有所幫助 void changearmaturebone cocostudio armature armature const char bonename coc...
LAYA 骨骼動畫
建立骨骼動畫 private var sk skeleton private function showski void private function onloaded t templet void if sk null sk.url t.url sk t.buildarmature 0 sk....