深入探索風、天氣和互動粒子等元素如何造就仁生動逼真的冒險旅程
對馬島由我們團隊精心打造,細節豐富小,是個值得悉心探索的美地。本作跟我們上一款充滿了超能力的視覺特效遊戲《inFAMOUS: Second Son》截然不同。我是Sucker Punch的首席視覺效果美術師Matt Vainio,我喜歡將自己的工作形容為用科技來解決美術與設計上的問題,這是我自《inFAMOUS 2》開始就一直在Sucker Punch從事的工作。今天我所分享的內容將包含團隊如何從炫麗的超能力過度轉換成以鮮血、泥濘和刀劍交織而成既樸實卻唯美的遊戲,以及我們用來創造《Ghost of Tsushima》視覺效果的方法。
在著手製作《Ghost》時,我就先根據企劃需求,找出幾個需要改善的主要領域。首先。我想提高粒子系統的互動性。我們從《Second Son》起就大手筆投資由表現驅動的粒子系統,創造出大量神奇的超能力。針對《Ghost of Tsushima》,我的主要目標之一是沿用該系統,而將之導向高度互動性。我們從一開始就知道,「風」是我們必須融入整個粒子系統的重要元素。我們還想加入動物生命、利用環境氛圍來營造史詩級美景,並透過角色在環境中穿梭戰鬥時沾附污泥與染血等動態變化,真真實實地確立「鮮血、泥濘與刀劍」的發展方向。我們有多種方式讓粒子更具互動性,但這都需要從遊戲世界獲取更多資料。而我所說的這類資料包括但不限於:整體風、玩家從行動中產生的風、角色位移、地形和水位資訊、溼度等天氣資訊、當日時間等等。
第二個主要目標是進行大規模建構。《Ghost of Tsushima》的世界遠比《Second Son》大得多,而在Sucker Punch的「視覺效果」團隊卻只有兩個人負責絕大多數的開發工作。因此我們必須盡可能透過自動化處理來更新內容,並且支援動態天氣下隨時間變換的大景。 最後,再以手動方式置入少量元素,協助引導玩家探索對馬島。
風
從最初就有的關鍵藝術指導目標是一切都要動起來。這是粒子明顯能派上用場的領域,像是在空中加入飄浮的落葉和花粉,但其實還有許多系統共同運作,來營造出風吹的錯覺。而除了粒子之外,還有樹木、長草、衣服和繩索,也都會隨風飄動。這一切的元素都要協調一致,好讓整體配合不同的風況,呈現適當的擺動。我們將這整體風向納入本作幾乎每一個效果內;當炸彈爆炸或營火點燃時,冒出的煙霧會隨正確的風向飄散。這也適用於火焰、火花等幾乎所有元素。我們還對風速進行取樣,以隨著風速的提升增加氣流。
我們原本並沒有打算讓整體風向系統成為導航模式,是《Ghost》的藝術總監Jason Connell來問我和另一位首席工程師Adrian Bentley,是否能讓粒子作為任務指引,我們才決定這麼做。於是「引路風」就此誕生。我們的作法並不是嘗試建立不斷變化方向以避開障礙的引路系統,而是直接對準目標,把尋路的工作交給玩家。主要是因為我們希望玩家能在找路過程中進行探索和思考,而非不假思索地遵循遊戲使用介面來行進。這個指引路徑作法所以能實現,全拜粒子系統能取得地形資訊之賜,使我們得以讓粒子感知玩家周圍的景觀。
我最初嘗試讓粒子緊貼著地形,隨著山丘低谷上下起舞。基於幾個原因,這會造成一些問題。首先,我們的山巒有許多岩石模型來模擬懸崖面,而這些懸崖模型並非地形資訊的一部分,其下的動態鑲嵌網格才是。這表示粒子會嵌入岩石表面並消失,使引路風難以辨識跟隨。而粒子如此完美地緊貼地形,也顯得有點不自然,因此我的下一個嘗試是將地形設為地面,好讓粒子在上坡時會被推上揚,而在地形下坡時平飄散去。我透過預先沿著粒子運動的路徑執行數次測試,來增加遇到山丘時的上坡速率。在每次這樣的測試中,粒子會觀察它在該點上跟地形靠得多近,是否甚至可能被掩埋。假如粒子在這些前瞻點上過於靠近或會被掩埋,就會被賦予上坡速率。最後,引路風會視環境改變而有不同的元素:在田野裡有蒲葦絨毛和長草,在森林裡有葉子,在焚燒區有灰燼等等。我會在本文稍後再多談談該系統的運作方式。
以樹葉來看,植物全都由佈滿節點的骨架構成,會隨當場的風速而反應。我們跟程式編碼與環境團隊合作,針對樹幹與樹枝創建各自獨立的控制項,讓我們有更大彈性來打造對馬島上所需的多樣化樹木和灌木。除了較大的樹幹和樹枝擺動,我們還疊加了會在葉子表面形成細微波動的雜訊。
長草和蒲葦田是本作一個特別具有代表性的元素,需要渲染、環境與視覺效果團隊之間的大量互通協作。田野是由草的程序生成三角形和蒲葦稈與簇毛的模擬素材混合構成。起初,我們嘗試利用粒子,透過在重疊弧線上移動長草,來呈現波浪似的律動。這在草上的視覺效果固然很好,在樹木或灌木上卻看起來不對勁,再者,效益成本有些超出我們的負荷。在第二回的嘗試中,我們添加了兩層程序性強風到環境裡。第一層是會隨著風向捲動的大型雜訊圖案;最上層則是隨地形捲動的紋理,可以在草上做出更細部的表現。這種做法的優勢(除了改善成本控制以外)是我們能夠將較粗糙的強風雜訊也運用到樹木和灌木上,讓長草和其他樹葉更完美相稱。
後來我們確實有用到粒子長草位移技術,不過是用於在玩家和馬匹走過時推動長草。這項技術以前就在其他遊戲中使用過,而我們在本作的主要改良之一是透過粒子系統的運用來控制位移,這樣就能利用各種表現,充分發揮更進階的行為。其中一個行為就是藉由在位移強度上套用阻尼波,讓長草以擬真方式反彈,而不是以線性且不自然的形態彈回其靜止位置。下方影片就是長草位移的實例,還有控制它的粒子系統除錯檢視 (Debug View)。路徑的綠色部分代表位移,而紅色部分則是位移淡化的發生位置。仔細瞧瞧,你可以看到長草消失後隨著路徑離主角越來越遠,位移值的恢復也越來越小。這會創造出自然的迴盪波動,讓長草感覺更為寫實。
最後但同樣重要的是,角色技術美術團隊率先將動態衣服和繩索添加到遊戲裡,因為它們會經常用在角色身上。每個繩索和衣服模擬都使用與樹葉和粒子相同的環境風輸入資料,加強了彷彿真的有風橫掃整個場景的錯覺。
動物
我們很早就假定視覺效果團隊創造的任何動物都只用於遠觀,但隨著企劃逐漸發展,才發現牠們其實可以發揮更大的作用。我們就這項功能跟撰寫《Second Son》粒子系統的原渲染程式設計師Bill Rockenbeck展開合作。他的第一步是讓粒子生成全關節骨架的動畫網格物件。一旦這部分開始正常運作,使用跟我們用於引路風的相同地形位置資訊,便可將模型的方向與地形相配,並在必要時與其衝撞。
我們加入了青蛙、鳥/鶴、魚、蟹、蟲等動物,牠們都會對仁和本作其他角色產生反應。透過在角色周圍(包括仁)套用極低值風球,動物粒子效果就能察覺到何時有人靠近。我們使用新的條件事件系統,在條件成立時改變粒子運動,使動物會從人類身邊逃散。這也套用在拋射物和衝擊上,意謂著箭矢和刀劍也會嚇走動物。
從下方影片可以看到初期散佈在海灘上的反復互動式螃蟹效果。我們先從一些靜態網格(這可能是我最精細的建模工作)著手,再重複其行為。我希望螃蟹能跟仁保持一點最基本的距離,以避免仁直接踩在牠們身上,同時讓牠們呈現適當的驚嚇敏感度。為了方便我為行為除錯,影片中的螃蟹在移動時呈白色,靜止時呈橘色。
葉子和對決
由於《Ghost of Tsushima》的標誌之一就是風,想當然我們會要加入大量的樹葉,來讓它們感覺既優雅又自然寫實。這是何以在《Ghost》的螢幕上隨時都會有成千上萬片葉子,隨著風、環境和角色翩然起舞互動。
為了讓樹葉感覺真實得恰到好處,我們費了許多心力在讓它們能視地形正確地落下。每片葉子都以盤狀建模而成,並利用3D數學來使它在接觸地面時,因應承受的力矩而產生適當的旋轉。除了單純地降落在地形上,我們還建模了一些其他的進階行為:《Ghost》裡的葉子會落在水面上並隨著水流漂流,也會從瀑布傾潟,在漂流的途中隨著時間而逐漸沈沒。
在《Ghost》的開發工作接近尾聲時,有位QA測試員告訴我他發現了一個奇怪的錯誤:掉進營火的葉子不會燃燒,而是落在火下的地面或火旁,靜止而完好。我同意這樣很怪,所以決定在營火裡放置一個風發射器來解決這個問題,好讓落下的葉子有所反應。這個向上的氣流會讓大多樹葉不落入火中,是很好的細節。
「對決」從首次測試後就成為《Ghost》深受喜愛的元素,而且從一開始,視覺效果團隊就獲得遊戲總監授權,協助創造最能展現我們遊戲內互動性和粒子系統的場景。
在許多場對決當中,我們創造出會持續對玩家和AI動作產生反應的樹葉。就這部分,我們重新利用已建構好的長草位移技術,讓粒子能夠取樣該資訊。藉由這麼做,我們就能夠讓葉子在角色疾行過時帥氣地散開。對決的目標並非完美的寫實,而是呈現移動的美感。我們採用與前述相同的活動系統來找出玩家位移值高出閥值的時間,然後建立一個下降率,讓葉子在一小段時間後從起初的運動穩定下來,然後再次被推開。我們還運用了雜訊圖案暫時讓樹葉被吹過的風從地面揚起,以此來模擬強風和葉子不穩定的特質。
還有其他類型的對決也大量使用了別的動態粒子系統,如浮動的燈籠、會熄滅的蠟燭、會在你腳下散開的濃霧、閃電等等。我們在燈籠上使用類似用於葉子的技術,每盞燈籠實際上都是一組會根據玩家位移而在水上移動和晃動的粒子。在第二場「龍三」對決中,針對動態蠟燭,我們將風發射器加到揮劍動作上,並在蠟燭上取樣。假如風力超過閥值,我們會使用事件系統來熄滅燭火與燭光,同時產生新的一縷青煙和天花板煙霧效果。此外,玩家在滾動和閃避時也會產生風,因此與這些特別的對決蠟燭擦身而過時,也會把它們熄滅。
鮮血與泥濘
當角色奔馳、滾動、滑行和跌落地面,都會不斷地把泥巴附著到他們的網格上。我們從藝術指導得到的早期目標,是要讓角色像在真實世界一樣會弄髒,以此作為遊戲的基調。在動畫過程中,我們加入不等量的泥巴「來源」到像是膝蓋、手肘和肩膀上,讓仁和其他人在決鬥中看起來髒得恰到好處。假如你觀察日本武士電影的著名決鬥場面,就會看到《Ghost》這裡的靈感來源:角色踏入泥淖,並因跟地面的互動而濺得滿身泥濘。
與泥淖如出一轍,我們所建立的鮮血來源也會在戰鬥中不斷地加到角色網格上,顯示他們的受傷狀態。每一次的衝擊都會在靠近劍擊部位和周圍加上血跡,這除了用在系統性戰鬥中,也會用於過場動畫和劇情情節。
除了將血加到角色模型上,每次的攻擊都會產生大量血滴與鮮血四濺的粒子效果。每滴血都會落在附近的幾何體上,而在水中,它甚至會擴散成雲煙狀隨著水流散去。
大規模建構
要做到大規模建構的關鍵環節,是讓我們的視覺效果與環境相配一致,而不需要手動放置。以小團隊之力,要去填滿龐大的世界,我們很清楚必須建立某種程序性配置,因為環境生物群落的變化非常頻繁。我們並不想窮盡所有時間僅僅在維護內容上,它必須能夠自行修正才行。
成長與生物群落
這有一個簡單的實例:我們希望粒子樹葉只落在林區,而不落在草原上。第一個嘗試的作法非常猛:我們配置了一種效果在程序性生長於島上的樹木。此舉很快就失敗了,因為小空間裡的環境同時存在著數百棵樹,這對幾何結構來說固然不錯,但是對粒子系統卻代價高昂。透過將粒子設定成只在非常靠近樹木時(約50呎)才出現,讓我們取得了一點小小的成果,但是在視距拉遠時,這又感覺像是個敗點。採用這個作法的另一個問題是,當我們在玩家騎馬呼嘯而過時,從40呎高的樹冠上投落一片葉子,它甚至還來不及在玩家穿越過樹木之前落入他們的視線,因此經常看不到葉子。
我們的第二個作法是採用如環境所使用的相同成長系統,透過套用相同的遮罩和算式,程序性地將粒子系統和樹木配置於相同空間裡。這個作法需要我們將交疊的葉子圓形置於時或複雜的遮罩形狀內。這些圓形會從遮罩規則的邊界在其半徑距離內受到推擠,這代表因為成長規則和算式而沒有葉子的地方,就常會出現大空隙。我們可以透過建立更多更小的發射器來平衡這一點,卻會犧牲性能表現。再者,要修正特定區域也有其困難度,因為假如我們為了要修正關注區域的密度或漏洞而改變成長規則,就常會破壞了其他原本運作良好的森林群落。話雖如此,該技術大致上行得通,即使還有一些瑕疵,也大抵成功了。
圖1的螢幕擷圖展示的是使用我們的成長工具,根據決定樹木位置的規則來添加粒子。由於可見空隙較多,最終沒有繼續保留的價值。圖2,我增加了大幅成長的粒子發射器數量。這幾乎可行,卻佔用了我們可用於其他地方的寶貴性能。圖3顯示的是我們的第三種作法:生物群落圖。我們的其中一名渲染程式設計師著手為燈光團隊開發一項功能,其使用資料將來自環境成長遮罩,並可即時取得。我詢問是否能夠借助這項技術,且幸運地獲得了肯定的答覆。這讓我們的粒子系統得以知道任何特定粒子被建立在什麼生物群落之中。圖4是一個除錯粒子系統,顯示出粒子讀取該資料的方式。藍色區域是草原,而綠色區域則是森林。
初步推移略顯塊狀不自然,但當我使用雜訊圖案來修改取樣的資訊後,外形就變得更有機自然而實用。這跟其他諸如取樣地形位置、素材和風向等功能結合時,就成了我們新環境氛圍系統的核心。在任何一般的定位中,我們都能夠從環境移除數百個已成長的粒子系統,並以會追蹤鏡頭且對環境生物群落更為精確的單一系統取而代之。
儘管我們已將大量效果從成長系統轉移到即時生物群落系統,我們仍然在《Ghost》裡針對某些粒子效果使用了成長系統。一些實例包括棲息於林邊的飛鳥、海灘區的螃蟹和海鷗、水稻田區的鷺鷥以及沼澤的鶴。最後,我們還利用成長系統來添加森林邊的濃霧。在所有這些例子裡,每當環境團隊改變了森林、田野和海灘的位置,視覺效果就會自動跟進。
美景和導航提示
在《Ghost》裡,美景之於協助玩家找到目標的遊戲玩法,和發揮設定基調與藝術指導的作用,具有同等的重要性。我們覺得應該盡可能地讓尋找任務成為一件自然發生的事,因此我們創造了各種可用來暗示任務位置和挑戰內容的效果。一些實例包括執行任務或挑戰內容時遇到的各種煙霧、提示俳句機會的鳥、從溫泉田冉冉上升的蒸汽等等。
合而為一
《Ghost of Tsushima》的視覺效果是環境不可或缺的一部分,每個取景都包含了許多獨立的系統共同合作,才由此強化了遊戲的動態外觀。從前景的生物群落和動物元素,到背景的天氣和內容標記,都因有視覺效果的支援才得以將生命氣息注入遊戲世界裡,使得探索對馬成為一種享受。
感謝大家撥冗閱讀,希望在對馬的視覺效果加持下,讓各位的冒險之旅充滿樂趣。如果還好奇想知道更多關於我們的深層技術,歡迎觀看我在2014年遊戲開發人員大會上的分享,其重點就在我們由表現驅動的粒子系統。
留言功能已關閉