考慮到大量導致的記憶體消耗問題,發展出了一些2d動畫精靈壓縮方式。例如乙個人物走動的動畫,可以將身體、胳膊、腿單獨切成乙個個碎片圖,然後在每一幀裡,用同樣的身體碎片圖,配上不同的胳膊、腿,形成完整的一幀。動畫只需要匯出身體、胳膊、腿的碎片圖即可。這樣既節省了動畫裡大量的不變部分,同時每一幀裡哪些透明背景區域也不需要儲存到圖里了。
接下來有了剛體分層動畫(rigid hierarchical animation),仍舉乙個人物走動的例子,將人物模型分成身體、胳膊、腿幾個剛體(不會產生形變),這些剛體各自由一堆頂點組成。動畫裡每一幀記錄這些剛體的位置、角度等。剛體分層動畫的缺陷是,因為剛體不會因為相互位置關係的影響產生形變,在剛體和剛體的連線處,因為乙個剛體位置角度的變化,就有可能使原本嚴絲合縫的連線,產生撕裂的效果。
其實不考慮記憶體消耗的話,3d動畫最直接的方式,是儲存每一幀裡模型的所有頂點位置(baked animation)。但隨著遊戲規模的擴大,這種方式的記憶體消耗變得不可接受。開發者們又想出了變形目標動畫(morph target animation)。即只儲存形態變化較大的一些關鍵幀裡的頂點,關鍵幀之間的幀,採用兩幀的插值計算頂點位置。
變形目標動畫相對剛體分層動畫來講,有更好的形變效果,但是消耗記憶體較大,也缺少一些執行時生成動畫的能力(例如在剛體動畫裡,程式完全可以做到讓人物的胳膊晃一晃什麼的)。二者的結合,產生了現在廣泛流行的骨骼動畫技術(skeleton animation),或稱蒙皮動畫(skinning animation)。
在骨骼動畫裡,我們像剛體動畫一樣,儲存每一幀裡人物身體、胳膊、腿的位置和角度,身體、胳膊、腿即是骨骼。但是在渲染時,並不將這些骨骼直接渲染出來,而是渲染這些骨骼影響著的**頂點。乙個**頂點,可能被幾個骨骼影響,這樣在骨骼與骨骼的連線處,就不會產生剛體動畫哪種明顯的斷裂了。
下篇文章裡,會具體介紹骨骼動畫的計算方法,並提供乙個幾百行**的簡單實現。
注:本文內容大體選自《game engine architecture》一書
SVG中的動畫技術
動畫技術是網際網路 中不可缺少的乙個重要組成部分,是吸引訪問者的重要手段之一,svg也同樣有能力隨時改變向量圖象外在表現的能力。svg中生成動畫的方式有 1 利用svg提供的動畫元素實現 由於svg的內容可以定義成動態變化的,因此,利用svg提供的各種動畫元素,我們就可以得到各種動畫效果,比如 沿某...
SVG中的動畫技術 1
svg中的動畫技術 1 動畫技術是網際網路中不可缺少的乙個重要組成部分,是吸引訪問者的重要手段之一,svg也同樣有能力隨時改變向量圖象外在表現的能力。svg中生成動畫的方式有 1 利用svg提供的動畫元素實現 由於svg的內容可以定義成動態變化的,因此,利用svg提供的各種動畫元素,我們就可以得到各...
SVG中的動畫技術 1
svg中的動畫技術 1 動畫技術是網際網路中不可缺少的乙個重要組成部分,是吸引訪問者的重要手段之一,svg也同樣有能力隨時改變向量圖象外在表現的能力。svg中生成動畫的方式有 1 利用svg提供的動畫元素實現 由於svg的內容可以定義成動態變化的,因此,利用svg提供的各種動畫元素,我們就可以得到各...