※ 引述《azureblaze (AzureBlaze)》之銘言:
: 傳統animation的作法是把模型切割成很多mesh
: 像是大腿小腿身體各一個
: 然後分別定義每個mesh的平移旋轉縮放量做出keyframe
: keyframe間再內插出他們的位置。
: 他最大的缺點就是要動就要整個mesh一起動
: 動動你的手指,你會發現皮膚上有些地方是幾乎不會動的
: 因此這樣的方式只能處理機械類的東西
: (或是用在那個手臂是長方體肩膀是球的美好時代)
: skeletal(skinned) animation的作法會用傳統的方式弄出一個骨架
: 然後在每個vertex上指定每個骨頭對他的影響力
: 像是手臂中間的移動會完全照著手肘關節,可是越靠肩膀
: 受到肩膀關節位置的影響就會越大。
: 因此兩種動畫的製作差異算是頗大,所以無法靠轉檔處理
: (其實傳統要硬轉成skeletal的話可以指定一個mesh完全只
: 受一個骨頭影響,可是skeletal有額外的運算負擔所以大
: 概沒人會這樣做)
: 就XNA的命名看來我覺得他應該是用兩個不同的東西來處理
: 這兩種animation,所以放不對的資料他會抱怨
: 另外有些animation還是混用的,那才麻煩XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.98.40
如同azureblaze所說的
linked-nodes
每個node各自擁有自己的transform與mesh
animation則是單純更新每個node的transform而已
skeletal mesh則是使用多個bone所組成的骨架
每個vertex使用多個index與weight來混合出結果
通常使用4組index/weight的vertex format
animation則是更新bone的transform
除此還要運算vertex blending
使用CPU blending的好處是只需要運算一次
之後不管render pass幾次都不會重複運算
使用GPU blending的好處當然就是快速囉
不過multi-pass的時候還是會重複運算
當然現在GPU硬體已經進步到render2buffer了
所以也可以先用render2buffer的方式來做vertex blending
之後的multi-pass就可以用static mesh rendering的方式來最佳化