K.O Posted 2004年9月4日 04:46 分享 Posted 2004年9月4日 04:46 转自《榮譽勳章:太平洋戰役》 榮譽勳章:太平洋戰役》的主要體驗,是與人工智慧控制、動畫呈現的人物進行互動。你的小隊成員,你所遇到的無數敵人,以及所有的配角,都是由人工智慧控制、動畫呈現。所以,毫不令人意外地,製作《榮譽勳章:太平洋戰役》的關鍵在於動畫和人工智慧系統。在這三篇《榮譽勳章:太平洋戰役》內幕情報系列文章裡,我們將探討如何結合人工智慧和動畫,使《榮譽勳章:太平洋戰役》的人物栩栩如生。 在這第一篇文章中,我將討論人物動畫的技術層面 - 我們如何讓這些人物在畫面上動起來。在第二篇文章裡,則將討論動畫小組用哪些技巧建造遊戲中使用的一系列動畫,以及動畫師遭遇及克服的諸多挑戰。第三篇文章則將從產品角度來討論人物動畫。好了,讓我們開始吧! 骨架與皮膚 我們將從現代人物動畫的基礎開始。今日最新式的動畫技巧稱為「骨架動畫」(skeletal animation),又稱作「皮膚動畫」(skinned animation)。現代所有3D電玩遊戲都採用這種技術,基本上和3D電腦動畫影片採用的技術相同,例如「侏儸紀公園」或「海底總動員」。 我們由製作一名人物的3D模型開始。模型是由很多三角形所組成,因為三角形是最基本的平面幾何圖形。像這樣一個由三角形所構成的模型,只是一個空殼而已 - 如果你朝裡頭望去,除了模型另一側的三角形背面外,你什麼也看不到。3D遊戲裡的所有物件都是用這種技術建造的 - 人物、卡車、樹木、槍枝,甚至於你行走的地形。 一旦我們有了人物的3D模型,我們便可以開始賦予他生命。英文「動畫」(animation)這個字,字面上的意思是「賦予生命」。在電影和遊戲中,這個字指的是在畫面上產生動畫。動畫乃是由快速顯示接二連三的人物(或其他物件)不同姿勢而產生。每個姿勢都像一張特定姿勢的人物軀體靜止照片。當大量的姿勢串在一起,並以每秒鐘30或60格的速度播放,人物就會以真實且類似人類(希望如此!)的方式動作。透過動畫,我們的人物可以行走、躲藏、射擊,甚至表現情緒。 那麼,我們如何替三角形組成的3D模型擺姿勢?粗暴的方式是讓動畫師辛苦地移動每個三角形周圍的每個頂點,直到人物擺出預期的姿勢。接著,我們會要求動畫師再替人物調整姿勢。然後再一次。然後再一次!…直到我們產生能夠快速重播、構成動畫的完整連續姿勢。透過這種方式移動頂點,工作量似乎很吃重,不是嗎?這讓我想起了迪士尼,過去人們用手繪製動畫電影裡的每一格畫面(速度為每週製作2秒鐘片段)!正如你所想的,粗暴的方式不適合我們。 我們需要更好的方式替人物擺姿勢,如此一來,我們的動畫師就不用日復一日地逐一調整三角形的頂點。解決方法來自於「大自然」。所有脊椎動物,包括人類,都有骨骼。我們的肌肉並不會真正牽動周圍的皮膚。肌肉實際上會牽動我們的骨骼,然後我們的皮膚會跟著動作。在遊戲和電影動畫中,我們採取非常類似的方式。我們替人物建造一副骨骼,將三角形頂點襄嵌在骨骼的骨頭上,然後調整骨骼的姿態,而非直接調整三角形/頂點。當我們以高速連續畫面「重播」骨骼的姿勢時,骨骼會移動,而三角形也會跟著動作!在遊戲中,你絕對不會看到骨骼,但是它的動作卻是賦予3D模型生命的關鍵。 一名普通的遊戲人物可能包含3000個以上的三角形,而普通的電影人物則包含數萬個或百萬個三角形。這可是一大堆的頂點!但是,即使是今日最複雜的電影或遊戲人物,其骨骼最多也只包含數百根骨頭。所以,動畫師透過移動骨骼而非頂點的方式替人物調整姿態,可以省去大量的工作。 燈光!攝影機!開拍! 電影和遊戲使用類似的技術製作畫面上個別人物的姿勢。但是談及動畫(連續的姿勢)時,遊戲和電影則有很大的不同。 在電影中,每個人物的動作都有精心設計的腳本。舉例來說,我們可能會希望我們的主角湯米.康林(Tommy Conlin)躲藏在倒下的棕櫚樹後面,冒出來開幾槍,然後跳上樹幹、奔跑,最後以翻筋斗的方式躲入掩護更佳的壕溝中。如果我們是在製作一部二戰太平洋戰役電影,而不是一款遊戲,只需使用一段動畫(連需的姿勢),便可呈現湯米從棕櫚樹衝向壕溝的精彩過程。 然而,在遊戲中,人物的動作是不可預測的,因為人物是由玩家或人工智慧系統控制。湯米可能會跳到棕櫚樹幹上,然後在跑向壕溝的半路上,突然朝旁邊撲過去,試圖閃躲一枚落在附近的手榴彈。每次進行遊戲時,遊戲中每位人物的動作都不會一樣。因此,我們需要將動畫拆解成許多能夠根據玩家和人工智慧的決定,以不同方式組合起來的小片段。我們稱這些小片段為「動作」。 為了將我們的小棕櫚樹場景融入遊戲中,我們必須製作湯米躲在棕櫚樹後面的動作、跳躍的動作 - 使湯米能夠跨過棕櫚樹、連續奔跑的動作 - 使湯米能夠從棕櫚樹跑向壕溝,以及翻筋斗的動作 - 使湯米躲入壕溝。而且,因為玩家(或人工智慧)可能會突然決定要避開一枚手榴彈,我們也需要一段他撲向旁邊的動畫。這一切只不過是開端而已!要讓一名人物在遊戲裡栩栩如生,我們需要製作大量的「動作」,包含所有微不足道但我們人物可能會作的所有事情。 奔跑、循環、再循環 讓我們更進一步的拆解「動作」,我們可以清楚的了解發生了什麼事情。讓我們研究一下讓湯米.康林直線奔跑的過程。我們稱之為奔跑循環,因為奔跑實際上是不斷重複的動作。左腳抬起,向前跨出,然後放在地上。人物的重心轉移到左腳,接著抬起右腳,向前跨出,然後放在地上。之後不斷重複這個循環。在遊戲裡,我們會利用行走或奔跑這類動作可以重複的好處。如果你在Maya上看著《榮譽勳章:太平洋戰役》裡的奔跑循環動畫,你會發現動畫本身是由能夠完成一個循環的姿勢所構成 - 左腳抬起,左腳放下,右腳抬起,右腳放下。要讓人物在遊戲中向前跨出十步,我們只需重複播放這段動畫十次。 當然,並非所有的動畫都能夠循環。當湯米跳上倒下的棕櫚樹幹時,必須以一段連續而無法循環的動作呈現。在這種情況下,跳上棕櫚樹在遊戲裡必須是一個動作(因此會有一段動畫)。然而,某些看似沒有重複的動作,實際上可以拆解成許多更細的動作。舉例來說,想像一下湯米必須跳過壕溝的場面。這段動作起於跳躍,湯米彎曲他的膝蓋,由壕溝的邊緣起跳。接著湯米飛到空中 - 這可以透過一小段循環動畫來達成,呈現人物在空中的姿態(依據壕溝的寬度而有所不同)。當他落到壕溝另一側的地面上時,他會執行著陸的動畫。所以,在遊戲中,跳過壕溝的簡單動作,實際上可能是由三段不同的動作(三段動畫)所組成。 將人物動作拆解成許多諸如此類的細微動作有許多的好處。首先,可以節省動畫師製作動畫的時間,因為無論人物要走多遠,他們只需製作一個走路循環。其次,這種方式也可以節省存放構成每段動畫的所有姿勢的記憶體空間。這種方式的第三個好處是可讓我們中斷人物的動作。如果一名士兵正在奔跑,打算躲到一棵大樹後面,但卻在抵達該處之前被射殺,我們可以停止播放他奔跑的循環動畫,並輕鬆地接合一段士兵倒地的動畫。 再幫我擺姿勢,山姆 替人物產生姿勢的方法之一,是要求動畫師(親切地!)使用Maya創造一段動畫。然而,《榮譽勳章:太平洋戰役》的引擎給予我們其他選擇。 《榮譽勳章:太平洋戰役》裡的動畫可以混合在一起。理論上,透過插入兩段以上的「關鍵」動畫,可以讓我們製作出無窮的獨特姿勢。這個概念十分簡單。假設,在一段動畫中(動畫A),我們的人物的肘關節彎曲成90度。在另一段動畫中(動畫B),人物的肘關節完全沒有彎曲(也就是說,呈0度)。我們能以各種方式混合這兩段動畫,使我們人物的肘關節彎曲成0度到90度之間的任何角度。0度角代表使用了0%的動畫A和100%的動畫B。依此類推,90度角代表使用了100%的動畫A和0%的動畫B。如果我們使用50%的動畫A和50%的動畫B,將可以使肘關節彎曲45度角。這帶來無窮的可能性! 在《榮譽勳章:太平洋戰役》裡,混合動畫有兩種不同的用途。有時候,我們利用混合動畫產生大量難以直接調整出來的動作。舉例來說,如果一名人物必須上下瞄準他的武器,我們可以直接產生兩段動畫 - 其中一段動畫裡的武器完全指向上方,而另一段動畫裡的武器則完全指向下方。然後,我們混合這兩段動畫,產生介於其間的任何可能角度。 混合動畫的第二種用途,是創造不同動作間的流暢轉折。如果人物正在奔跑,然後被偏離的子彈擊中,他必須倒在地上。但是,倒下的動作應該什麼時候開始?左腳向前跨出時?右腳向前跨出時?或是介於之間?如果我們等到適當的腳踏在地上時才開始讓人物摔倒,會讓人覺得人物的反應有人為的延遲。所以,我們在人物中彈的那一瞬間凍結人物的奔跑姿勢,然後接著混入倒地的動畫。 我們也會使用稱為反轉?#092;動學(IK)的數學工具,調整手動調出來的姿勢。IK是一種找尋姿勢的程序(一連串的接合點旋轉),讓你的人物的四肢移動到你所期望的位置。在機械人界,IK被廣泛使用,讓機械人能夠靠近並拾起環境中的物體。舉例來說,在《榮譽勳章:太平洋戰役》中,我們使用IK讓人物抓住移動中的砲塔把手。 最後,我們透過Havok物理模擬系統為我們產生姿勢。這種技巧最常用來產生「布玩偶」死亡動畫,所以,垂死的人物能夠跛行,並以寫實的方式與周遭環境互動。 資訊超載 我相信,你已經開始了解替電玩遊戲創造動態人物是多麼具有挑戰性的事情。我們必須找出每個人物能做出的所有基本動作,將其拆解成能以無限方式組合的循環或細微動作,然後創造出可用來組合所有動作的所有姿勢。但是,這樣還不夠。光是管理大量的動畫資料,就是一場惡夢。 幸?#092;的,有一些方式可以幫助我們管理如此複雜的事情。首先,我們發現,大部分的動作都可以套用在遊戲裡的任何人物上。無論該人物是湯米.康林、法蘭克.米諾蘇(Frank Minoso)、吉米.蘇利文(Jimmy Sullivan)或是任何其他盟軍士兵,他們都會以十分雷同的方式奔跑、射擊和裝填彈藥。透過將大部分的動畫分享給遊戲裡的所有人物使用,可以大幅減少需要的動畫數量。在《榮譽勳章:太平洋戰役》中,絕大部分的動畫,都可以用在任何人物身上,然而我們仍替軸心國士兵製作了特別的動畫,因為日軍以特殊的方式攜帶武器,而且舉止也和盟軍士兵大不相同。 《榮譽勳章:太平洋戰役》開發小組管理龐大且複雜的動畫資產的另一種方式,是將我們稱為「調整參數」的東西,套用到一組基本動作上。這裡有個特例,在《榮譽勳章:太平洋戰役》裡的人物有三種姿態:站立、蹲下和俯臥。在這三種姿態下,人物都能夠順利的執行大部分的動作 - 也就是說,無論站立、蹲下或是俯臥在地上,人物都可以發射他的武器。在這種情況下,「發射」是基本動作,而三種姿態只不過是「發射」動作的「調整參數」。每個「調整參數」暗示著各種動作會需要有n個版本。舉例來說,「調整參數」使動畫數需乘以3:站立一種、蹲下一種、倒臥一種。 在《榮譽勳章:太平洋戰役》裡,我們使用「調整參數」來描述人物的姿態、人物的情緒、人物持有的武器、人物所屬的「隊伍」(軸心國或同盟國),以及該動作執行的方向(瞄準是一種多方向動作)。這是個非常有用的工具,能協助我們管理數不清的動畫資產。然而,仍舊無法減少動畫師產生各種基本動作的各種版本的工作量。試想 - 就算只有兩個「調整參數」,各有三種變化,你就必須替每個基本動作繪製9(= 3 × 3)種動畫。而我們有5個「調整參數」,各有至多8種變化。不用懷疑,全部的《榮譽勳章:太平洋戰役》動畫組,包含了超過1700種動畫(尚未計算特殊「效果」)! 最後一種我們用來管理複雜動畫的技巧,是使用複合動作。正如其名,這讓我們能夠使用較簡單的動作建立出複雜動作。舉例來說,我們可以創造一組隨機選擇的動作,在n個輸入動作中隨機選擇。我們可以建立一個連續動作,只需以預先排好的順序,播放輸入動作即可。而且,我們可以建立混合動作,以任何期望的百分比,將輸入動作混合在一起即可。 如何將人工智慧和動畫結合在一起 要在畫面上製作出栩栩如生的人物,動畫扮演著關鍵性的角色。但是,如果沒有智慧驅使著這些人物,你所得到的只不過是一群行屍走肉而已。控制遊戲人物的方式有兩種 - 透過玩家,或是透過人工智慧。基本上,無論是哪種方式,問題都一樣:我們必須從智慧代理人(玩家或人工智慧系統)那裡取得指令,然後讓人物去執行,如此一來,他們在畫面上的表現才會精確地對應那些指令。 這裡有個簡單的例子,如果玩家按下「W」鍵讓人物向前跑,遊戲引擎必須播放奔跑循環動畫(在第一人稱射擊遊戲中,你很少看到你的人物,只會看到他的手臂和武器。不過,基本上,這和人工智慧系統命令非玩家角色向前跑沒有什麼不同。)當「W」鍵放開時,奔跑循環動畫應該停止,並立刻播放閒置動畫。當滑鼠左鍵被按下時,應該立即播放人物發射武器的動畫。依此類推。 表面上,這似乎再簡單不過了 - 但是卻比看起來更為複雜。舉例來說,如果人物在替武器裝填彈藥的過程中受傷,我們該怎麼辦?如果對一名已被子彈擊中、正要倒在地上的人物射擊,又會發生什麼事情?他該有反應嗎?如果有的話,如何反應?而且,當一名人物在奔跑後停下,我們可能會想要播放介於之間的「即將停止」動畫。如果正處於即將停止的階段,而玩家或人工智慧卻決定讓人物再度奔跑,會發生什麼事? 人工智慧和動畫間的交互關係,實際上非常複雜。動作狀態機制是常用來管理這種交互關係的一種方式。這個概念相當簡單(然而,要使它正確?#092;作卻相當困難)。你繪製一張圖,呈現你的人物可能處於的各種狀態:奔跑、跳上障礙物、裝填彈藥、射擊等等。接著,你在不同狀態間繪製箭頭,指示在哪些條件下,人物可以從一種狀態轉變至另一種狀態。舉例來說,在裝填彈藥時,人物可能會完成動作並返回他的閒置狀態,或者,他可能會在裝填彈藥過程中被子彈擊中,而表現出疼痛的樣子。幸?#092;的是,你通常無法從各種狀態轉變至其他的各種狀態。舉例來說,幾乎不可能從裝填彈藥的狀態轉變為跳躍狀態。儘管如此,管理動作狀態絕對是件非常棘手的差事。 這是個嚴苛的考驗。隨著人工智慧程式碼和狀態機制反覆的修正與增加,一連串的動畫將隨之改變與發展成形。因此,人工智慧程式師和動畫師必須不斷溝通。因為其跨領域的特色,人物動畫是今日遊戲開發工作裡,最有趣但也最具挑戰性的一環。 勇往直前 我希望你會喜歡這篇探討驅動遊戲人物動畫的背後技術的文章。如你所見,仍舊有許多的挑戰等待我們去探索。在接下的文章中,我們將討論動畫是如何製作的,了解製作《榮譽勳章:太平洋戰役》的動畫時遭遇到什麼樣的挑戰,以及了解如何管理整個過程。下次見了…! - 傑森(Jason) 引用 Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.