天天看點

Lumen為《堡壘之夜:大逃殺》第四章帶來實時全局光照

Lumen為《堡壘之夜:大逃殺》第四章帶來實時全局光照 - Unreal Engine

圖像部門工程研究員Daniel Wright和圖像部門技術總監Krzysztof Narkowicz |

 2023年1月27日

Lumen

光線追蹤

功能

堡壘之夜

遊戲

大家好,我們是開發Lumen的工程師Daniel Wright和Krzysztof Narkowicz。Lumen是虛幻引擎5中完全動态的全局光照和反射系統,開箱即用。在這篇部落格文章中,我們将帶你了解Lumen如何在《堡壘之夜:大逃殺》的第四章中發揮作用,我們還會着重介紹在釋出第四章時,團隊對Lumen所做的改進(虛幻引擎5.1中已包含這些改進,現在可供所有開發人員使用)。我們之前還寫過一篇介紹Lumen的技術博文,強烈推薦你閱讀,以便了解該系統的總體概況。

在Playstation 5、Xbox Series X和Xbox Series S平台釋出的《堡壘之夜:大逃殺》第四章已經預設啟用了Lumen。在PC和雲遊戲平台,隻要将“全局光照”的品質設為“高”或“史詩”,就能啟用Lumen,如果顯示卡支援,還可以選擇使用硬體光線追蹤獲得更高的品質。

《堡壘之夜:大逃殺》第四章中的Lumen

在第四章之前,由于技術限制,《堡壘之夜》在次世代主機上使用的是虛幻引擎4的動态光照技術。我們隻能使用距離場環境光遮蔽照亮環境,當藍色的天空光照洩漏到建築物中時,會導緻室内産生寒冷的感覺。在第四章中,Lumen高品質地計算了全局光照,重新帶來了溫暖的陽光反射和精細的間接陰影。

距離場環境光遮蔽與Lumen全局光照的對比。自動曝光已随Lumen全局光照一起啟用。

有了精确的全局光照,室内區域會明顯暗于室外,因為天空光照被正确地阻擋住了,此時需要啟用自動曝光。

在次世代主機上,之前版本的《堡壘之夜》由于技術限制,隻能通過螢幕空間反射(SSR)實作反射。這種效果隻能反射螢幕上顯示的内容,不足以防止天空光照洩漏到建築物中。SSR也隻能在鏡面上提供良好的效果,是以粗糙表面上會缺少反射。《堡壘之夜》的美術師們一直在努力繞過這些限制,他們采用的方法是盡可能避免在室内使用會産生鏡面反射的材質!Lumen反射可以在光亮表面上提供精确的光線追蹤反射,即使是在室内,也能夠正确渲染金屬和光滑材質。美術師現在可以實時看到材質對光照做出的完整反應。

螢幕空間反射與Lumen反射在冰面上的對比。

Lumen反射在水面上也得到了廣泛應用,它們比SSR更清晰,而且不局限于隻能反射螢幕中的可見内容。

Lumen為《堡壘之夜:大逃殺》第四章帶來實時全局光照

螢幕空間反射與Lumen反射在水面上的對比。

《堡壘之夜:大逃殺》有許多需要用到動态光照的遊戲事件,包括當日時間發生變化,玩家建造和破壞建築物,以及打開門,等等。Lumen是完全動态的,可以對這些變化做出實時反應。為了降低成本,Lumen确實會将計算過程分攤到多個幀中,但《堡壘之夜》的目标是實作高幀率,這在最大程度上減少了随時間積累的僞影。

通往第四章的旅程

随着虛幻引擎5.0版本中的工作圓滿結束,我們将關注點轉移到了《堡壘之夜:大逃殺》第四章以及它帶來的挑戰。《堡壘之夜》在主機上的最低目标幀率為60FPS,每幀隻占16.67毫秒,如果考慮到為動态分辨率留出的餘裕以及激烈戰鬥中的遊戲成本,每幀的時間甚至會更少。考慮到我們想要的各種渲染功能,動态全局光照和反射加起來隻能占用4毫秒。這個預算非常低,因為對3A級遊戲來說,僅僅在光線追蹤反射上花費4毫秒也是很常見的。我們要在不影響次世代光照品質的前提下,盡可能地做出各種優化。

我們首先必須決定要在《堡壘之夜:大逃殺》第四章中使用哪種光線追蹤方法。我們之前在主機平台釋出了《黑客帝國覺醒:虛幻引擎5體驗》,并在其中啟用了使用硬體光線追蹤的Lumen,我們做出了重大優化,但是那個技術示範隻有30FPS的預算。經過一些早期測試,我們确定了,Lumen的軟體光線追蹤需要達到60FPS的預算,因為它的追蹤成本較低。但是,軟體光線追蹤的近似性質帶來了一些挑戰,在植被品質和水面反射方面尤其明顯。

《堡壘之夜:大逃殺》第四章中出現了森林和被草地覆寫的連綿山丘。在我們之前釋出的Lumen項目中,沒有大規模的植被,是以我們還沒有機會處理這方面的工作。對植被的過度遮蔽是最嚴重的問題之一。

Lumen的軟體光線追蹤使用全局有向距離場表示場景表面。有向距離場僅能表示不透明表面,在其中穿行的光線隻會給出兩種結果:命中或未命中。這會導緻在被模組化成聚合體的植被網格體上,将出現嚴重的過度遮蔽。我們開發了一種與有向距離場相交的新方法:光線每前行一步,我們都要做出是否相交的選擇。這使它成了一種随機技術,也允許我們更加精确地對聚合幾何體進行模組化,同時保留在場景其他部分表現良好的有向距離場表示法。

利用半透明随機距離場相交解決植被上的過度遮蔽問題。

有些問題解決起來比較容易。Lumen使用螢幕追蹤添加軟體光線追蹤所缺乏的細節,但草地的細節太過豐富,緻使這些螢幕追蹤引發了明顯的鋸齒問題。一種簡單的解決措施是略過植被上的螢幕追蹤命中點,這足以解決僞影問題。

Lumen為《堡壘之夜:大逃殺》第四章帶來實時全局光照

通過略過植被命中點,解決螢幕追蹤在草地上産生的嚴重噪點問題。

軟體光線追蹤的另一個大問題是,在反射中你會看到,表面上緩存的光照有着較低的分辨率。Lumen為每個網格體維護了一個分辨率相當高的表面緩存,用來有效地為光線命中點提供光照,但我們将它們合并到了一個更加模糊的體素化表示中。我們開發了一個反向查找結構,允許我們直接對被光線命中的每個網格體進行表面緩存采樣,進而産生更精确的自發光光照和更清晰的水面反射。

Lumen為《堡壘之夜:大逃殺》第四章帶來實時全局光照

當光線直接對Lumen的表面緩存進行采樣時,使用軟體光線追蹤将得到更加清晰的反射(為了取得可視化效果圖,螢幕追蹤已被禁用)。

說到水面反射,每當Lumen的螢幕追蹤被前景物體阻斷時,我們都會在被阻斷的地方看到垂直條紋僞影。對于運動中的角色來說,這種僞影非常容易分散觀看者的注意力。Lumen的螢幕追蹤無法知道物體的厚度,是以我們必須切換到軟體光線追蹤才能處理剩下的光線,這往往會導緻顔色出現差異。這甚至還不如螢幕空間反射,螢幕空間反射使用的是一種成本更低,但不太精确的光線相交方法,但支援在前景物體後方繼續相交。即使是對于軟體光線追蹤的命中點,我們也能通過對螢幕顔色的采樣解決垂直條紋問題,這減少了顔色不比對的現象。我們在最後一刻才提出了解決方案,是以并沒有添加到UE5.1版本中。

Lumen為《堡壘之夜:大逃殺》第四章帶來實時全局光照

通過對光線命中點的螢幕顔色進行采樣,在最大程度上消除由螢幕追蹤和軟體光線追蹤之間的不比對導緻的垂直條紋現象。

品質方面的其他改進取得了出人意料的效果。為了符合四毫秒的預算,Lumen全局光照大幅降低了采樣率。這會使噪點變得更加明顯,并在遊戲體驗中分散玩家的注意力。我們通過整合NVIDIA的時空藍色噪點技術,大幅減少了噪點。這項技術預先優化了噪點模式,當噪點在多個幀中積累起來時,可以迅速消除它們。這樣一來,無需追蹤更多光線,就能得到更加幹淨的間接光照。

Lumen為《堡壘之夜:大逃殺》第四章帶來實時全局光照

有了時空藍色噪點技術,在穿門而入的天空光照中,噪點變少了。

美術方向的控件

美術師可以通過一些手段管理間接光照的美術方向,例如定向光源中的“間接光照強度”。《堡壘之夜》的美術師将這個值設為2.0,這樣可以增強被反射的光線,給遊戲帶來溫暖的感覺。但室内區域出現了一個問題:如果附近沒有窗戶或光源,使用精确的全局光照時,這個區域會變得非常暗。從室内走向室外時,這會導緻曝光出現巨大波動。美術師可以通過放置更多光源解決這個問題,但會增加陰影成本。

我們為Lumen的間接光照開發了新控件:後期處理體積中的“天空光照洩漏”和“漫反射顔色增強”。“天空光照洩漏”可以在室内稍微提升環境光照的強度,限制曝光範圍,而“漫反射顔色增強”可以增強經過多次反射的間接光照。與添加更多光源不同,這兩個選項不會明顯增加GPU成本。考慮到可玩性,《堡壘之夜》的美術師最後使用了“天空光照洩漏”防止室内區域變得太暗。

洩漏進來的天空光照可防止區域變成純黑色。

精确的全局光照創造了高對比度光照,在這種情況下,單個曝光值無法取得良好的效果。圖像中的明亮區域(尤其是天空和被太陽照亮的表面)會曝光過度,而黑暗區域則曝光不足。虛幻引擎5.0引入了一個名為“局部曝光”的新功能,在《堡壘之夜》那些具有挑戰性的高動态範圍光照條件中,美術師用它保留了高光和陰影細節。

通過局部曝光保留高光和陰影細節,這是UE 5.0中的新功能。使用Lumen時,務必設定局部曝光!

性能

Lumen非常依賴通過虛幻引擎5的時序超級分辨率(TSR)功能對4K輸出進行時序上采樣。比起以品質明顯較低的設定在4K原生環境下運作Lumen,使用TSR在内部渲染1080P分辨率可以提供最好的最終圖像品質。

你可以配置Lumen,通過在平台的裝置配置檔案中将“全局光照”品質和“反射”品質設定為“高”,在次世代主機上實作60FPS的目标,具體做法如下:

将Lumen全局光照和反射品質設定為“高”,目标幀率為60FPS

添加控制台變量sg.GlobalIlluminationQuality=2

添加控制台變量sg.ReflectionQuality=2

Lumen全局光照通過降低采樣率,使其遠低于正常标準(對光線的逐像素采樣率降到原來的十六分之一),達到降低品質級别的目的。當追蹤如此少量的光線時,間接光照的時間穩定性會降低,黑暗區域的噪點會變得更明顯。“天空光照洩漏”能夠有效地隐藏這些新出現的噪點。

60FPS設定下的Lumen對比30FPS設定下的Lumen。Lumen能夠更好地捕捉小細節,而且在30FPS的設定下,有着更高的時間穩定性,這在截圖對比中無法展現出來。

制作《堡壘之夜:大逃殺》第四章時,我們對Lumen全局光照做出了許多小規模優化,但對提升速度幫助最大的還是将整套方法遷移至異步計算管線中,這樣可以節省0.8毫秒。Lumen的各種算法中有很多計算排程,在兩次排程之間,GPU會有很短的空閑時間,但這些時間會累加起來。

此外,光線追蹤的排程往往會出現長尾效應,少數光線完成排程的時間比其他光線更長。通過将這項工作遷移至異步計算管線,GPU能夠利用空白時間處理幀中的其他工作,這更充分地利用了GPU的處理能力。UE 5.2中将預設為主機平台啟用異步Lumen。因為有一些錯誤需要修複,是以我們沒能來得及在UE 5.1中推出這項功能。

Lumen為《堡壘之夜:大逃殺》第四章帶來實時全局光照

Lumen的工作現在是在異步計算管線中進行的,這更充分地利用了GPU的計算能力。

在除水面外的其他地方,Lumen反射可将渲染分辨率降至一半,通過降低品質級别來控制預算,實作60FPS的目标。Lumen全局光照已經能夠産生粗糙的反射,但是Lumen反射需要追蹤額外的光線才能獲得清晰的反射效果。根據螢幕上有多少足夠光滑的材質需要反射光線,反射成本可能存在很大的變數。植被上的反射光線已經在基礎通道和陰影深度中産生了較高的成本,我們通過更頻繁地略過這些反射光線,實作了一項非常重要的優化,縮減了一到兩毫秒的時間,并且沒有造成明顯的品質損失。

Xbox Series S帶來了一個特殊難題。Xbox Series X的GPU性能達到了12TF,而Xbox Series S的GPU性能隻有4TF,是以我們需要為它降低内部分辨率,但這樣做還不夠。我們不想退回到使用距離場環境光遮蔽,這将大大改變外觀。我們開發了一種模式,讓Lumen全局光照提供粗糙反射,同時使用螢幕空間反射實作鏡面反射。通過禁用Lumen反射,我們節省了大約1毫秒的時間,比起僅使用螢幕空間反射所能實作的效果,這種方式為我們帶來了更出色的外觀。

即使為了實作可延展性而禁用了Lumen反射,Lumen全局光照仍會提供粗糙反射。

不管怎麼說,我們成功地在4毫秒的平均成本預算内整合了Lumen全局光照和反射,在次世代主機上實作了60FPS的幀率。《堡壘之夜:大逃殺》第四章在次世代主機上的平均内部分辨率到達了4K的55%-60%,同時穩定地實作了60FPS的幀率。

降低品質級别

《堡壘之夜》已登陸多個平台,但隻有最高端的平台支援Lumen。遊戲體驗需要做到盡可能相似,不應該讓美術師針對各個平台重新設定光照。我們會根據“全局光照”的品質設定調整環境光照:

史詩級和進階

  • 啟用Lumen,提供全局光照
  • 使用Lumen的天空光照洩漏,防止黑暗區域變成純黑色
  • 啟用自動曝光,在室内産生正确的曝光
  • 啟用局部曝光

中級

  • 為大規模環境光遮蔽啟用距離場環境光遮蔽(而非Lumen)
  • 為小規模環境光遮蔽啟用螢幕空間環境光遮蔽
  • 禁用自動曝光

低級

  • 天空光照無陰影
  • 因為沒有任何形式的天空光照陰影,是以通過r.SkylightIntensityMultiplier=0.7降低天空光照強度,使其與中級品質更加比對

我們在這份總結報告中介紹了在《堡壘之夜:大逃殺》第四章中,我們對Lumen做出的改進,解答了如何利用Lumen開發跨平台遊戲,希望對你有幫助。這些改進大部分已包含在虛幻引擎5.1中,供虛幻引擎開發者使用。如需了解更多資訊,請參閱Lumen文檔。

繼續閱讀