《少年 Pi 的奇幻漂流》中,李安用群體模擬(Crowd Simulation)養出很多狐獴

《少年 Pi 的奇幻漂流》中,李安用群體模擬(Crowd Simulation)養出很多狐獴

編按:以下文章只有兩句話有《少年 Pi 的漂流》電影預告以外的資訊,我會以*警告。但讀過小說的人就不用擔心被雷了。

筆者上一篇在有物報告的文章《少年 Pi 的奇幻漂流》幕後功臣:大量運用的 Procedural Modeling引起了一些讀者對影視特效製作的關注,所以筆者想要繼續談應用在電影中另外一項影視特效製作的技術,讓讀者能了解那些在電影裡大量可愛的狐獴是如何被創造並呈現在螢光幕前。

群體模擬(Crowd Simulation)讓狐獴栩栩如生

*說到《少年 Pi》中的狐獴,我想應該沒有讀者會反對我說牠們天真無邪活潑可愛吧?就算同伴被吃掉,也沒有關係,還是該幹什麼就幹什麼,一副樂天的模樣,而且還喜歡跟人類一起睡!相信許多讀者的心已經被這些可愛的小生物捕獲了吧?*

在電影中大量可愛的狐獴 圖片來源:suntimes.com

這群可愛的狐獴,是利用稱為群體模擬(Crowd Simulation)的技術所創造出來的。此技術應用在電影中已經行之有年了,從早先的《魔戒》到《蜘蛛人》與《納尼亞》都可以看到此項技術的應用。

就目前來說有兩種方式,可以創造群體模擬。第一個方法是使用粒子系統,第二個是使用可以寫 AI 人工智慧的模擬軟體如 Massive。

粒子系統的群體模擬

群體模擬的運用,在 Maya 或是 3D Studio Max 中通常會使用粒子系統的方法(particle system),也就是說在3D軟體內建造一個噴發粒子的發射器(particle emitter,市面上大多數的 3D application 都有此功能選項,但可能名稱會不一樣)用來發射大量的小粒子。讀者可以試著想像,如果可以把這些小粒子轉換成你所需要的模型如電影中的狐獴,你就已經完成群體模擬的第一步:產生大量相同的物件了。

在這裡筆者分享一個簡單的例子,筆者想在 Maya 中模擬大量的鳥類飛行(如果讀者沒用過 Maya 也沒有關係,主要是展示過程與概念)。首先在 Maya 中畫一條曲線,並指定曲線 a 點為發射粒子的點。然後筆者調整了一些設定,讓粒子隨著曲線的路徑噴發。

創造一條曲線,並讓粒子沿著曲線噴發。圖片來源:Chi-Feng(如未註明以下皆同)

粒子隨著曲線路徑噴發但仍需要調校一些參數

接下來第二步我只要用我預先準備好的模型,替換(replace)掉粒子就可以了。至於要完成趨近真實鳥的群體模擬,在這裡要考慮幾點:

  1. 群體中鳥的大小,應該要有變化。
  2. 群體中鳥飛行振翅的先後與速度,應該要有變化。
  3. 雖然鳥飛行的路經已經設定好,但讀者如果留心觀察鳥類飛行的行為(如下面的影片),會發現大群體鳥類一起飛行時,「陣行」是一直在改變的。因為單一個體隨時在調整與另外鳥類個體的距離,所以看上去『陣行』的密度鬆散一直在改變,所以如果能夠控制這個參數,那鳥類的群體模擬會更真實。

http://www.youtube.com/watch?v=x7jEK9Ox6pE

筆者根據上述幾點,在軟體中調整了一些參數,獲得下列影片中的結果(由於筆者沒有鳥類的模型,只能用圓型代替,但還是可以看出陣行的變化與個體大小的差異)。

http://www.youtube.com/watch?v=LFb7MK2uSSw

其實運用粒子系統模擬出來的群體模擬效果已經很不錯了,但是近年來觀眾對影視特效的口味越來越重鹹,觀眾在視覺上要求更精緻、更真實的模擬,所以光靠粒子系統法已經有點不敷使用。

拿上面鳥的範例來說,假設筆者要創造同樣的群體模擬,但是希望能夠有兩三種不同的鳥類參雜在其中,雖然粒子系統模擬也可以辦到,但是處理更為複雜。另外,如果我想要有一連串的動作,隨機輸入到某幾隻鳥,或是讓群體中某一群鳥隨機表現振翅飛行的動態並根據某些條件做出反應(如鳥群遇到突如其來的障礙,有些鳥緊急拉高避過,有些卻撞上障礙),這又該如何呢?那 AI (人工智慧)類型的群體模擬就該上場了。

有人工智慧的群體模擬

如開始所提到,還有一種方式可以創造群體模擬,那就是使用可以編輯 AI 的模擬軟體,像是在業界非常出名的 Massive 軟體

Massive 軟體是由一位紐西蘭人 Stephen Regelous 研發。Stephen 原本是 Peter Jackson 工作團隊裡的技術指導,在研發這套軟體之後便投入到《魔戒》三部曲電影的製作並大量應用在電影的戰爭場面。例如在《魔戒:雙城奇謀》中正義聯合軍與獸人軍團令人印象深刻的廝殺場面,就是使用這套軟體的結果。

http://www.youtube.com/watch?v=k72rrPUEDdk

這類群體模擬軟體主要的概念是對 大腦(Brain)AI 的編寫,以及如何派用到所謂代理人(agent)上。筆者將大致的流程畫成圖如下,不過並非每套此類軟體皆如此,但概念上是一樣的。

AI群體模擬的簡單流程

在大腦的節點(nod)內的模糊邏輯(fuzzy logic),是指用一連串用來輸出控制代理人(agent)的規則,讀者可以參考模糊邏輯的解釋頁面來了解更多模糊邏輯的應用。

上面的流程圖可以這樣解釋:

在編輯大腦中的模糊邏輯之後,便可以將其輸出給代理人(agent)。代理人可以是不同的類型,如地形;也可以是模型角色。這個代理人可以根據大腦所給的命令去拿他所需要的東西:比方說收到大腦命令後去動作資料庫拿資料,然後再將結果輸出到某一個群體上。所以如果筆者想要控制一群人走路的動態,首先筆者寫出這樣的模糊邏輯給大腦:

輸入:速度,轉彎

輸出:身體傾斜

模糊邏輯速度的輸入值:快, 慢

模糊邏輯轉彎的輸入值:左轉,直走,右轉

模糊邏輯身體傾斜的輸出值: 傾向左邊,直立無傾斜, 傾向右邊

規則

If 快 and 左轉 then 身體傾向左邊

If 快 and 右轉 then 身體傾向右邊

If 慢 or 直走 then 身體直立無傾斜

然後控制角色的代理人,便會根據大腦的命令去動作資料庫抓取快走的動畫、慢走的動畫、左轉的動畫、直走的動畫、右轉的動畫、左邊傾斜的動畫、直力無傾斜的動畫、傾向右邊的動畫。然後套用在一群人上,這一群人走路的速度快慢與身體傾斜,都會有相應的動作,這樣就完成了基本的 AI 群體模擬控制。同時,可以根據情況加入地形等變化因素的代理人來控制群體的動作。

筆者在 Massive 中創造了兩段群體模擬的影片,第一段是單純的一群人走路,速度有快有慢,但之中每個個體並不會互相撞到對方,同時個體還會隨機的左右張望。第二段影片筆者加入了地形的因素,個體會隨地形變化而影響走路速度的快慢。

http://www.youtube.com/watch?v=klr12UDf3vE

http://www.youtube.com/watch?v=wAid9MzXZPA

《少年 Pi》中的狐獴就是運用了AI 的群體模擬,讓製作團隊可以控制大量的狐獴個體,並賦予不同的動作,使整個狐獴群體栩栩如生。

«

»

科技島讀-你的未來趨勢嚮導

有物推出新產品囉!

由有物報告團隊製作的最新產品-科技島讀

透過閱讀科技島讀,你將能夠掌握科技趨勢,從更高的視角觀察科技將如何改變世界。

現在就前往 >> 科技島讀