首页
/
每日頭條
/
科技
/
如何用虛幻引擎實時渲染
如何用虛幻引擎實時渲染
更新时间:2025-01-21 00:47:27

  編輯:David 桃子

  【新智元導讀】虛幻引擎5中,多虧有了全局光照系統Lumen才能讓更多人人沉浸在虛拟世界中。對于它的研發過程,創立者Krzysztof Narkowicz對其進行了解讀。 實時全局光照(Real-time GI)一直是計算機圖形學的聖杯。

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

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(1)

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

  目标是構建一個與前人不同的方案,能夠實現統一照明,以及類似烘烤一樣的照明質量。

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(2)

  軟件光線追蹤——高度場 當前的硬件光線追蹤缺少強大的GPU算力支持。我們不知道硬件光線追蹤速度有多快,甚至不知道新一代控制台是否支持它。

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

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

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

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

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

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(3)

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

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

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(4)

  栅格化的三角形

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(5)

  Raymarched cards光線步進卡(高度場)

  對于場景中的每一張卡來說,進行光線步進太慢。因此需要一種卡的加速結構,開發者選擇了一個4節點的BVH。它是為一個完整的場景構建的,每一幀都在 CPU 上,并上傳到 GPU。

  然後在追蹤着色器中,我們将進行基于堆棧的遍曆,并對節點進行動态排序,以便首先遍曆最接近的節點。

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(6)

  BVH 調試視圖

  捕獲位置 這裡最棘手的部分是如何放置高度場,以便捕捉整個網格。

  Krzysztof Narkowicz稱,「其中一個想法是基于GPU的全局距離場。每一幀我們都會追蹤一小組主射線來尋找沒有被卡覆蓋的射線。

  接下來,對于每一個未發現的射線,我們将使用表面梯度遍曆全局距離場,以确定一個最佳的卡方向和範圍,從而産生一個新的卡。

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(7)

  全局距離場的捕獲位置

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

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

  如下:

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(8)

  栅格化的三角形

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(9)

  光線步進卡(高場)

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(10)

  卡位置視圖

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

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

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

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(11)

  自由導向的卡位置

  通過嘗試,這個方法對于簡單的形狀非常有效,但是在在收斂到更複雜的形狀上就出現了問題。

  最後,Narkowicz又切換回軸對齊的卡片,但是這次是由面元集群和每個網格生成的。

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

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(12)

  光線追蹤

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(13)

  錐形追蹤

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

  在追蹤時,根據圓錐足迹選擇合适的步進光線,并對其進行射線追蹤。

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(14)

  無卡邊和帶卡邊的跟蹤

  合并場景表示 在軟件中追蹤大量的非相幹射線是非常慢的。理想情況下,可以使用單一的全局結構,而非多個高度場。

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(15)

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(16)

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

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(17)

  栅格化的三角形

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(18)

  光線步進卡 (高度場)

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(19)

  體素圓錐追蹤

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(20)

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

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

  第一種降低圖像洩漏的技術是,對全局距離場進行跟蹤,隻在靠近表面的地方進行體素采樣。在采樣過程中,随着采樣範圍擴大積累不透明度,停止追蹤時,不透明度将達到1。這樣總是在幾何體附近進行精确采樣,實現降低圖形洩露的目的。

  第二種技術是對網狀内部進行體素化。這大大減少了在較厚的壁處的洩露,不過這樣也會造成一些過度遮擋。

  其他的實驗包括跟蹤稀疏體素位塊和每面透明通道的體素。這兩個實驗的目的都是為了解決射線方向體素插值問題,即對于不垂直于壁面的射線,軸對齊的實心壁将變得透明。

  體素位磚是将每個體素存儲一個位在一個8x8x8的磚塊中,以指示給定的體素是否為空。然後使用兩級 DDA 算法進行光線步進。具有透明面的體素相似,但 DDA相同,并且沿着光線方向透明度不斷上升。結果表明,這兩種方法在表示幾何體方面的效果都不如距離域,而且速度相當慢。

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(21)

  帶有透明度的體素

  最早的跟蹤合并表示的方法是,對全局距離字段和使用全局每個場景卡的着色命中進行錐形跟蹤。即遍曆一個 BVH,找出場景中的哪些卡影響采樣點,然後根據錐形足迹對每張卡的适度滑步水平進行采樣。

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(22)

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(23)

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

  第一個演示 到這裡,已經可以産生一些相當不錯的結果了:

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(24)

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

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

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

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

  出于同樣的考慮,将體素錐形追蹤改為全局距離場射線追蹤。

  與此同時,我們還做了很多不同的優化,并通過緩存方案對Lumen的不同部分進行了時間分流。值得注意的是,如果沒有錐體追蹤,我們必須更積極地去噪和緩存追蹤,但這又是一個漫長而複雜的故事。

  這是我們發送第一個演示後的最終結果,在PS5上一直低于8ms,包括所有共享數據結構的更新,如全局距離字段。目前的性能表現甚至更好了,比如最新demo的完成時間接近4毫秒,質量上也有明顯的改進。

  如何用虛幻引擎實時渲染(虛幻引擎技術大牛解讀全局光照系統Lumen)(25)

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

  參考資料:

  htt

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
如何隐藏iphone手機id
如何隐藏iphone手機id
現在有很多朋友都在為忘記ID密碼,而煩惱!其實解ID的方法有幾種:一種是軟解一是種是硬,拿去給專業人員軟吧費用比較高,但成功率也比較高點!硬解的話費用比較便宜點,但成功率比較低而且還存在一些風險這些。。。。還有一種就我今天說隐藏ID。。它不...
2025-01-21
傳聞中的陳芊芊高甜瞬間
傳聞中的陳芊芊高甜瞬間
《傳聞中的陳芊芊》這部小制作網劇卻力壓一衆流量加身劇,這和它的“女尊”題材不無關系,這部劇的大火也帶動了很多女尊文的熱度,下面我們來給大家推薦幾部經典女尊文。《八夫臨門》作者:張廉簡介:穿過去,坐擁七個帥老公,最小的還隻有六歲,是誰那麼沒人...
2025-01-21
40分鐘咖啡教程
40分鐘咖啡教程
摘要:一分鐘帶你了解改善速溶咖啡口感的自制咖啡小技巧。在上海,咖啡已經成為許多人日常生活的一部分。然而,對于普通職工來說,單杯30元左右的品牌、門店咖啡難以滿足日常飲用的需求,制作手沖咖啡的工序又稍顯繁瑣。相較之下,方便快捷的速溶咖啡便成為...
2025-01-21
u盤fat32和exfat格式的區别
u盤fat32和exfat格式的區别
在格式化U盤時,我們經常可以看到有一個FAT32和NTFS選項,這個是文件系統格式,但其實還有另外一個叫exFAT,那麼什麼是exFAT呢?exFAT和FAT32一樣嗎?下面給大家詳細介紹一下。U盤文件系統類型:FAT32文件系統FAT32...
2025-01-21
華為手機翻轉設置
華為手機翻轉設置
華為手機翻轉設置?華為手機翻轉設置如下:要設置翻轉,按開【設置】,今天小編就來聊一聊關于華為手機翻轉設置?接下來我們就一起去研究一下吧!華為手機翻轉設置華為手機翻轉設置如下:要設置翻轉,按開【設置】。按開【設置】之後,繼續按開下【智能輔助】...
2025-01-21
Copyright 2023-2025 - www.tftnews.com All Rights Reserved