程序性動畫(Procedural Animation),廣義來說只要有用到程式控制而不是單純播放動
畫的情境應該都可以稱為程序性動畫。
而這篇主要要提的是跟角色移動有關的程序性動畫。
例如說最常見的就是所謂的 IK(Inverse Kinematic),會拿來呈現:
-根據地形調整出正確的腳落點
-固定大部分動畫的同時,調整局部區域
-線材的模擬
我想要利用的是完全只使用程式控制的動畫表現,對我來說程序性動畫展現了幾種價值:
-根據物理性質模擬的高品質動畫
-根據位置資訊自動化表現
-可擴充性廣
雖然長年熟練動畫十二法則的動畫師肯定能做出更有魅力的動畫,但是根據物理性質產生
的高品質動畫實作時間短暫且品質優異;自動根據位置調整的動畫,代表說遊戲系統的判
定不會反過來受到動畫系統的限制;而可擴充性廣主要想提的情境,大概就是能用多種參
數調整物理性質,或更直接的:做了一隻腳後,要做一百隻也沒問題。
https://twitter.com/RandomDevDK/status/1436186119666692124?s=20
↑使用了四足配置、拖行(上半身被腳拖著走)動態傾斜
完全沒有使用任何預先製作的動畫
另一方面,我正在製作的遊戲,在視覺設計上非常簡化。偏真實的素材做出稍微不符合真
實的動作結果就會很礙眼,但是如果視覺上很簡化的話,就可以相對無視這點。
但這個主題畢竟沒有真的很泛用的方式討論,所以在這邊針對所有我嘗試實作的程序性動
畫都做一些流水帳式的說明,提供點參考。
多足步行
多足步行設計大概是我最早看到,也最讓我感到震撼的程序性動畫類型。最震撼的地方就
是製作的難度有多低。
基本上就是以角色為中心,設定幾個方向做為腳延伸出去的方向後往地板打射線找到落點
。每當腳踩的位置遠離判定位置超過指定距離時,就讓那隻腳移動去指定位置。
其他可以提的要點大概有:
-製造隨機錯位的情境(例如純粹的初始位置隨機),避免動起來的結果太固定
-根據角色位移速度改變移動速度,就可以避免敵人移動速度很慢時會看起來很奇怪
-移動到目標地點的速度在水平跟垂直方向上有一些變化,例如說舉起很慢但是放下
雙足
雙足跟多足設計上需要的方針比較不太一樣。三足以上的系統視覺上比較不容易感受到重
心不穩的問題,而且腳的平均分散也代表說腳隨時都在前導狀態。
由於這套系統是根據位移變化去移動,可以說是導因為果的狀態(本來應該是先移動腳再
移動重心,程序性動畫變成先移動),所以判斷腳落點的時候必須往移動方向做點預判看
起來才不會像是拖著腳移動,但是現實世界的雙足生物移動時,結束移動的同時腳必然都
會收在目標要移動到的位置。也就變成我在程序性雙足實作上很容易做成多跨出一步要再
收回的狀態,並不是做得很好。
這部分還有待再研究清楚,但當然可以藉由設定目標不是生物來繞過問題 XD 不過如果總
有一天可以成功研究出高品質的程序性雙足,就代表說可以輕易處理出低成本的大量路人
角色。
旋翼
根據移動速度改變旋翼旋轉的速度,根據旋轉速度來改變對應旋轉方向的旋翼轉速。
可以說是最簡單的形式。
車輛
基本上跟上面的旋翼一樣,移動速度拿來轉動輪胎。如果是兩輪或者廣義兩輪(履帶)的
坦克,可以讓角色在原地旋轉時展現出一輪順轉、一輪逆轉。
如果是超過兩輪的車輛則必須要考慮前導輪轉軸的問題,前軸導引方向的輪子(無論是單
輪或雙輪)要隨著轉彎而改變轉軸角度。
前傾(Lead)與拖行(Drag)
這部分可以有兩種實作方向:位移與旋轉。
位移的部分,可以讓角色的角度相對於移動方向地前傾或後仰,呈現出主動前進跟被腳拖
著走的感受。
旋轉的部分則可以考慮區分角色上下部份。例如說一般生物都會先轉頭再往目標方向前進
,所以可以讓頭轉到目標位置的速度快、而下半身轉到的速度比較慢;反之則可能可以營
造出愚笨的行動感,例如說史萊姆式的生物。
第二點我沒有實作所以這裡借 Jakob Wahlberg 兩個都有實作的示範:
https://twitter.com/Jakob_Wahlberg/status/1399100594288218112?s=20
雜項討論點
首先最值得一提的就是程序性動畫,畢竟各個分項都是對一種物理性質、情境的模擬,也
因此彼此之間都可以再做排列組合。
最簡單的就是前面的前傾拖行可以配合前面任何一個行動動畫,又可以組合出完全不同的
花樣。
整體來說這類型的動畫如果實作起來,除了單純可以提供一定水準的高品質動畫以外,還
可以提供很多自訂版本擴充多樣性。
而至少對於人力極少甚至是一人團隊來說,這樣做既可以提供足夠的水準的動畫又可以不
用花太多勞力。
流水帳大概寫到這邊,提供參考。