了解過3D相關知識的都知道,模型(Model)是由一個個三角形組成的,而這種三角形的學名則是網格(Mesh)。當然在DCC軟體裡為了方便創作,會用2個三角形組成四邊形作為網格。然後便是骨骼(Skeleton)了,它是驅動模型運動的根本。最後便是讓模型跟著骨骼一起運動了,這個骨肉融合的過程稱為綁定,具體要做的事便是將某節骨骼與相關的網格建立關係。
模型上有著不同的顏色,這表示該節骨骼所影響到的網格權重值(藍色為0,紅色為1),所以綁定也俗稱「刷權重」。權重值越高,該節骨骼對相應網格的影響便越大(存在多節骨骼對相同網格存在影響,此時便要通過權重值來決定優先級了)。
隨著時代的發展,現代DCC軟體基本配備自動刷權重的功能了。做好模型部件的劃分(每個部件擁有獨立的骨骼,通過各骨骼之間建立關係來聯繫模型),減少每個模型的權重複雜度,如此通過自動刷權重基本可以應對一般情況了。
生成給Unity使用的模型與動畫我選擇FBX格式,畢竟這算是最流行的3D格式了。對於動畫,我選擇一個動畫一個FBX文件的形式(業界也有全部做到一個文件裡,在Unity內分割的行為),動畫FBX文件裡只有骨骼與動畫信息,不含模型。
一般的動畫,在這種動畫模式下實現復用的思想很樸素:只要模型的骨骼與動畫的骨骼要素相同,那麼復用便是水到渠成的事了。這也表示必須同類模型與動畫的骨骼結構是一致的。
事實上Humanoid便是做了一層中間層轉換,讓各自的人形模型的骨骼信息統一抽象為上圖這套體系,並且還做了關節運動幅度的可控,如此便可實現復用了。且Unity實現了自動識別填充,使用起來還算方便。
骨骼動畫的本質,便是在不同的時間點為某節骨骼定義了特定的位置、縮放、旋轉。動畫的運作便是根據兩個時間點之間的骨骼數據做數值變化,這種行為稱之為補間(Tweens),同理骨骼動畫也就是一種補間動畫。與補間動畫相對應的概念是幀動畫,幀動畫只會在特定的時間點發生變化,時間點之間的運動途中是不變的,在許多經典的2D遊戲動畫便是這種做法。
當然這種方式並不完美:真正的2D幀動畫每一幀的持續時間都是人為確定的,而這樣只是粗暴的抽幀罷了。當然人為確定幀時間的方式勢必帶來更高的人力成本,具體如何仍需取捨。