2007/03/01

[教學][筆記]群體動畫模擬(simulation of crowd scenes)觀念與隨想

最近在製作以AI Implant軟體進行群體動畫的教學影片, 由於這個教學稍複雜 所以目前還在準備階段. 群體動畫(Crowd scene)這些年來不管是在電影 商業廣告 甚至線上遊戲都廣為應用. 或許有些人對什麼是群體動畫感到一臉疑惑 其實像是魔戒(The Lord of the Rings)當中兩軍交戰的場景 就是最好的例子. 由於拍戲不可能找來百萬大軍 半獸人 所以以軟體來模擬大量演員的動作 便要交由專門處理群體動畫的軟體來模擬. 目前比較有名的群體動畫軟體如可在Windows上運作的AI Implant或是只能在Linux系統上跑的Massive. 不管是哪類的軟體 其背後的邏輯都大同小異 如同其他的3D繪圖軟體一班 概念的了解比軟體的操作更為重要.

由於電腦運算的限制 當前的群體動畫都不是以物理為基礎的(physical-based), 好比AfterBurn的火焰與FumeFx相比, Afterburn的火焰並沒有物理碰撞特性 而FumeFX能夠依據場景產生互動的煙霧與火焰. 也就是說當使用群體動畫軟體製作兩軍交戰的動畫時, A軍將B軍給擊倒並不是因為B軍的武器真的攻擊(碰撞)到A軍 讓A軍因此倒下 而是在軟體模擬下A軍在邏輯上被B軍擊敗 而這時A軍撥放了倒下的動作捕捉檔(Mocap file) 讓最終的結果看來是A軍被B軍擊倒.

上面的說明看起來繞舌 可以再把群體動畫模擬再簡化成三大元素: (1)預先製作好的動作檔 通常為mocap file (2)由各個代理人(Delegate)產生路徑 (3)最後再由代理人的決定樹(decision tree)來決定在代理人的路徑當中的各個事件 撥放適當的動作檔. 在動作模擬時每個代理人被視為一個點 例如有2萬紅軍與3000綠軍交戰時 就是有2萬個紅軍代理人(點)與3千綠軍點進行模擬. 一個逼真的群體動畫模擬端看適當的動作檔 與適當的決定樹下 調控完美的轉接時間(Transition) 而達到的最終效果.


實際舉例的話 平原交戰的決定樹大致可以這樣想: 行軍-->找尋敵軍-->攻擊 死亡 或是 逃跑 如果攻擊成功 再去找下一個最近的敵人. 動作檔則需要 行軍(March) 攻擊(Fight) 逃跑(Flee) 死亡(death). 代理人的路徑則是在整個模擬跑完產生的. 這是相當簡化的版本 如果要製作更複雜的群體動畫 還要加入更多因素 例如不同的軍種有不同的攻擊方式(射箭) 就需要不同的動作檔.

當然群體動畫不是只有兩軍交戰可以用的到. 想下一下你接到台灣鐵路公司的3D動畫案子 要製作排隊買票的群體動畫. 假設有3個售票亭 站在買票人的角度 他的決定樹大概是這樣: 首先決定要排哪一個售票亭(最少人那一排) 當他排一陣子後 可能另兩個售票亭的人數變的更少 於是他可能要決定是否要改排其他售票亭. 通常在這種其況 台鐵的售票亭每排的等候人數 會大致相等 原因是每個售票廷的距離很近 等候者可以隨時改變決定; 當模擬改為上製作上電車車廂的民眾時 情況會比較不同 因為每個車廂距離相當遠 不可能任意改變決定 我們常常可以看到某個車廂擠滿了人 而某些車廂些卻還有位置; 若是捷運車廂又會更不同 因為捷運車廂上車時間只有幾秒鐘 上車的人只有幾秒的時間做決定 幾乎沒有辦法立即換車廂.以上三種情況需要哪些動作檔 怎樣的決定樹 產生怎樣的路徑 你想到了嗎?
Post a Comment