骨骼動畫
首先我們來看到底什么是骨骼動畫:
在早期的機器上,渲染本身已經占用了很多CPU資源,因此,對於渲染,往往采取的是一種空間換時間的策略,以避免在模型的渲染中繼續加重CPU的負擔。幀動畫模型在這種條件下應運而生。比較著名的幀動畫格式是Quake2所采用的MD2。到今天為止,幀動畫依然存在,只不過幀動畫更多地是來描述小且動作相對少些的物體。
GPU出現后,CPU的問題早已不像以前那么突出,一些新的手段和技術也可以被應用進來了。骨骼動畫相對於幀動畫而言,更加靈活多變,但同時,骨骼動畫需要更多的計算量,因此骨骼動畫往往應用在需要着重體現動作細節的模型中。
骨骼動畫技術后於幀動畫技術出現。最開始,骨骼動畫僅用於非實時渲染的建模領域,如3DMax這類建模軟件之中,以方便美工的建模。后來,CPU從渲染中解放后,骨骼動畫才用於實時渲染的游戲中。
骨骼動畫原理
骨骼動畫的想法來源於人體骨骼。例如說,人的上肢所有肌肉和皮膚都受上肢骨胳的影響,而人的踝關節則分別承受小腿骨胳和腳骨的影響。根據這個我們可以將骨骼動畫理解為兩個概念: 骨骼:用以控制蒙皮的一種抽象的概念,如人體骨骼控制皮膚。 蒙皮:被骨骼控制、並顯示在外的因素,如人體的皮膚被骨骼所影響。
蒙皮(SKINMESH)
在最終的渲染結果中,蒙皮將完全顯示出來,蒙皮實際上就是頂點、法線和紋理坐標等將被渲染的元素。而其中,最關鍵的當然是頂點,頂點將直接被骨頭牽扯運動,因而使得整個模型呈現骨骼所決定的樣子。
骨骼(SKELETON)
骨骼是一種抽象的概念,在最終的渲染結果中,它不可見。類如人體骨骼、骨骼是若干骨頭(Bone)成樹狀的集合體,而每塊骨頭又分別與若干數量的蒙皮頂點關聯。當骨頭運動的時候,與之關聯的所有蒙皮頂點也會受骨骼的影響而運動。
骨頭與蒙皮頂點的關聯需要考慮到每塊骨頭對蒙皮頂點的影響。 盡管大部分情況下,一個頂點將僅僅被一個骨頭的影響,但是關節處的頂點往往被多根骨頭影響,例如踝關節,可能會分別受小腿骨50%和腳骨50%的影響,這種影響叫作權重(Weight)。
在這種情況下,我們稱踝關節的這些頂點,受小腿骨影響的權重是50%,受腳骨影響的權重也是50%。
Unity的骨骼動畫插件
而在Unity3D中骨骼動畫插件有比較多,例如Uni2D,SmoothMovoe,Puppet2D等等,但為了方便美術人員編輯我們項目使用是spine
Spine介紹
spine容易上手,並且它提供了mesh,通常來說一張紋理只有4個頂點,左下右下左上右上,但是有了mesh,我們可以抓取這個圖片,並設置大量的頂點給它,之后就能通過對頂點的設置完成圖片的拉伸形變,比如乳搖功能。
spine中30幀為1s,最新版中也提供了IK,可以將骨骼固定,做動作。