深入一探遊戲中觸手技術、濃霧等效果的創作過程
除了引人入勝的遊戲玩法,Housemarque還以超強的粒子特效聞名。諸如《Resogun》、《Alienation》、《Matterfall》和《Nex Machina》等作品,全都使用專利視覺特效技術來呈現華麗繽紛的爆炸畫面,以獎勵摧毀敵人或完成關卡的玩家。在《Returnal》裡,Housemarque改為採用第三人稱視角,但藝術詮釋也比以往更偏寫實和暗黑風格。在本文中,首席視覺特效美術師Risto Jankkila和資深圖形程式設計師Sharman Jagadeesan將詳細介紹他們如何運用視覺特效技術,生動地呈現阿特羅波斯異星球和其棲居的生物。
下方有完整的影片剖析,內容涵蓋《Returnal》的一些視覺特效功能表現。此外,我們還會在本文對其中一些功能有更詳細的介紹。
我們的視覺特效技術發展史
自《Resogun》(2013 PS4發表作品)以來, 我們就一直致力於開發本家專利視覺特效技術,而我們當前粒子系統的第一個原型就用於其中的一些表現特效上。繼《Resogun》之後,粒子系統有了圖形使用者介面,於是我們開始稱之為「次世代粒子系統 (NGP)」。2014年時,我們決定以NGP來為《Alienation》製造所有粒子特效。在《Alienation》發布後,系統又用於《Nex Machina》並繼而移植到Unreal Engine以用於《Matterfall》。
我們將NGP設計成為專用圖形處理器 (GPU) 的VFX製作系統,最大程度減少對中央處理器 (CPU) 的依賴,將重點放在優質性能表現與靈活性上。粒子製作是由視覺特效美術師來完成,由他們編寫定義粒子行為和資料的計算著色器片段。NGP負責記憶體分配和大部分的模組化程式碼 (boilerplate code),讓美術師能專注於行為和視覺呈現。
目前的NGP並非只為處理粒子特效,也可以用來控制大量體素行為或生成動態程序幾何。我們還有幾個模組是用來生成作為特效輸入的資料。
舉例來說,我們有自己的流體模擬模組可以將模擬資料饋送給NGP。另一個例子是名為體素建模 (voxeliser) 的模組, 它可以將動畫網格轉換成體素,然後那些資料就可以用來製作以3D立體顯示的角色特效。其他像是紋理、骨骼矩陣和頂點緩衝等也可用於粒子特效輸入。
敵人觸手和子彈軌跡背後的視覺特效魔法:節點粒子
從《Returnal》開發之初,我們想在阿特羅波斯打造出一群特殊敵對生物的構思便已十分明確。遊戲總監Harry Krueger希望能將牠們設計成具有生物冷光及觸手等特性的類深海生物。
我們負責打造敵方的團隊動畫師簡短地試驗以傳統剛體物理技術來製作觸手,模擬附著於敵人骨架上的一連串骨頭。這種作法似乎過於受限,不僅是因為執行多個長串的性能成本過高, 並且我們缺乏只藉助物理模擬來表現敵人狀態的方法。於是這才將視覺特效分配到打造動態觸手的任務中,將其附著在敵人網格和骨架上。
幸運地是,我們已想好了對策。團隊在一些較早的專案中已經對粒子植被進行了許多試驗,並且開發出一種用於像樹木這類枝葉植被的特殊粒子類型。我們稱這類粒子為「節點粒子」以反映它的屬性和行為。
這種粒子能讓我們創造單向子母關聯性。一個粒子可以有多個子項,但只能有一個母項。在讀取母粒子時,母項資料並不是目前影格正在寫入的資料,而是前一個影格。這使得完全「緊貼」母項成了不可能的任務,也因此造成了令粒子運動顯得「渾然天成」的副作用。這副作用被廣泛地用在《Returnal》的粒子特效當中,對於像觸手這類的物體特別適用。
在我們開始製作觸手的行為之前,需要先決定渲染的方式。我們先嘗試渲染扁平的多邊形長條。品質尚可,但像陰影等方面還是不太到位。一段時間後,我們決定將觸手渲染為圓柱形網格,由NGP在執行時建構而成。
確定採用管狀渲染後,我們就能夠開始專注於觸手的行為。能夠控制粒子行為,讓我們不再受到純粹物理模擬的限制,而可以根據敵人狀態彈性地變化觸手動作。這相當便於我們進行一些試驗,比如在敵人準備攻擊時迫使觸手以特定的方式來移動。我們跟負責敵方的團隊和設計師一起反覆調整時間計算,以確保觸手行為有助於呈現敵方狀態,以及動畫和其他視覺特效。
節點粒子對於我們遊戲內數不清的帶狀物和軌跡也十分有用。我們想讓一些追蹤彈在子彈身後留下長長的軌跡在畫面上停留。另外,敵人近戰攻擊軌跡也會用到節點粒子。從下方影片可看到節點粒子跟著母粒子產生一道條狀軌跡,再接著出現菲萊柯發動的自動導向飛彈攻擊。
流體模擬
Housemarque 對於視覺特效的一大原則,是在執行階段完成越多模擬工作越好,盡量少用預先處理好的資料。由於我們已經在前作《Alienation》和《Matterfall》等使用過流體模擬,因此從一開始我們就很清楚不該滿足於讓《Returnal》使用預先處理的速度場。
相反地,我們在玩家周圍採用即時流體模擬,來模擬會影響粒子運動、植被和其他視覺特效的氣流。除了我們所稱的「通用流體模擬」之外,還可以將其他模擬附加到遊戲內不同的作用物上。
任何遊戲事件都可以編寫對流體模擬加入外力,以引起附近的視覺特效元素做出反應。舉例來說,可將這些外力加入敵方動畫,如此當有敵人發動跳躍攻擊時,我們可以在該時刻、該位置為流體模擬添加徑向脈衝。這會令附近的粒子(如樹葉或火花)從衝擊點向外飛散。下方影片可看到受敵方動畫和玩家動作觸發的流體脈衝如何影響粒子植被。
儘管對於像植被這類表現,只用流體速度就已足夠,然而在看得到離散粒子的情況下,通用流體模擬速度場就顯得缺乏細節。為了改善這一點,我們選擇對流體模擬實行選擇性渦度計算,而在粒子更新中為粒子速度添加雜訊場,與粒子位置的流體速度量值成正比。在遊戲內,此技術用於外來存檔 (Xeno-archive) 全像影像和玩家瞬間移動特效,如下方影片所示。
體素建模和體積特效
我們想在《Returnal》的開場生物群系「蔓生廢墟」裡設置的其中一個環境元素,是濃濃、體積豐厚、像墓地裡瀰漫的那種霧氣。基於各關卡有不同的高度,霧氣的自動配置出現了問題,於是我們決定改以手動的方式來配置霧團。由於環境團隊需要配置的體積數量龐大, 過程必須盡可能直截簡明。
粒子系統的靈活性使我們得以在NGP中建構這些體積。由於粒子資料和行為能夠完全自訂,我們可以為多個粒子儲存一個3D索引,讓它們代表一個體積。體積界可以作為常數資料從CPU傳到NGP。除了3D索引,我們還可以儲存每個體素的任何其他資料,這讓我們能為體積內的每個體素儲存不同的狀態。而除了能夠儲存體素狀態,我們還可以根據它們在遊戲世界或體積內部的位置來改變它們的更新邏輯。
讓體素能辨認自己的狀態和位置,就能設定它們在接近像地面或牆壁這類表面時自動提高噴發密度,但在體積的邊緣附近自然淡出。由於霧氣會自動因應周遭情況而調整,大大加速了配置霧團的過程。我們還可以在體素位置對全球流體模擬進行採樣,並設定透過風、子彈和玩家動作來移動霧氣。在下方影片中,可以看到配置於關卡中的一個NGP霧團。霧氣密度只在接近表面時自動調整產生,且由遊戲內的流體模擬推動平移。
整合一切創造出「菲萊柯」頭目戰
針對菲萊柯頭目對戰,我們想讓濃霧從菲萊柯的骨架網格噴發出來。由於濃霧跟骨架網格是由不同種類的元素建構而成,這就產生了問題。骨架網格是一組頂點——3D空間中的動畫點,經過排列形成可以渲染的三角形。頂點可以任意放置來形成從樹木到人形等各種不同的形狀。而另一方面,濃霧則是使用稱為體積的方格,這些體積又是由稱為體素的較小元素構成。與骨架網格相比,霧團在Unreal Engine裡總是塑造成像方格的形狀,構成它們的體素也是如此。
如果我們想用菲萊柯的頂點來噴發濃霧,就得找出骨架網格的每個頂點是在霧團的哪個體素內。這解決起來雖然瑣碎,倒還不難,問題比較大的是每個體素只能處理一個頂點。在同一個體素上有兩個頂點會導致未定義的行為,而可能因此致使遊戲當機。更糟的是,在單一體素中有多個頂點的可能性遠大於只有一個頂點。
於是,即時體素建模成了這個問題的解決之道。體素建模取骨架網格來輸入,再輸出成為體積,將骨架網格內的每個體素標示為已佔用。如此就簡化了噴發霧氣的過程,因為我們只需要檢查體素建模輸出,看看給定的體素是否標示為已佔用。在下方的影片中可以看到,以菲萊柯的網格作為輸入所得到的體素建模輸出結果。
能夠做到讓霧氣從菲萊柯的網格噴發,就可以讓角色跟環境在她移動時融合得更好。這也讓菲萊柯的特殊動作(如瞬間移動和生成)更容易執行,因為我們可以利用霧氣來隱藏這些過渡轉化。從下方影片,可以看到菲萊柯的濃霧和其他特效生成片段,以及沒有特效的比較。
以上就是我們所帶來的《Returnal》視覺特效深入剖析,希望大家會喜歡,期待未來還有機會分享更多我們的技術手法。
※遊戲內容推出日期可能根據不同地區/國家而有所調整。
※以上內容如有任何修改,恕不另行通知。
留言功能已關閉