骨骼動(dòng)畫原理

3D動(dòng)畫

提供一種機(jī)制,描述各定點(diǎn)位置隨時(shí)間的變化

骨骼動(dòng)畫簡(jiǎn)介

  • 頂點(diǎn)動(dòng)畫
    早期的3D模型動(dòng)畫,就是把每幀的頂點(diǎn)數(shù)據(jù)輸出到文件中,所以3D模型的一個(gè)動(dòng)作就是一系列的模型,這樣做的目的主要是硬件資源有限,沒(méi)有多余的時(shí)間去計(jì)算頂點(diǎn)。


  • 骨骼動(dòng)畫
    隨著動(dòng)畫越來(lái)越精細(xì),將每幀的頂點(diǎn)數(shù)據(jù)輸出到文件數(shù)據(jù)量太大。人們想出一種辦法,將3D模型抽象為一些關(guān)鍵點(diǎn)的集合,整個(gè)模型的運(yùn)動(dòng)可以當(dāng)做是這些關(guān)鍵點(diǎn)的運(yùn)動(dòng),而模型的頂點(diǎn)只是受這些關(guān)鍵點(diǎn)的影響而已。這些關(guān)鍵點(diǎn)就稱為骨骼

skinned mesh

利用vertex blend(頂點(diǎn)混合),對(duì)于關(guān)節(jié)附近的點(diǎn),由多段骨骼影響,對(duì)不同骨骼賦予不同的權(quán)值。目前我們所使用的最大受骨骼影響數(shù)為4.

  • 更加真實(shí),靈活

  • 制作效率高

  • 運(yùn)行時(shí)交互

  • 共享動(dòng)畫

  • 要求一定的性能

  • 骨架父子關(guān)系,父骨骼帶動(dòng)子骨骼運(yùn)動(dòng)

  • 骨骼帶動(dòng)頂點(diǎn)運(yùn)動(dòng)

程序?qū)用?/h1>
  • 肘關(guān)節(jié)動(dòng)->手臂動(dòng)
  • 肩關(guān)節(jié)動(dòng)->手臂動(dòng)
  • 身體的肉動(dòng)是由一系列關(guān)節(jié)的運(yùn)動(dòng)所影響,但影響的程度不同
class Point
{

  float x,y,z;     //頂點(diǎn)的位置

      int  Bone[n];  //影響肌肉的骨頭

      float Weight[n]  //每一個(gè)骨頭對(duì)頂點(diǎn)的影響度,例如 肘關(guān)節(jié)的影響度對(duì)手臂很多,而肩關(guān)節(jié)要少。

}

那么一個(gè)頂點(diǎn)的位置就是:

for( int i = 0 ;i < n ; ++ i)
{

   (x,y,z) += 骨頭[i] * 骨頭的影響度[i];

}

骨頭在程序上的意義是什么,其可以旋轉(zhuǎn),有位移,有縮放,其實(shí)就是矩陣

制作過(guò)程

rigging:創(chuàng)建骨骼的過(guò)程
skinning : 把點(diǎn)映射到骨骼的過(guò)程

static 3D model -> rigging - skinning -> animation

數(shù)據(jù)格式

解析過(guò)程

  • 頂點(diǎn)數(shù)據(jù)中要有骨頭信息和骨頭權(quán)重
  • c3t文件中要有完整的骨架信息
  • nodes數(shù)據(jù)中要有網(wǎng)格對(duì)應(yīng)的骨頭信息,骨頭的坐標(biāo)空間轉(zhuǎn)換的逆矩陣

關(guān)鍵幀

  • Sprite3D draw

  • skeleton->updateBoneMatrix

  • meshSkin getMatrixPalette world matrix * invPos

  • 將palette矩陣傳到shader

  • animation信息改變Bone‘s local Matrix

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【導(dǎo)言】 很多吧友都著急了,詢問(wèn)什么時(shí)間研究骨骼系統(tǒng)? 我想問(wèn)你的建模功夫過(guò)關(guān)了嗎?你的“動(dòng)畫曲線”調(diào)整完全掌握了...
    DIGITALMAN閱讀 13,582評(píng)論 4 101
  • 一:什么是協(xié)同程序? 答:在主線程運(yùn)行時(shí)同時(shí)開啟另一段邏輯處理,來(lái)協(xié)助當(dāng)前程序的執(zhí)行。換句話說(shuō),開啟協(xié)程就是開啟一...
    好怕怕閱讀 4,044評(píng)論 2 23
  • 111. [動(dòng)畫系統(tǒng)]如何將其他類型的動(dòng)畫轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫? 動(dòng)畫->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫]Unit...
    胤醚貔貅閱讀 13,557評(píng)論 3 88
  • 這個(gè)是我剛剛整理出的Unity面試題,為了幫助大家面試,同時(shí)幫助大家更好地復(fù)習(xí)Unity知識(shí)點(diǎn),如果大家發(fā)現(xiàn)有什么...
    dingz閱讀 672評(píng)論 0 0
  • 2017年6月5日 星期一28-32雷陣雨 我是日記星球207號(hào)星寶寶張盈伽,正在參加日記星球蛻變之旅。...
    瑜馨私教瑜伽張盈伽閱讀 425評(píng)論 4 1

友情鏈接更多精彩內(nèi)容