Jump to content
主视角中国

Recommended Posts

Posted

转自《榮譽勳章:太平洋戰役》

榮譽勳章:太平洋戰役》的主要體驗,是與人工智慧控制、動畫呈現的人物進行互動。你的小隊成員,你所遇到的無數敵人,以及所有的配角,都是由人工智慧控制、動畫呈現。所以,毫不令人意外地,製作《榮譽勳章:太平洋戰役》的關鍵在於動畫和人工智慧系統。在這三篇《榮譽勳章:太平洋戰役》內幕情報系列文章裡,我們將探討如何結合人工智慧和動畫,使《榮譽勳章:太平洋戰役》的人物栩栩如生。

在這第一篇文章中,我將討論人物動畫的技術層面 - 我們如何讓這些人物在畫面上動起來。在第二篇文章裡,則將討論動畫小組用哪些技巧建造遊戲中使用的一系列動畫,以及動畫師遭遇及克服的諸多挑戰。第三篇文章則將從產品角度來討論人物動畫。好了,讓我們開始吧!

骨架與皮膚

我們將從現代人物動畫的基礎開始。今日最新式的動畫技巧稱為「骨架動畫」(skeletal animation),又稱作「皮膚動畫」(skinned animation)。現代所有3D電玩遊戲都採用這種技術,基本上和3D電腦動畫影片採用的技術相同,例如「侏儸紀公園」或「海底總動員」。

我們由製作一名人物的3D模型開始。模型是由很多三角形所組成,因為三角形是最基本的平面幾何圖形。像這樣一個由三角形所構成的模型,只是一個空殼而已 - 如果你朝裡頭望去,除了模型另一側的三角形背面外,你什麼也看不到。3D遊戲裡的所有物件都是用這種技術建造的 - 人物、卡車、樹木、槍枝,甚至於你行走的地形。

Figure1.JPG

一旦我們有了人物的3D模型,我們便可以開始賦予他生命。英文「動畫」(animation)這個字,字面上的意思是「賦予生命」。在電影和遊戲中,這個字指的是在畫面上產生動畫。動畫乃是由快速顯示接二連三的人物(或其他物件)不同姿勢而產生。每個姿勢都像一張特定姿勢的人物軀體靜止照片。當大量的姿勢串在一起,並以每秒鐘30或60格的速度播放,人物就會以真實且類似人類(希望如此!)的方式動作。透過動畫,我們的人物可以行走、躲藏、射擊,甚至表現情緒。

那麼,我們如何替三角形組成的3D模型擺姿勢?粗暴的方式是讓動畫師辛苦地移動每個三角形周圍的每個頂點,直到人物擺出預期的姿勢。接著,我們會要求動畫師再替人物調整姿勢。然後再一次。然後再一次!…直到我們產生能夠快速重播、構成動畫的完整連續姿勢。透過這種方式移動頂點,工作量似乎很吃重,不是嗎?這讓我想起了迪士尼,過去人們用手繪製動畫電影裡的每一格畫面(速度為每週製作2秒鐘片段)!正如你所想的,粗暴的方式不適合我們。

我們需要更好的方式替人物擺姿勢,如此一來,我們的動畫師就不用日復一日地逐一調整三角形的頂點。解決方法來自於「大自然」。所有脊椎動物,包括人類,都有骨骼。我們的肌肉並不會真正牽動周圍的皮膚。肌肉實際上會牽動我們的骨骼,然後我們的皮膚會跟著動作。在遊戲和電影動畫中,我們採取非常類似的方式。我們替人物建造一副骨骼,將三角形頂點襄嵌在骨骼的骨頭上,然後調整骨骼的姿態,而非直接調整三角形/頂點。當我們以高速連續畫面「重播」骨骼的姿勢時,骨骼會移動,而三角形也會跟著動作!在遊戲中,你絕對不會看到骨骼,但是它的動作卻是賦予3D模型生命的關鍵。

Figure2a.JPG

一名普通的遊戲人物可能包含3000個以上的三角形,而普通的電影人物則包含數萬個或百萬個三角形。這可是一大堆的頂點!但是,即使是今日最複雜的電影或遊戲人物,其骨骼最多也只包含數百根骨頭。所以,動畫師透過移動骨骼而非頂點的方式替人物調整姿態,可以省去大量的工作。

燈光!攝影機!開拍!

電影和遊戲使用類似的技術製作畫面上個別人物的姿勢。但是談及動畫(連續的姿勢)時,遊戲和電影則有很大的不同。

在電影中,每個人物的動作都有精心設計的腳本。舉例來說,我們可能會希望我們的主角湯米.康林(Tommy Conlin)躲藏在倒下的棕櫚樹後面,冒出來開幾槍,然後跳上樹幹、奔跑,最後以翻筋斗的方式躲入掩護更佳的壕溝中。如果我們是在製作一部二戰太平洋戰役電影,而不是一款遊戲,只需使用一段動畫(連需的姿勢),便可呈現湯米從棕櫚樹衝向壕溝的精彩過程。

然而,在遊戲中,人物的動作是不可預測的,因為人物是由玩家或人工智慧系統控制。湯米可能會跳到棕櫚樹幹上,然後在跑向壕溝的半路上,突然朝旁邊撲過去,試圖閃躲一枚落在附近的手榴彈。每次進行遊戲時,遊戲中每位人物的動作都不會一樣。因此,我們需要將動畫拆解成許多能夠根據玩家和人工智慧的決定,以不同方式組合起來的小片段。我們稱這些小片段為「動作」。

為了將我們的小棕櫚樹場景融入遊戲中,我們必須製作湯米躲在棕櫚樹後面的動作、跳躍的動作 - 使湯米能夠跨過棕櫚樹、連續奔跑的動作 - 使湯米能夠從棕櫚樹跑向壕溝,以及翻筋斗的動作 - 使湯米躲入壕溝。而且,因為玩家(或人工智慧)可能會突然決定要避開一枚手榴彈,我們也需要一段他撲向旁邊的動畫。這一切只不過是開端而已!要讓一名人物在遊戲裡栩栩如生,我們需要製作大量的「動作」,包含所有微不足道但我們人物可能會作的所有事情。

Figure3.JPG

奔跑、循環、再循環

讓我們更進一步的拆解「動作」,我們可以清楚的了解發生了什麼事情。讓我們研究一下讓湯米.康林直線奔跑的過程。我們稱之為奔跑循環,因為奔跑實際上是不斷重複的動作。左腳抬起,向前跨出,然後放在地上。人物的重心轉移到左腳,接著抬起右腳,向前跨出,然後放在地上。之後不斷重複這個循環。在遊戲裡,我們會利用行走或奔跑這類動作可以重複的好處。如果你在Maya上看著《榮譽勳章:太平洋戰役》裡的奔跑循環動畫,你會發現動畫本身是由能夠完成一個循環的姿勢所構成 - 左腳抬起,左腳放下,右腳抬起,右腳放下。要讓人物在遊戲中向前跨出十步,我們只需重複播放這段動畫十次。

當然,並非所有的動畫都能夠循環。當湯米跳上倒下的棕櫚樹幹時,必須以一段連續而無法循環的動作呈現。在這種情況下,跳上棕櫚樹在遊戲裡必須是一個動作(因此會有一段動畫)。然而,某些看似沒有重複的動作,實際上可以拆解成許多更細的動作。舉例來說,想像一下湯米必須跳過壕溝的場面。這段動作起於跳躍,湯米彎曲他的膝蓋,由壕溝的邊緣起跳。接著湯米飛到空中 - 這可以透過一小段循環動畫來達成,呈現人物在空中的姿態(依據壕溝的寬度而有所不同)。當他落到壕溝另一側的地面上時,他會執行著陸的動畫。所以,在遊戲中,跳過壕溝的簡單動作,實際上可能是由三段不同的動作(三段動畫)所組成。

將人物動作拆解成許多諸如此類的細微動作有許多的好處。首先,可以節省動畫師製作動畫的時間,因為無論人物要走多遠,他們只需製作一個走路循環。其次,這種方式也可以節省存放構成每段動畫的所有姿勢的記憶體空間。這種方式的第三個好處是可讓我們中斷人物的動作。如果一名士兵正在奔跑,打算躲到一棵大樹後面,但卻在抵達該處之前被射殺,我們可以停止播放他奔跑的循環動畫,並輕鬆地接合一段士兵倒地的動畫。

再幫我擺姿勢,山姆

替人物產生姿勢的方法之一,是要求動畫師(親切地!)使用Maya創造一段動畫。然而,《榮譽勳章:太平洋戰役》的引擎給予我們其他選擇。

《榮譽勳章:太平洋戰役》裡的動畫可以混合在一起。理論上,透過插入兩段以上的「關鍵」動畫,可以讓我們製作出無窮的獨特姿勢。這個概念十分簡單。假設,在一段動畫中(動畫A),我們的人物的肘關節彎曲成90度。在另一段動畫中(動畫B),人物的肘關節完全沒有彎曲(也就是說,呈0度)。我們能以各種方式混合這兩段動畫,使我們人物的肘關節彎曲成0度到90度之間的任何角度。0度角代表使用了0%的動畫A和100%的動畫B。依此類推,90度角代表使用了100%的動畫A和0%的動畫B。如果我們使用50%的動畫A和50%的動畫B,將可以使肘關節彎曲45度角。這帶來無窮的可能性!

Figure5.JPG

在《榮譽勳章:太平洋戰役》裡,混合動畫有兩種不同的用途。有時候,我們利用混合動畫產生大量難以直接調整出來的動作。舉例來說,如果一名人物必須上下瞄準他的武器,我們可以直接產生兩段動畫 - 其中一段動畫裡的武器完全指向上方,而另一段動畫裡的武器則完全指向下方。然後,我們混合這兩段動畫,產生介於其間的任何可能角度。

混合動畫的第二種用途,是創造不同動作間的流暢轉折。如果人物正在奔跑,然後被偏離的子彈擊中,他必須倒在地上。但是,倒下的動作應該什麼時候開始?左腳向前跨出時?右腳向前跨出時?或是介於之間?如果我們等到適當的腳踏在地上時才開始讓人物摔倒,會讓人覺得人物的反應有人為的延遲。所以,我們在人物中彈的那一瞬間凍結人物的奔跑姿勢,然後接著混入倒地的動畫。

我們也會使用稱為反轉?#092;動學(IK)的數學工具,調整手動調出來的姿勢。IK是一種找尋姿勢的程序(一連串的接合點旋轉),讓你的人物的四肢移動到你所期望的位置。在機械人界,IK被廣泛使用,讓機械人能夠靠近並拾起環境中的物體。舉例來說,在《榮譽勳章:太平洋戰役》中,我們使用IK讓人物抓住移動中的砲塔把手。

最後,我們透過Havok物理模擬系統為我們產生姿勢。這種技巧最常用來產生「布玩偶」死亡動畫,所以,垂死的人物能夠跛行,並以寫實的方式與周遭環境互動。

資訊超載

我相信,你已經開始了解替電玩遊戲創造動態人物是多麼具有挑戰性的事情。我們必須找出每個人物能做出的所有基本動作,將其拆解成能以無限方式組合的循環或細微動作,然後創造出可用來組合所有動作的所有姿勢。但是,這樣還不夠。光是管理大量的動畫資料,就是一場惡夢。

幸?#092;的,有一些方式可以幫助我們管理如此複雜的事情。首先,我們發現,大部分的動作都可以套用在遊戲裡的任何人物上。無論該人物是湯米.康林、法蘭克.米諾蘇(Frank Minoso)、吉米.蘇利文(Jimmy Sullivan)或是任何其他盟軍士兵,他們都會以十分雷同的方式奔跑、射擊和裝填彈藥。透過將大部分的動畫分享給遊戲裡的所有人物使用,可以大幅減少需要的動畫數量。在《榮譽勳章:太平洋戰役》中,絕大部分的動畫,都可以用在任何人物身上,然而我們仍替軸心國士兵製作了特別的動畫,因為日軍以特殊的方式攜帶武器,而且舉止也和盟軍士兵大不相同。

《榮譽勳章:太平洋戰役》開發小組管理龐大且複雜的動畫資產的另一種方式,是將我們稱為「調整參數」的東西,套用到一組基本動作上。這裡有個特例,在《榮譽勳章:太平洋戰役》裡的人物有三種姿態:站立、蹲下和俯臥。在這三種姿態下,人物都能夠順利的執行大部分的動作 - 也就是說,無論站立、蹲下或是俯臥在地上,人物都可以發射他的武器。在這種情況下,「發射」是基本動作,而三種姿態只不過是「發射」動作的「調整參數」。每個「調整參數」暗示著各種動作會需要有n個版本。舉例來說,「調整參數」使動畫數需乘以3:站立一種、蹲下一種、倒臥一種。

在《榮譽勳章:太平洋戰役》裡,我們使用「調整參數」來描述人物的姿態、人物的情緒、人物持有的武器、人物所屬的「隊伍」(軸心國或同盟國),以及該動作執行的方向(瞄準是一種多方向動作)。這是個非常有用的工具,能協助我們管理數不清的動畫資產。然而,仍舊無法減少動畫師產生各種基本動作的各種版本的工作量。試想 - 就算只有兩個「調整參數」,各有三種變化,你就必須替每個基本動作繪製9(= 3 × 3)種動畫。而我們有5個「調整參數」,各有至多8種變化。不用懷疑,全部的《榮譽勳章:太平洋戰役》動畫組,包含了超過1700種動畫(尚未計算特殊「效果」)!

Figure6.JPG

最後一種我們用來管理複雜動畫的技巧,是使用複合動作。正如其名,這讓我們能夠使用較簡單的動作建立出複雜動作。舉例來說,我們可以創造一組隨機選擇的動作,在n個輸入動作中隨機選擇。我們可以建立一個連續動作,只需以預先排好的順序,播放輸入動作即可。而且,我們可以建立混合動作,以任何期望的百分比,將輸入動作混合在一起即可。

Figure7.JPG

如何將人工智慧和動畫結合在一起

要在畫面上製作出栩栩如生的人物,動畫扮演著關鍵性的角色。但是,如果沒有智慧驅使著這些人物,你所得到的只不過是一群行屍走肉而已。控制遊戲人物的方式有兩種 - 透過玩家,或是透過人工智慧。基本上,無論是哪種方式,問題都一樣:我們必須從智慧代理人(玩家或人工智慧系統)那裡取得指令,然後讓人物去執行,如此一來,他們在畫面上的表現才會精確地對應那些指令。

這裡有個簡單的例子,如果玩家按下「W」鍵讓人物向前跑,遊戲引擎必須播放奔跑循環動畫(在第一人稱射擊遊戲中,你很少看到你的人物,只會看到他的手臂和武器。不過,基本上,這和人工智慧系統命令非玩家角色向前跑沒有什麼不同。)當「W」鍵放開時,奔跑循環動畫應該停止,並立刻播放閒置動畫。當滑鼠左鍵被按下時,應該立即播放人物發射武器的動畫。依此類推。

表面上,這似乎再簡單不過了 - 但是卻比看起來更為複雜。舉例來說,如果人物在替武器裝填彈藥的過程中受傷,我們該怎麼辦?如果對一名已被子彈擊中、正要倒在地上的人物射擊,又會發生什麼事情?他該有反應嗎?如果有的話,如何反應?而且,當一名人物在奔跑後停下,我們可能會想要播放介於之間的「即將停止」動畫。如果正處於即將停止的階段,而玩家或人工智慧卻決定讓人物再度奔跑,會發生什麼事?

人工智慧和動畫間的交互關係,實際上非常複雜。動作狀態機制是常用來管理這種交互關係的一種方式。這個概念相當簡單(然而,要使它正確?#092;作卻相當困難)。你繪製一張圖,呈現你的人物可能處於的各種狀態:奔跑、跳上障礙物、裝填彈藥、射擊等等。接著,你在不同狀態間繪製箭頭,指示在哪些條件下,人物可以從一種狀態轉變至另一種狀態。舉例來說,在裝填彈藥時,人物可能會完成動作並返回他的閒置狀態,或者,他可能會在裝填彈藥過程中被子彈擊中,而表現出疼痛的樣子。幸?#092;的是,你通常無法從各種狀態轉變至其他的各種狀態。舉例來說,幾乎不可能從裝填彈藥的狀態轉變為跳躍狀態。儘管如此,管理動作狀態絕對是件非常棘手的差事。

這是個嚴苛的考驗。隨著人工智慧程式碼和狀態機制反覆的修正與增加,一連串的動畫將隨之改變與發展成形。因此,人工智慧程式師和動畫師必須不斷溝通。因為其跨領域的特色,人物動畫是今日遊戲開發工作裡,最有趣但也最具挑戰性的一環。

勇往直前

我希望你會喜歡這篇探討驅動遊戲人物動畫的背後技術的文章。如你所見,仍舊有許多的挑戰等待我們去探索。在接下的文章中,我們將討論動畫是如何製作的,了解製作《榮譽勳章:太平洋戰役》的動畫時遭遇到什麼樣的挑戰,以及了解如何管理整個過程。下次見了…! - 傑森(Jason)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

登录

Already have an account? Sign in here.

现在登录
×
×
  • 创建新的...