《守望先鋒》2.0版本幕後揭秘:新技術"環境狀態"

近日,《守望先鋒》官方公佈了一篇新博文:開發團隊最近爲《守望先鋒》2.0版本開發了一項全新的技術,我們想借此機會讓玩家社區能夠搶先一睹遊戲引擎得到的改良。

大家好!我是Marco Alamia,《守望先鋒》團隊的一名軟件工程師。我們最近爲《守望先鋒》2.0版本開發了一項全新的技術,我們想借此機會讓玩家社區能夠搶先一睹遊戲引擎得到的改良。爲了實現這個目標,我徵求了另外兩位《守望先鋒》開發者Bruce Wilkie和Fabien Christin的幫助。

我們爲引擎添加的新技術叫做“環境狀態”,它很快就成爲了地圖製作設計的熱門之選。這個功能是在《守望先鋒》2.0版本的引擎與工具中開發和完善的,而其核心理念則來自我們天賦異稟的光照美術師Fabien。有請Fabien向我們解釋這個顛覆了地圖創作過程的想法的誕生歷程,並帶我們瞭解他的設計過程。

我們來探索環境狀態吧!

提出想法

Fabien:《守望先鋒》設定在一個光明而繽紛的世界裡,這種格調往往會通過地圖得到展現。在地圖的創作之初,關卡設計師會用大型的灰色方塊勾勒出整體架構,讓有趣而平衡的玩法成爲可能。在這個階段裡,最重要的就是設計出有趣的地圖!經過許多小時的測試之後,環境美術師會將臨時佔位的灰色方塊轉換成精雕細琢的建築和環境素材,玩家暢遊的地區也就有了生機。

除了環境之外,爲了支持地圖所講述的故事,我們還需要製作光照。在《守望先鋒》2.0版本中,我們想打造出新穎而有趣的氛圍,徹底改變地點的觀感想象一下,你來到了努巴尼,見證了在非洲的夕陽下熠熠生輝的未來之城;你降落在陰雨霏霏的巴黎,所有的商店都閃爍着金輝,邀你在雨停之前進屋小坐、大嚼可頌。

這就是環境狀態的設計目的。有了這個全新的系統,我們就能將光照、音效和特效等主要元素分解成獨立的素材,然後像搭積木一樣把它們組合到一起,製作出所謂的“環境情景”。我們可以讓整個地圖共用同一個情景,也可以在每個地圖中設置多種情景。

我們以快節奏的死鬥地圖墓園爲例。你也許體驗過這裡的夜間場景,夜晚爲環境投下了陰冷的藍色色調,而建築周圍點燃的火炬則是明亮的橙色,兩者形成了鮮明的對比。

假設我們想嘗試不同的情景,比如說阿努比斯神殿的沙漠暖色調。有了新的環境狀態系統之後,我們只需要獲取阿努比斯神殿的環境狀態,然後應用到墓園裡就行了。

現在的效果已經很棒了!然而,我們還可以更進一步,調整太陽方向,投下更多有趣的陰影。爲此,我們新建了一個環境狀態,它只會覆蓋太陽的方向。我們把這個新的“方塊”放在阿努比斯神殿的方塊上面。

好了!

得益於環境狀態的靈活性與便利性,我們只需要區區幾個小時,就能製作出地圖的光照原型。快速迭代能力讓我們能夠進行更多嘗試、發揮更多創意,並能爲地圖增添多樣性。

但還不止於此。此前的例子主要是裝飾性的,但環境狀態還能夠動態混合,開發出激動人心的玩法機會。想象一下,你被派往墓園執行任務,去修復一處守望先鋒衛星鏈路。在抵禦歸零者的襲擊時,一場沙塵暴迅速地接近了當地,你們身邊頓時飛沙走石!我們可以在晴天情景上添加全新的沙塵暴環境狀態,逐漸增大雲層覆蓋和沙塵效果密度,爲任務增添更多的挑戰。

憑藉這一全新的技術,我們可以製作出各種天氣變化,例如雷暴、降雪和其他刺激的環境情景,這樣每場遊戲都會帶來獨一無二的體驗。

現在我們重新有請Marco,從技術的角度帶我們領略環境狀態的原理。

實現環境狀態

Marco:Fabien的願景非常遠大,所以我們必須設計出功能強大的系統,才能實現《守望先鋒》2.0版本的環境所需要的效果。經過幾輪頭腦風暴之後,我們決定讓多種環境狀態能夠同時展現出來,並且井井有條地排在一個堆棧裡。堆棧可以動態地變化,因此可以在任意時候添加或移除環境狀態。引擎隨後會處理堆棧,將所有環境狀態混合起來,製作出最終的環境效果,我們就能看它具備的魔力。如果你曾經用過Photoshop,應該明白這其實就是將幾個圖層混合在一起,產生一張最終圖像

其基本理念在於,每一個環境狀態都能定義環境的某些因素,例如風力風向或太陽的顏色。當狀態被推送到堆棧上時,只有它提供的因素會對結果產生影響。例如,這個堆棧取自里約盧西奧俱樂部,推送到堆棧的環境狀態會改變鏡頭的曝光和顏色等級:

底部的環境狀態會提供地圖的全部因素,頂部的環境狀態會覆蓋掉顏色等級,以產生《暗黑破壞神》中的那種兇險氛圍。在遊戲過程中,環境狀態可以在堆棧中動態地添加或移除,因此增添了多樣的變化,使地圖更栩栩如生、活躍動感。

因素

在美術團隊和Fabien的指導下,我們確定了多個環境狀態需要定義的關鍵因素。例如,後期處理是第一個被引擎轉換成因素的功能。後期處理是所有現代引擎的共同元素,它能夠添加多種篩選和效果,例如控制最終圖像的對比度、亮度和飽和度。如果能根據遊戲中發生的狀況動態地調整圖像對比度和亮度,就能爲最終圖像賦予無與倫比的真實度和動態感。得益於環境狀態技術,這一點在《守望先鋒》2.0版本中得以實現。

全新系統中的另一個強大的工具是迷霧因素。通過更改參數,我們可以驅動迷霧的外觀和質感,美術團隊就能讓環境的視覺效果根據遊戲模式、玩家位置甚至時間不斷演變。例如,我們可以讓萬聖節的地圖顯得更爲詭異,讓地圖特定位置附近的迷霧更爲濃厚,或者讓某一個英雄任務中的沙塵暴隨時間不斷積聚。

我們的許多因素都能與其他視覺屬性產生互動,例如雲層在地圖上投射的陰影,甚至還與風力和風向等不可見的屬性相關。我們可以更改的最重要的兩個因素是太陽和天空。顧名思義,這兩個因素能讓我們更改環境的部分關鍵特性,例如太陽的位置與顏色、使用的雲層,以及時間是否爲白天。你可以想象得到,這是環境狀態系統中非常實用的一部分,它使我們能夠大幅改變地圖的觀感。

這兩個因素(太陽和天空)利用到了引擎中最爲先進的領域之一:光照系統。光照對《守望先鋒》2.0版本至關重要,它能幫助我們確立環境的外觀、觀感和氛圍。 然而,對這個系統的改動可能會對內存與性能產生影響,因此我們必須在可行的範圍內謹小慎微。幸運的是,我們的團隊中有一位傑出的工程師Bruce Wilkie。他深諳光照系統的奧妙,幫助我們獲得了出色的效果,並且維持了《守望先鋒》這類競技射擊遊戲所需的優越性能。

光照

Bruce:我們爲《守望先鋒》鮮豔繽紛的視覺效果投入了許多精力和關注。每當我在精美的地圖中遨遊,我都會想起自己爲每一個光照環境的細節所付出的心血。陽光反射到房間裡,泛光照亮了廢墟,夜晚的街景在色彩中栩栩如生,這些例子都證明了光照在遊戲的觀感中所起到的重要作用。在爲《守望先鋒》開發引擎的時候,我們與美術團隊密切合作,以設計出必要的光照功能,將2D的概念美術轉換成3D場景中的特色,例如光線表面反射(通常被稱作“全局光照”)、金屬映射出周圍的場景,以及在靜態環境中無縫地移動物體光照。這些特色都需要大量的運算,在我們希望讓引擎達到的幀率下,CPU的負荷可能會高得不切實際。爲了讓《守望先鋒》能夠在高幀率下運行,同時保留高級光照特色,我們會盡量提前運算光照信息,將運算結果打包,然後在客戶端中使用該數據

我們來深入瞭解在《守望先鋒》啓用光照特色所使用的數據。對於不會移動的物體,例如牆壁、地板和天花板,我們構建了一些數據。第一種數據會告知引擎擊中表面的光線量,以及光線源自的方向。通常來說,這個數據會被稱作“光照貼圖”,不同的引擎會在光照貼圖中存儲不同“風格”的數據。

在這張圖片中,你會看到地圖表面所產生的光照貼圖示例。左側展示的是所有光線的最終合成效果。中間展示的是表面渲染的圖表。我們的美術師會利用這個視圖,確保表面存儲了足夠多的光照數據,以實現他們所追求的視覺效果。右側展示的是引擎如何打包光照貼圖,以減少它們佔用的內存。

在發佈《守望先鋒》的時候,我們會爲命中表面的所有光線生成顏色和方向。我們會利用方向數據來改變凹凸表面上的顏色——面對該方向的表面越多,就能產生更多顏色。在2.0版本中,我們會使用三個光照方向,這樣就能獨立更改每一個顏色通道(紅色、綠色和藍色)。額外的方向深化了環境光照的鮮活度,從而提升了圖像質量。

對於靜態物體,我們生成的數據會告知物體周圍可見的環境多寡。這個數據通常被稱爲“環境光遮罩”。在發佈《守望先鋒》之後,我們開始在多張地圖中生成這種數據,例如巴黎和哈瓦那地圖。在2.0版本中,所有地圖都會自動生成這一數據,使視覺效果進一步改善。

而對於角色等能夠移動的物體,我們會在世界場景中生成許多示例位置,然後爲它們逐一編寫光照數據——也就是我們爲靜態物體構建的同類數據。當移動物體靠近其中一個點位時,物體就會使用它的數據進行照明。在2.0版本中,我們會生成更多示例位置——尤其是在空中——這意味着移動物體的效果也會遠勝往日。

如果你觀看過暴雪線上嘉年華座談會,你會發現地圖已經擁有了多種不同的光照環境。對於每一個環境,我們想要共享盡可能多的數據,使下載與安裝的磁盤大小保持在合理的水平。環境狀態技術使引擎能夠將單個地圖的多種光照環境分組,使此前提到的大部分預運算數據能夠在分組光照環境中共享,這樣就能大幅縮減數據體積,玩家也無需爲每一種變化下載並安裝過多的數據了。更優質的光照、更多光照變種、更少的數據——全都得益於環境狀態功能。

在環境狀態的支持下,《守望先鋒》2.0版本會比以往更爲動態,同時優化了美術師的工作流程,讓他們有機會創作出深受大家喜愛的繽紛世界。敬請期待《守望先鋒》2.0版本帶來的沉浸式全球大冒險、變幻莫測的環境和震撼人心的視覺效果吧!