首頁  >  文章  >  科技週邊  >  超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

WBOY
WBOY轉載
2023-04-08 22:21:091493瀏覽

即時全域光照(Real-time GI)一直是電腦圖形學的聖杯。

多年來,業界也提出多種方法來解決這個問題。

常用的方法套件透過利用某些假設來約束問題域,例如靜態幾何,粗糙的場景表示或追蹤粗糙探針,以及在兩者之間插值照明。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

在虛幻引擎中,全局光照和反射系統Lumen這項技術便是由Krzysztof Narkowicz和Daniel Wright一起創立的。

目標是建立一個與前人不同的方案,能夠實現統一照明,以及類似烘焙一樣的照明品質。

近期,在SIGGRAPH 2022上,Krzysztof Narkowicz和團隊講述了他們建構Lumen技術之旅。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

軟體光線追蹤-高度場

#目前的硬體光線追蹤缺少強大的GPU算力支援。我們不知道硬體光線追蹤速度有多快,甚至不知道新一代主機是否支援它。

因此,軟體光線追蹤方法運用而出。事實證明,它確實是一個非常好用的工具,可以用於縮放或支援有大量重疊實例的場景。

軟體光線追蹤提供了一個可能性,那便是可以使用各種各樣的追蹤結構,例如三角形、距離場(distance fields)、面元(surfels) ,或高度場(heightfields)。

在此,Krzysztof Narkowicz放棄了研究三角形,簡要研究了面元,但是對於那些需要相當高密度才能表示的幾何圖形,對其進行更新或追踪面元是相當昂貴的。

經過初步探索,高度場是最合適的,因其能夠很好地映射到硬體中,並提供表面表示和簡單的連續 LOD。

因為我們可以使用所有的POM演算法,例如最小-最大四叉樹,因此它的追蹤速度是非常快的。

此外,多個高度場可以表示複雜幾何,類似柵格化邊界卷層次結構。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

若將其視為面元的加速結構也非常有趣,一個單獨的texel就是一個受限於常規網格的面元。

除了高度場,Lumen還有其他屬性,如反照率或照明,這樣就能夠計算出每次的照明。

在Lumen中,開發者將這張帶有表面資料的完整貼花式投影命名為卡片(Cards),即捕獲位置。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

###Raymarched cards光線步進卡片(高度場)################對於場景中的每一張卡片來說,進行光線步進太慢。因此需要一種卡片的加速結構,開發者選擇了4節點的BVH。它是為一個完整的場景構建的,每一幀都在 CPU 上,並上傳到 GPU。 ############然後在追蹤著色器中,我們將進行基於堆疊的遍歷,並對節點進行動態排序,以便首先遍歷最接近的節點。 ################

BVH 偵錯視圖

擷取位置

這裡最棘手的部分是如何放置高度場,以便捕捉整個網格。 Krzysztof Narkowicz稱,「其中一個想法是基於GPU的全局距離場。每一幀我們都會追蹤一小組主射線來尋找沒有被卡片覆蓋的射線。

接下來,對於每一個未發現的射線,我們將使用表面梯度遍歷全域距離場,以確定一個最佳的卡片方向和範圍,從而產生一個新的卡片。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

全域距離場的捕獲位置

一方面,它被證實可以為整個合併場景產生卡,而不必為每個網格去生成卡。另一方面,事實證明它在實踐中相當挑剔,因為每次相機移動時都會產生不同的結果。

##另一個想法就是把每個相機移動時都會產生不同的結果。

##另一個想法就是把每個網格的卡片作為一個網格導入步驟。透過建立幾何學的BVH 來做到這一點,其中每個節點將被轉換為N 張卡。

##如下:

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

#光線步進卡(高場)

#卡位置檢視超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

#這個方法在尋找一個好的位置時遇到了問題,因為BVH節點並不是放置卡片的好代理。

那麼,研究人員又提出了另一個想法:遵循紫外線展開技術,並嘗試聚類表面元素。

因為要處理數百萬個由Nanite提供的多邊形,因此他們將三角形換成面元。

同時,他們也切換到了一個較少的約束自由導向卡,以嘗試與表面匹配更好。

自由導向的卡片位置

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

#透過嘗試,這個方法對於簡單的形狀非常有效,但是在收斂到更複雜的形狀上就出現了問題。最後,Narkowicz又切換迴軸對齊的卡片,但是這次是由面元集群和每個網格生成的。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen錐形追蹤

追蹤高度場的獨特性質還可以實現錐形追蹤。

錐形追蹤對於降低噪音非常有效,因為一個預先過濾的單個錐體追蹤代表了數千條單獨的射線。#######################光線追蹤### #########################錐形追蹤##########

對於每個卡,開發者還儲存了一個完整的預過濾 mip-map鏈表面高度、照明和材料屬性。

在追蹤時,根據圓錐足跡選擇合適的步進光線,並對其進行射線追蹤。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

#無卡邊和帶有卡片邊的追蹤

合併場景表示

在軟體中追蹤大量的非相干射線是非常慢的。理想情況下,可以使用單一的全域結構,而非多個高度場。

當錐形足跡越來越大時,實際上並不需要精確的場景表示,可以用更近似的表示來替代,以獲得更快的速度。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

一個更複雜的場景,有數十張卡片來追蹤每個光線

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

第一個成功的方法是實現純體素圓錐跟踪,整個場景在運行時是體素化的,就像經典的“Interactive Indirect Illumination Using Voxel Cone Tracing”一文中的那樣實現。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

光線步進卡(高度場)

#體素圓錐追蹤

光線步進卡繼續與體素錐追蹤

而這種方法的主要缺點是,由於場景幾何體的過度融合而導致洩漏,這種現像在追蹤粗低映射時尤其明顯。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

第一種降低影像洩漏的技術是,對全局距離場進行跟踪,只在靠近表面的地方進行體素採樣。在採樣過程中,隨著採樣範圍擴大累積不透明度,停止追蹤時,不透明度將達到1。這樣總是在幾何體附近進行精確取樣,以實現降低圖形外洩的目的。 ############第二種技巧是對網狀內部進行體素化。這大大減少了在較厚的壁處的洩露,不過這樣也會造成一些過度遮蔽。 ############其他的實驗包括追蹤稀疏體素位塊和每面透明通道的體素。這兩個實驗的目的都是為了解決射線方向體素插值問題,即對於不垂直於壁面的射線,軸對齊的實心壁將變得透明。 ############體素位磚是將每個體素儲存一個位元在一個8x8x8的磚塊中,以指示給定的體素是否為空。然後使用兩級 DDA 演算法進行光線步進。具有透明面的體素相似,但 DDA相同,並且沿著光線方向透明度不斷上升。結果表明,這兩種方法在表示幾何體方面的效果都不如距離域,而且速度相當慢。 ################

帶有透明度的體素

最早的追蹤合併表示的方法是,對全域距離欄位和使用全域每個場景卡的著色命中進行錐形跟踪。即遍歷一個 BVH,找出場景中的哪些卡片會影響採樣點,然後根據錐形足跡對每張卡的適度滑步水平進行採樣。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

本文放棄​​了這個方法,因為當初沒有考慮只用它來表示遠場軌跡,而是把它看作是高場光線步進的直接替代。有點諷刺的是,這種被拋棄的方法與我們兩年後最終達成的解決方案最為接近。

第一個示範

到這裡,已經可以產生一些相當不錯的結果了:

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

儘管如此,還是遇到了許多圖形洩漏的問題,而且在這個簡單的場景中,即使在一個高階PC GPU 上,效能也不是很理想。

為了解決洩漏問題,以處理更多的實例、在PS5上以8毫秒以下時間完成處理。這個demo堪稱是真正的催化劑。

與以往的方案相比,第一個變化也是最大的變化是,用距離場追蹤取代高度場追蹤。

為了遮蔽生命點,從卡片上插入生命點的光線,因為距離場沒有頂點屬性,這樣,未覆蓋的區域只會導致能源損失,而不是洩漏。

基於同樣的考慮,將體素錐形追蹤改為全域距離場射線追蹤。

同時,我們也做了很多不同的最佳化,並透過快取方案對Lumen的不同部分進行了時間分流。值得注意的是,如果沒有錐體追踪,我們必須更積極地去噪和緩存追踪,但這又是一個漫長而複雜的故事。

這是我們發送第一個演示後的最終結果,在PS5上一直低於8ms,包括所有共享資料結​​構的更新,例如全域距離欄位。目前的性能表現甚至更好了,例如最新demo的完成時間接近4毫秒,品質上也有明顯的改進。

超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen

尾聲

總之,本文對整個Lumen進行了全面重寫,還有許多不同的想法沒有實施。另一方面,有些東西被重新利用。就像最初我們用卡片作為追蹤表示,但現在用來作為快取網格表面的各種計算方式。和軟體追蹤類似,開始是我們主要的追蹤方法,主要是圓錐體追踪,但最後成為一種縮小規模和支持具有大量重疊實例的、複雜重度場景的方法。

以上是超逼真渲染!虛幻引擎技術大牛解讀全局光照系統Lumen的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除