程序性動畫實作雜談

· 1861 字 · 4 分鐘

程序性動畫,廣義來說只要有用到程式控制而不是單純播放動畫的情境應該都可以稱為程序性動畫。而這篇主要要提的是跟角色移動有關的程序性動畫。

例如說最常見的就是所謂的 IK,會拿來呈現:

  • 根據地形調整出正確的腳落點
  • 固定大部分動畫的同時,調整局部區域,例如在人物移動動畫中額外使用 IK 處理手持物件的動畫
  • 線材的模擬(參考:Sebastian Lague 最近有部影片用很鉅細靡遺地解釋了這部分

我想要利用的是完全只使用程式控制的動畫表現,對我來說程序性動畫展現了幾種價值:

  • 根據物理性質模擬的高品質動畫
  • 根據位置資訊自動化表現
  • 可擴充性廣

雖然長年熟練動畫十二法則的動畫師肯定能做出更有魅力的動畫,但是根據物理性質產生的高品質動畫實作時間短暫且品質優異;自動根據位置調整的動畫,代表說遊戲系統的判定不會反過來受到動畫系統的限制;而可擴充性廣主要想提的情境,大概就是能用多種參數調整物理性質,或更直接的:做了一隻腳後,要做一百隻也沒問題。

下圖使用了四足配置、拖行(上半身被腳拖著走)動態傾斜,完全沒有使用任何預先製作的動畫:

movement example

另一方面,我正在製作的遊戲,在視覺設計上非常簡化。偏真實的素材做出稍微不符合真實的動作結果就會很礙眼,但是如果視覺上很簡化的話,就可以相對無視這點。

但這個主題畢竟沒有真的很泛用的方式討論,所以在這邊針對所有我嘗試實作的程序性動畫都做一些流水帳式的說明,提供點參考。

多足步行 🔗

多足步行設計大概是我最早看到,也最讓我感到震撼的程序性動畫類型。最震撼的地方就是製作的難度有多低。

基本上就是以角色為中心,設定幾個方向做為腳延伸出去的方向後往地板打射線找到落點。每當腳踩的位置遠離判定位置超過指定距離時,就讓那隻腳移動去指定位置。

其他可以提的要點大概有:

  • 製造一些隨機錯位的情境(例如純粹的初始位置隨機),避免動起來的結果太固定
  • 根據角色位移的速度改變腳的移動速度,就可以避免敵人移動速度很慢時會看起來很奇怪
  • 移動到目標地點的速度在水平跟垂直方向上可以有一些變化,例如說舉起很慢但是放下

component quick glance

Animation Curve 是個很適合拿來提供調整空間的工具,第一個是腿的形狀設定、第二個則是移動過程中高度變化的情境,上圖設定可以呈現出舉起很慢放下很快的笨重感。

multileg example

雙足 🔗

雙足跟多足設計上需要的方針比較不太一樣。三足以上的系統視覺上比較不容易感受到重心不穩的問題,而且腳的平均分散也代表說腳隨時都在前導狀態。

由於這套系統是根據位移變化去移動,可以說是導因為果的狀態(本來應該是先移動腳再移動重心,程序性動畫變成先移動),所以判斷腳落點的時候必須往移動方向做點預判看起來才不會像是拖著腳移動,但是現實世界的雙足生物移動時,結束移動的同時腳必然都會收在目標要移動到的位置。也就變成我在程序性雙足實作上很容易做成多跨出一步要再收回的狀態,並不是做得很好。

這部分還有待再研究清楚,但當然可以藉由設定目標不是生物來繞過問題 XD 不過如果總有一天可以成功研究出高品質的程序性雙足,就代表說可以輕易處理出低成本的大量路人角色。

旋翼 🔗

根據移動速度改變旋翼旋轉的速度,根據旋轉速度來改變對應旋轉方向的旋翼轉速。可以說是最簡單的形式。

copter example

車輛 🔗

基本上跟上面的旋翼一樣,移動速度拿來轉動輪胎。如果是兩輪或者廣義兩輪(履帶)的坦克,可以讓角色在原地旋轉時展現出一輪順轉、一輪逆轉。

vehicle example

如果是超過兩輪的車輛則必須要考慮前導輪轉軸的問題,前軸導引方向的輪子(無論是單輪或雙輪)要隨著轉彎而改變轉軸角度。

more vehicle example

前傾拖行 🔗

這部分可以有兩種實作方向:位移與旋轉。

位移的部分,可以讓角色的角度相對於移動方向地前傾或後仰,呈現出主動前進跟被腳拖著走的感受。

旋轉的部分則可以考慮區分角色上下部份。例如說一般生物都會先轉頭再往目標方向前進,所以可以讓頭轉到目標位置的速度快、而下半身轉到的速度比較慢;反之則可能可以營造出愚笨的行動感,例如說史萊姆式的生物。

第二點我沒有實作所以這裡借 Jakob Wahlberg 兩個都有實作的示範:

jakob’s gif

雜項討論點 🔗

首先最值得一提的就是程序性動畫,畢竟各個分項都是對一種物理性質、情境的模擬,也因此彼此之間都可以再做排列組合。

最簡單的就是前面的前傾拖行可以配合前面任何一個行動動畫,又可以組合出完全不同的花樣。

整體來說這類型的動畫如果實作起來,除了單純可以提供一定水準的高品質動畫以外,還可以提供很多自訂版本擴充多樣性。

而至少對於人力極少甚至是一人團隊來說,這樣做既可以提供足夠的水準的動畫又可以不用花太多勞力。

流水帳大概寫到這邊,提供參考。

extra gif 1

extra gif 2