五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Lumen全局光照和反射技術(shù)

2023-03-15 11:34 作者:一罐搖搖粉  | 我要投稿

首先這是曾經(jīng)的一篇課程報告,其次也算是GAMES104課程對應(yīng)章節(jié)的學(xué)習(xí)筆記,最后個人還感覺有一miumiu分享價值,那順手水一篇專欄吧!

引言

在本世代的圖形硬件與算法支撐下,人們已經(jīng)可以使用光線追蹤技術(shù)在計算機中生成近乎完美的真實感圖像,但與之相對應(yīng)的代價就是高昂的算力要求與時間成本,這在游戲生產(chǎn)中是不可接受的。雖然現(xiàn)代圖形接口與游戲引擎已經(jīng)普遍兼容最新的硬件光追,能夠極大地平衡圖像質(zhì)量與所需的幀生成時間上的關(guān)系,但由于其對圖形處理器的硬性要求仍舊很難將其推廣至所有用戶群體之中。并且,即便是使用最新的圖形硬件加速卡所搭載的光追單元進行計算,往往也只能達到每幀圖像個位數(shù)spp采樣數(shù)的水平,其算力還是遠遠不能滿足使用純粹的光線追蹤算法生成圖像的要求,而需要搭配諸如時域采樣結(jié)果復(fù)用、圖像空間降噪過濾、深度學(xué)習(xí)超采樣等技術(shù)來使得特定場景的最終渲染結(jié)果看上去像那么回事。

正是由于光線追蹤技術(shù)當(dāng)今硬件水平下的實時渲染領(lǐng)域存在諸多限制條件,虛幻引擎技術(shù)團隊研發(fā)了Lumen這樣一套用于全局光照和反射系統(tǒng)的渲染技術(shù),用于滿足下一世代游戲主機與個人電腦上的圖形應(yīng)用。Lumen能夠在擁有大量細節(jié)的宏大場景中渲染間接漫反射光照結(jié)果,并確保無限次數(shù)的反彈以及間接高光的反射效果;無論是毫米級別的場景細節(jié),還是數(shù)以千米的宏大場景,它都顯得游刃有余。

使用Lumen技術(shù)得到的令人驚艷的全動態(tài)實時全局光照與反射效果

1 快速光線求交

實現(xiàn)間接光照的核心之一是射線在三維場景中的求交,為了實現(xiàn)更加高效的光線求交操作,Lumen使用了SDF有向距離場作為其加速結(jié)構(gòu)。SDF顧名思義,其表征了空間中任意一點到最近表面的距離,當(dāng)其在幾何體外部時值為正、在內(nèi)部時值為負。在傳統(tǒng)的三維形體表達中,我們往往會使用點線面的離散表征,當(dāng)需要進行幾何處理時 不得不進行全局的三角形遍歷,這對于計算與存儲都造成了相當(dāng)大的冗余;而在三維空間的SDF表征中,我們獲得了一個空間中連續(xù)的場,可以在任意位置得到相應(yīng)的值,并且可以利用其可微的性質(zhì)進行各種各樣的幾何處理。例如,連續(xù)可微的SDF表征使得人們可以利用Mipmap的思想對三維形體快速生成不同等級的LOD模型,也可以通過對其求導(dǎo)得到模型表面的法向梯度??傮w來看,SDF為我們提供了一套統(tǒng)一的、無限精 度的模型網(wǎng)格表達方式,在許多方面存在著相當(dāng)大的優(yōu)勢。

SDF有向距離場的可視化

一旦有了場景的SDF表達,我們就可以在其中進行快速且魯棒的光線求交操作。在以往的傳統(tǒng)場景中,進行射線檢測往往會使用一種叫做光線步進的方法進行,即每一步向射線方向進行一定跨度的試探,檢測新的位置點是否處于幾何體內(nèi)部從而進一步計算 射線與場景的交點。而在這個過程中,步進長度的選擇有成為了一大難題,過大的步長容易錯失較小的幾何體,過小的步長又會造成相當(dāng)大的計算資源開銷,人們總是繞不開要在速度與精度之間找到一個平衡點。而在SDF中,場景中的每個點都能快速查詢到與其最近的幾何體的距離,從而安全地引導(dǎo)光 線按照射線方向進行每一步的步進,即便在少數(shù)情況下錯誤的步進操作使得光線進入了幾何體內(nèi)部也可以由SDF的有向特性方向修正至幾何表面,得到光線與場景的交點。

通過SDF實現(xiàn)快速精確的Ray Marching

由于存儲整個場景的SDF將造成極大的空間浪費,因此我們可以對場景中的每一個網(wǎng)格生成單獨的分辨率與尺寸相匹配的SDF。對于一個擁有成百上千對象的游戲場景來說,其通常是由更少的物體通過平移、縮放、旋轉(zhuǎn)操作得到的,這樣就可以僅生成每個物體的SDF,通過數(shù)學(xué)變換得到整個場景的表征。對于每個SDF所包裹的網(wǎng)格,一定還是會存在一定的空余空間冗余,于是還可以進一步對SDF進行稀疏化處理,通過索引表的方式壓縮存儲空間,進一步節(jié)省了存儲消耗。

對每個物體實例建立的局部SD
使用局部SDF組建場景表達(左)
和使用全局SDF進行場景表達(右)

但是,當(dāng)場景的物體數(shù)量非常之大時,這樣的存儲方式又會造成計算資源的瓶頸,因為每一根光線在做場景求交時都需要與整個場景中所有的物體進行求交查詢。此時Lumen所用的解決方案就是將所有分散的基于物體的局部SDF重新合并成一個全局 的低精度稀疏SDF,在每幀對非靜態(tài)的物體進行更新。此時,就可以將兩種存儲方式進行結(jié)合,在每次光線求交時首先查詢低精度的全局SDF得到粗糙的交點,而后僅查詢其周邊網(wǎng)格的局部SDF得到更加精細的交點。如圖灰度值表現(xiàn)了在局部SDF與全局SDF中進行光線追蹤的資源開銷,越明亮的像素表示更多的求交耗時,可以發(fā)現(xiàn)在全局SDF 的加持下,能夠極大地提高光線對物體求交的性能。

局部SDF場景的光追開銷(左)
和全局SDF場景的光追開銷(右)

在實際工程應(yīng)用中,Lumen系統(tǒng)還使用4層Clipmap對全局SDF緩存進行了進一步空域和時域上的優(yōu)化。在空域上,Lumen使得全局SDF在最靠近相機的區(qū)域擁有最高精度,而離相機視野越遠的區(qū)域則擁有更低的精度;在時域上,只有最近層級的SDF需要每一幀更新,而越遠層級的SDF則有著更低的更新頻率。至此,Lumen所使用的SDF架構(gòu)為光線求交提供了一個高效的場景表達,使得光線追蹤的過程不再依賴于特定的圖形硬件也能達到相當(dāng)不錯的性能水準。

不同顏色所表示的4層Clipmap范圍

2 光子注入與緩存

光子注入與緩存是存儲場景中光照結(jié)果的過程,渲染引擎可以通過該光照結(jié)果計算場景最終的全局光照效果。這里需要關(guān)注的是,全局光照的計算其實是從光的視角照亮整個世界后,每個被照亮的面片再次作為燈光對場景做出照明貢獻的過程。在Lumen的實現(xiàn)中,提出了一個叫做Mesh Card的概念,它將每個物體與坐標(biāo)軸對齊的六面信息都拍一次快照,用于生成Surface Cache。這一個過程分為兩個Pass:第一步 根據(jù)物體離相機的距離選擇合適的分辨率采集每個Mesh Card信息,同時獲得物體各個面的Albedo、Normal、Depth等通道紋理,將其分類存儲在多張512×512的紋理圖集中;第二步將所有Mesh Card拷貝至Surface Cache。所謂的Surface Cache是多張4096×4096的紋理,每個通道均享有這樣一張紋理的內(nèi)存空間,其中的Mesh Card信息會隨著視野范圍換入或換出,并在光源變動 或相機移動時對“臟”的紋理內(nèi)存塊進行必要的更新,若紋理空間被存滿則拋棄那些對間接光照貢獻度低的Mesh Card。在Surface Cache被存儲時,Lumen的方案是針對各個通道的信息特征選擇合適的硬件支持的壓縮方法對圖像紋理進行壓縮,以減少大尺寸的表面紋理緩存對內(nèi)存的占用。

對物體Albedo信息構(gòu)建的Mesh Card
Albedo通道表面緩存構(gòu)建

當(dāng)完成Surface Cache的預(yù)計算存儲之 后,下一渲染環(huán)節(jié)就是如何確定其中每一個像素點應(yīng)有的光照結(jié)果,并通過與光子映射類似的手段將其固化在緩存中。為了生成Surface Cache Final Lighting結(jié)果,除了上一步已獲得的物體材質(zhì)多通道緩存以外,我們還需要Surface Cache Direct Lighting、Surface Cache Indirect Lighting、World Space Voxel? Lighting三種緩存信息。其中的邏輯關(guān)系為:根據(jù)物體材質(zhì)多通道紋理計算直接光照在各個位置的著色值,并使用SDF場跟蹤光源的Shadow Map判斷可見性,得到直接光照表面緩存,作為最終光照結(jié)果表面緩存的貢獻;而后利用最終光照結(jié)果緩存照亮三維空間,建立世界空間下對光照信息的體素網(wǎng)格表達,每個體素存儲六個面的亮度信息,并以次為下一幀提供間接光照信息;在下一幀中建立間接光照表面緩存,該緩存具體表現(xiàn)為每4×4個紋素中的一個間接光照探針,每個探針跟蹤半球上的16根光線 進行光照采樣,最終存儲為占用4×4紋素內(nèi)存大小的球諧函數(shù)表達,其中探針位置與采樣射線每幀進行恰當(dāng)?shù)亩秳?,最后與直接光照表面緩存一起合成最終光照表面緩存。如? 此不斷循環(huán),上一幀的光照信息不斷加入到下一幀的間接光照貢獻中去,相當(dāng)于利用時域復(fù)用的手段增加了間接光照的反彈次數(shù),最終得到收斂的全局光照結(jié)果。在實際操作UE5的Lumen光照系統(tǒng)時,也能直觀地感受到場景大幅變動后陰影區(qū)域逐漸由暗變亮的過程,這便是Lumen所用的光照緩存管線從初始狀態(tài)不斷傳遞多次光線反彈信息的結(jié)果。?

Surface Cache計算流水線
從Surface Cache構(gòu)建的世界空間光照信息體素表達


物體表面放置的間接光照探針
最終光照緩存合并

對于游戲引擎而言,每次更新一整套4096×4096的Surface Cache還是太過消耗計算與帶寬,Lumen則為其更新方案提出了一個固定的預(yù)算。對于直接光照表面緩存而言,每次著色開銷相對較小,每一幀最多更新不超過1024×1024的紋素信息;對于間接光照表面緩存,由于要使用上一幀構(gòu)建的體素光照信息并基于SDF采樣,將產(chǎn)生較大的性能開銷,于是則限定每一幀更新不超過512×512的紋素。因此,Surface Cache一次性所更新的內(nèi)容一定有可能小于世界空間中的所有信息,對每一個Mesh Card就必須使用特定的評估機制來確保它們能夠按照合理的順序更新。作為實施方案,Lumen使用了基于128個“桶”的桶排序的優(yōu)先級隊列管理Surface Cache,并按照優(yōu)先級更新其中的制定紋素區(qū)塊。

3 光照探針與著色

在完成Surface Cache的建立之后,我們相當(dāng)于將場景的輻照度信息一一固化在了每個物體的包圍盒表面,之后便可以針對物體的某一點利用這些照度信息做具體的著色。但是針對具體的像素而言,我們還是需要對其表面所在的半球空間方向做采樣,這個過程無疑是相當(dāng)耗費機器性能的,Lumen對此則提出了使用光照探針的解決方案,在場景中合理地分布不同的探針并記錄各個方向的光照信息,以便在著色時可以快速從場景探針中取樣和插值,減少了逐像素光線采樣的計算和通信開銷。

屏幕空間探針分布
探針信息內(nèi)存存儲順序

為了構(gòu)建光照探針,首先需要確定的是探針的空間分布關(guān)系。按照最直接最自然的 想法,我們可以在場景空間中均勻分布無數(shù)個光照探針,并通過上一步所獲的表面緩存以及世界空間體素光照信息烘焙所有探針。但在實際應(yīng)用中,場景的表面往往是起伏不定的,靠近相機與遠離空間的區(qū)域所需要的光照信息密度也是不相同的,因此均勻放置的光照探針實際上無法表達光場的變化。Lumen則提出了非常聰明的屏幕空間光照探針分布策略,在屏幕空間中每隔16×16像素放置一個探針,這個尺度間隔是足以表征間接光照這一類低頻信號的,并且后期合成時通過表面本身的法線等高頻信息也可以良好地還原幾何表面的樣貌。Lumen同時還使用了一套近似的判斷準則,當(dāng)檢測到一些擁有巨大深度差異的臨近像素時,16×16的間隔不足以表示該區(qū)域巨大世界空間距離下的光場變化,則會在指定區(qū)域進行探針的加密布置,從16×16的探針分辨率提升至每間隔8×8乃至4×4分布,實現(xiàn)了自適應(yīng)屏幕空間探針布置。在光照探針信息存儲上,Lumen又設(shè)計了一套非常巧妙的方法:探針信息的存儲同樣使用一套方形的紋理空間,但實際用戶設(shè)備通常不是一塊等比例的方形顯示器,于是基于屏幕空間的探針分布對等地存儲到紋理空間中時必然會有空余的內(nèi)存區(qū)塊,而這一區(qū)塊便正好用于存儲加密后額外布置的探針信息,通過索引即可快速定位對應(yīng)內(nèi)存,同時保證了內(nèi)存的利用率與連續(xù)性。

屏幕空間探針的八面體采樣
重要度采樣策略

其次,還需要確定如何獲得探針中應(yīng)該保存的信息。Lumen所使用的方案是將探針?biāo)谇蛎婵臻g做八面體映射,并在八面體UV空間下做8×8的采樣。然而要在如此低 的采樣率下達到視覺上完美的光照效果,重要度采樣就成為了必不可少的一環(huán),我們必須向光源方向投射更多的采樣射線。為了估計光照的方向信息,可以假設(shè)場景中的相機、光源變化足夠緩慢,這樣就可以從上一幀的探針中遍歷采樣光照信息。在實際應(yīng)用中,Lumen將上一幀光照信息進行重投影,并在臨近的四個屏幕空間探針中求得平均得到8×8的輻照度圖,圖中亮的部分就是光源貢獻較大的區(qū)域。這種方法并不需要昂貴的采樣過程,因為光線信息已經(jīng)按照索引存儲在了八面體對應(yīng)的圖集內(nèi)存中。另外,要得 到具體像素的間接光照還需要該區(qū)域的法向信息,從而將探針中背向幾何面的光照信息做剔除,并對面向光源的光照信息做進一步的著色計算。但對于一個像素來說,其所具備的法線是高頻信號,無法直接與低頻的探針信息相匹配,因此Lumen選擇在屏幕空間中像素所用探針周圍的32×32像素空間內(nèi),篩選深度差異小于一定閾值的區(qū)域隨機撒64個采樣點,用于計算該區(qū)域的微平面法向分布函數(shù),并進而得到BRDF概率分布函數(shù)。此時,我們同時擁有了探針處的Lighting PDF和BRDF PDF,結(jié)合二者分布信息便可剔除不需要的方向的采樣,同時將省出來的采樣次數(shù)用于更加重要的方向進行超采樣,在同樣64根采樣射線限定的情況下獲得更加精確的輻照度等信。?

均勻采樣(黑)與重要度采樣(白)示意圖
均勻采樣(左)與重要度采樣(右)效果對比

每個探針64次采樣算是為算力限制做出了妥協(xié),為采樣計算與存儲空間節(jié)省了許多資源,但同時也會導(dǎo)致其得到的信息仍然不夠穩(wěn)定,直接用于渲染一幅圖像容易得到斑駁的畫面結(jié)果。為了解決這個問題,Lumen在使用探針信息時將一同考慮與其相鄰的幾個探針,用作探針信息的降噪過濾。在將臨近探針與當(dāng)前著色點相匹配的輻照度采 樣結(jié)果納入光柵化過程前,還需要對其進行可用性檢測:一是要求臨近探針采樣值實際對應(yīng)的重投影光線角度誤差小于10?,減少光照信息被錯誤重用的可能;二是要求該光線與場景命中距離與實際著色點處差距不大,防止漏光現(xiàn)象的發(fā)生。經(jīng)過如上步驟,能使得畫面渲染效果更加自然、真實。

重用臨近信息時的可用性檢測指標(biāo)
復(fù)用周邊探針信息得到的更好結(jié)果

此時屏幕空間的光照探針還存在一定的缺陷,為了在運動的畫面下獲得正確的渲染效果,還必須每幀更新全屏的探針。探針的采樣更新過程可以被視作光線追蹤過程,我們知道光線追蹤著色的過程不僅與采樣的光線數(shù)目、場景的復(fù)雜度有關(guān)以外還跟光線投 射的距離有關(guān),近距離的光線求交將比遠距離追蹤效率高出非常多,而屏幕空間探針貼近物體表面放置,于是容易造成場景中光線追蹤過程將跨越非常大的距離導(dǎo)致性能低下。Lumen就此又在視野空間中構(gòu)建了一套在世界空間下布置的光照探針,用于存儲場景各個位置的光場信息,而這些探針則在光源不變的情況下無需重復(fù)更新,僅需在相機移動時增添與刪除對應(yīng)的探針,相當(dāng)于實現(xiàn)了場景光照信息的預(yù)計算。具體地,這里的世界空間探針也使用了多層Clipmap結(jié)構(gòu)優(yōu)化計算與存儲,每個探針的球面光線采樣數(shù)增加到32×32,提供更加精確的場景照明信息。這樣一來,在采集屏幕空間探針信息進行光線投射的過程中,就可以重用附近世界空間探針光場信息,實現(xiàn)將投射光線與預(yù)計算光線相連接的效果,大大減少了光線追蹤的距離。

世界空間光照探針
不同探針的“光線拼接”示意圖

最后,我們已經(jīng)通過各種技巧優(yōu)化了得到最終屏幕空間光照探針信息的過程,可以進入最終的像素顏色計算環(huán)節(jié)。在執(zhí)行最終 著色之前,Lumen選擇將光照探針中的球面空間光照信息投影到球諧函數(shù)空間下,得到低頻平滑的輻照度信息,從而減少原本采樣下的高頻跳變與抖動。在具體像素著色時,便可引用這些密集的屏幕空間探針中的低頻球諧光照信息與對應(yīng)G-Buffer中的高頻幾何信息做最終光照結(jié)果的計算,得到令人驚嘆的全局光照和反射效果。

利用探針信息與幾何信息渲染畫面

4 總結(jié)

在過去離線的光線追蹤真實感渲染器一直是許多視覺藝術(shù)家與視效公司手中最得力的工具,而如今隨著圖形硬件與圖形算法的發(fā)展,我們幾乎已經(jīng)可以利用最先進的游戲引擎實時產(chǎn)生類似的結(jié)果,目前也有不少影視級別項目開始用上了虛幻制作管線。Lumen光照系統(tǒng)的出現(xiàn)奠定了未來游戲引擎渲染質(zhì)量的標(biāo)桿,雖然Lumen還是基于本世代的硬件水平做出了大量的妥協(xié)、引入了大量的“Hack”,但隨著未來圖形硬件的繼續(xù)進步,一定會有更多更先進更具創(chuàng)新性的渲染技術(shù)層出不窮,Lumen沒準會成為圖形算法渲染領(lǐng)域這一征程的開端。(不過眼看著現(xiàn)在AI視頻的穩(wěn)定性每天都在提升,拋開像Lumen這種單純的圖形技術(shù)來說,以后會不會出現(xiàn)1ms渲染base color、15ms交給AI重繪的渲染管線出現(xiàn)呢,這下行業(yè)可又得經(jīng)歷一場洗牌了,拭目以待吧?。?/p>





Lumen全局光照和反射技術(shù)的評論 (共 條)

分享到微博請遵守國家法律
平南县| 泽州县| 万荣县| 宣威市| 红原县| 庆阳市| 柏乡县| 瑞安市| 屏东县| 通河县| 滦平县| 高碑店市| 苏尼特右旗| 湛江市| 田阳县| 顺平县| 固安县| 永修县| 凤山市| 克东县| 元谋县| 广东省| 金阳县| 南丹县| 中牟县| 苍山县| 嘉荫县| 彭州市| 海阳市| 福贡县| 自治县| 浮梁县| 大荔县| 黄石市| 太仓市| 双峰县| 新巴尔虎右旗| 呼和浩特市| 裕民县| 焦作市| 赞皇县|