D5渲染器:D5 GI|保持實(shí)時(shí)性的同時(shí),不斷追逐離線級別的品質(zhì)
D5 全局光照方案詳解
前言
要得到照片級的渲染圖,廣大用戶的第一印象就是要使用離線渲染器。從定義上來說,“離線渲染”(或“預(yù)計(jì)算渲染”)對時(shí)間的要求沒有那么嚴(yán)格,用戶不需要瞬間看到渲染結(jié)果,而是會讓渲染器根據(jù)設(shè)定好的模型,燈光,材質(zhì),充分計(jì)算數(shù)分鐘甚至數(shù)小時(shí)。離線渲染器為了質(zhì)量可以不計(jì)時(shí)間成本,所使用的渲染策略更側(cè)重真實(shí)準(zhǔn)確,因此能得到高質(zhì)量的成果圖。
那么照片級的圖片可否實(shí)時(shí)渲染?這就完全是另外一個(gè)故事了,“實(shí)時(shí)渲染”對渲染時(shí)間提出了要求,它要每秒輸出幾十幀的畫面才能保證流暢,每幀的渲染時(shí)間只有十幾毫秒到幾十毫秒的預(yù)算(每秒30幀的話,就是 33毫秒/幀)。在如此嚴(yán)苛的時(shí)間限制下,要得到逼真的渲染圖,最大挑戰(zhàn)就是:巨大的計(jì)算量。
我們來算一筆賬:假設(shè)是 1920×1080 分辨率的畫面,使用路徑追蹤的算法,每個(gè)路徑計(jì)算3次反射,這就是 6,220,800 根光線,然而此時(shí)僅僅是每像素一個(gè)樣本(1 spp:1 sample per pixel),畫面看起來通常會是這樣,充滿噪點(diǎn):
而要讓畫面“收斂”(“收斂”是術(shù)語,不學(xué)術(shù)的說法就是“渲染完成了,沒什么噪點(diǎn)了”),則可能需要每個(gè)像素采上千個(gè)樣本,畫面會變成這樣:
UE4 Path Tracer
渲染時(shí)間:3分45秒
樣本數(shù):2048樣本/像素
顯卡:英偉達(dá) RTX 3060
此時(shí)如果觀察畫面局部,仍然會看到噪點(diǎn):
以上這張圖一共投射了 12,740,198,400 (120億)根光線,渲染花費(fèi)了超過3分鐘,這樣巨大的樣本量,以目前的硬件速度,無論怎樣優(yōu)化,都無法讓渲染時(shí)間縮短到“實(shí)時(shí)”的標(biāo)準(zhǔn)(數(shù)十毫秒/幀)。
RTX 技術(shù)能否帶來改變?
RTX 技術(shù)已經(jīng)極大地加快了顯卡投射射線的速度,但以目前的數(shù)據(jù)來看,仍然不足以達(dá)到上文所述的采樣數(shù)量要求。
我們來看英偉達(dá)官方的數(shù)據(jù):英偉達(dá) RTX 2080 Ti 顯卡理論上可以每秒投射 10 Giga(100億)的射線,但這個(gè)數(shù)據(jù)是在極其簡單的場景下跑出來的:
放大看圖中最下方的一排場景:單一模型,沒有背景,只考察首次射線。
在實(shí)戰(zhàn)中,用戶的場景要遠(yuǎn)遠(yuǎn)復(fù)雜得多。而且除去求交點(diǎn)的射線,還要有大量的著色計(jì)算,這每秒100億射線的測試數(shù)據(jù)在實(shí)際的渲染場景中要進(jìn)一步打折扣。簡單來說:RTX 并不能神奇地解決樣本不足的問題。
降噪技術(shù)
在如此巨大的樣本計(jì)算量面前,“傻算”是不可取的。事實(shí)上,沒有人愿意“傻算”,所有渲染器(對,是所有)總會或多或少地使用一些小技巧(限制反彈次數(shù),鉗制高亮,自適應(yīng)采樣等),加快出圖的速度,離線渲染器如此,實(shí)時(shí)渲染更是如此。現(xiàn)在的問題變成了:我們?nèi)绾伪苊狻吧邓恪保褂靡恍白鞅住被颉靶÷斆鳌钡募夹g(shù),在實(shí)時(shí)情況下,渲染出看起來真實(shí)的畫面。
這就要說到「降噪技術(shù)」了,近幾年來不斷進(jìn)步的降噪技術(shù)至少讓我們看到了實(shí)時(shí)照片級渲染的可能性。很多離線渲染器都在使用降噪技術(shù)加快出圖速度,并且效果非常好,以往可能需要繼續(xù)跑1個(gè)小時(shí)才能消除的噪點(diǎn),使用降噪在幾分鐘內(nèi)就能消除,呈現(xiàn)出完美平滑的最終圖片。但這依然不能滿足實(shí)時(shí)渲染的速度需求。
對于實(shí)時(shí)渲染來說,每一幀的降噪樣本預(yù)算可能只有幾樣本/像素,留給降噪的時(shí)間預(yù)算可能只有1毫秒左右。這意味著降噪的效果不可能達(dá)到完美,但是要盡可能滿足人眼的感知,看起來可信。
英偉達(dá)的實(shí)時(shí)降噪技術(shù)和 Open Image Denoiser 都可以在實(shí)時(shí)條件下達(dá)到不錯的降噪效果,在只輸入少量樣本的情況下,瞬間得到平滑的圖片:
Crytek Sponza 場景,使用 Intel? Open Image Denoiser 降噪, 16 spp, 輸入有噪點(diǎn)的 albedo 和法線信息
圖片來源:https://www.openimagedenoise.org/gallery.html
D5 GI 解析
簡單總結(jié)一下,渲染要處理好兩部分工作:采樣和降噪,了解這個(gè)前提以后,D5 渲染研發(fā)團(tuán)隊(duì)努力的目標(biāo)是比較明確的:
1.如何在圖片降噪前,在短時(shí)間內(nèi)得到更高質(zhì)量的樣本,特別是 Diffuse GI 樣本。
2.如何在不同的應(yīng)用場景(實(shí)時(shí)預(yù)覽、靜幀渲染、視頻幀序列渲染)使用最合適的降噪技術(shù)。
GI 采樣
相比于直接光照產(chǎn)生的陰影,間接光細(xì)節(jié)其實(shí)容易被觀眾所忽略,但是它對于場景畫面是否真實(shí)可信起到了至關(guān)重要的作用。GI 差,則畫面“假”,物體會有“漂浮感”,光感“不真實(shí)”。
高質(zhì)量 GI vs 低質(zhì)量 GI
在游戲等需要實(shí)時(shí)畫面的應(yīng)用中,傳統(tǒng)的 GI 方案是使用純光柵化,但渲染的效果不理想,對于靜態(tài)的場景,通常要預(yù)先烘焙 lightmap。對于動態(tài)場景,則會使用到基于光照探針的 GI、VXGI、預(yù)計(jì)算 GI 等,上述的方法要么漏光,要么需要使用者對場景做一些人工處理(比如繁瑣的展 UV、手動調(diào)整光照探針位置),或者預(yù)計(jì)算,總之需要制作者花費(fèi)很多時(shí)間和精力,才能得到一個(gè)可用的實(shí)時(shí)場景。
而 D5 想要的是無論是動態(tài)場景還是靜態(tài)場景,無需用戶做過多處理,模型直接導(dǎo)入即可渲染。故此,我們嘗試了有別于游戲?qū)崟r(shí)渲染的做法,混合了多種渲染技術(shù)的優(yōu)勢,針對直接光照,多光源,大場景光照等不同的應(yīng)用場景,分別做了優(yōu)化,緩解性能壓力,提升幀數(shù),消除漏光和噪點(diǎn)。
混合的 GI 策略
為了高效取得樣本,D5 GI 使用了混合的策略,結(jié)合使用了光線追蹤和基于光照探針的 GI,在準(zhǔn)確和效率之間尋找平衡點(diǎn)。
光照探針(Light Probe)是一種在實(shí)時(shí)渲染中使用得較多的 GI 采樣方法,它運(yùn)行效率高,而且能夠處理動態(tài)場景的 GI。在讀取場景的同時(shí),無數(shù)的光照探針已經(jīng)均勻地分布于整個(gè)場景的范圍內(nèi),隨著實(shí)時(shí)渲染的運(yùn)行,每個(gè)光照探針都會動態(tài)更新其采集到的光照信息,并且會根據(jù)其重要性,改變更新頻率,一些對場景影響不大的探針信息更新會變慢,以節(jié)約計(jì)算資源。
在純光照探針 GI 方案中,當(dāng)我們需要給模型上的某個(gè)點(diǎn)著色時(shí),只需要找到鄰近的幾個(gè)光照探針,插值求得光照信息即可。由于是插值取樣,這種 GI 計(jì)算結(jié)果往往體現(xiàn)為低頻的亮度變化,平滑無噪點(diǎn),在視覺上更容易被觀眾接受,相應(yīng)地,會缺乏細(xì)節(jié),而且會在模型邊角產(chǎn)生“漏光”“漏陰影”,這是因?yàn)樵诓逯等訒r(shí),讀取到了過亮或過暗的探針信息:
如上圖,墻角漏光是因?yàn)槿≈档搅耸彝獾奶结槪匕暹^暗是因?yàn)槿≈档搅说叵碌奶结槨?/p>
為了增加 GI 的細(xì)節(jié)和準(zhǔn)確性,D5渲染器在前幾次 GI 反彈時(shí)使用了光線追蹤采樣,隨后才會使用光照探針的信息,由于 Brute Force 反彈的準(zhǔn)確性,D5 有效地改善了純探針方案帶來的漏光現(xiàn)象:
這種混合計(jì)算 GI 的策略既保證采樣的速度,又保留了 GI 的細(xì)節(jié),其效果是非常優(yōu)秀的:
圖為視頻幀序列 GI 質(zhì)量對比,左側(cè)為路徑追蹤采樣(通常作為標(biāo)準(zhǔn)參照),右側(cè)為 D5 混合 GI 采樣策略的計(jì)算結(jié)果。
左右采樣時(shí)間相同,且左右均無降噪。
可見在相同采樣時(shí)間下,D5 GI 迅速取得了較為真實(shí)可信的效果。
2.1 版增加反彈次數(shù)
在最新的 2.1 版中,D5 渲染器進(jìn)一步增加了實(shí)時(shí)預(yù)覽以及渲染輸出中 Brute Force 光線反彈的次數(shù),這會有效提高 GI 的準(zhǔn)確性,對畫面的真實(shí)感有更進(jìn)一步的提升。
實(shí)時(shí)預(yù)覽,只有直接光
實(shí)時(shí)預(yù)覽,直接光+1次反彈(無降噪)
實(shí)時(shí)預(yù)覽,直接光+2次反彈(無降噪)
植被 GI 優(yōu)化
?
由于場景的光照探針數(shù)量是固定的,對于較大的場景,光照探針有可能過于稀疏,GI 的精度不足,這個(gè)問題在大場景的植被上會體現(xiàn)得比較明顯,植物影子可能會偏亮,顯出“漂浮感”。
針對這個(gè)問題,D5 專門對植物的 GI 采樣做了調(diào)整,消除漂浮感,讓影子更實(shí),植物更加有落地感。
2.1 版 GI 采樣算法優(yōu)化
D5 研發(fā)團(tuán)隊(duì)認(rèn)為先前版本實(shí)時(shí)渲染的體驗(yàn)依然不夠好,在一些復(fù)雜場景中噪點(diǎn)依然多,導(dǎo)致降噪后在屏幕上留下了抖動的斑點(diǎn)。基于此,我們研發(fā)了更高效率的算法,進(jìn)一步提升實(shí)時(shí)預(yù)覽的性能。
先前版本 D5 在發(fā)射線時(shí),受限于射線數(shù)量,首次反彈還是會有較大采樣方差,在某些區(qū)域內(nèi)可能只有少量采集到 GI,降噪后會看到斑塊,以下是 GI 計(jì)算較為困難的場景,只打開了一扇門,室內(nèi)完全由門口的反彈光照亮,先前D5實(shí)時(shí) GI 結(jié)果如下:
新版 D5 GI 使用了 RestirGI 復(fù)用樣本的思路,復(fù)用前幀和鄰近位置的樣本,盡量降低了一塊區(qū)域內(nèi)只有少量采到 GI 的問題,降低了采樣噪斑,在平坦區(qū)域效果尤其明顯。通過這樣的優(yōu)化,在 GI 采樣的效率方面,較之于先前版本有大約近四倍的效率提升。這意味著實(shí)時(shí)預(yù)覽效果更好,幀率更高,相同渲染時(shí)間下,圖片 GI 質(zhì)量更高。
D5 2.1 版 GI 算法改進(jìn)后:
以上兩圖均為 1 spp(1樣本每像素)
降噪
在不同的應(yīng)用場景中,D5 渲染器使用了不同的降噪技術(shù),以便在實(shí)時(shí)預(yù)覽,靜幀渲染和視頻渲染三種不同的情況下,達(dá)到最好的效果。
實(shí)時(shí)預(yù)覽
在高質(zhì)量的實(shí)時(shí)預(yù)覽中,D5 使用屏幕空間降噪(SSD),使用這種算法,每一幀 1920×1080 畫面的降噪開銷大約在 1-2ms 左右,保證了實(shí)時(shí)預(yù)覽的幀率,讓用戶在創(chuàng)作場景的過程中能有所見即所得的交互體驗(yàn),這是 D5 渲染器的核心價(jià)值所在。
實(shí)時(shí)預(yù)覽屏幕空間降噪效果
靜幀渲染
在輸出靜幀圖片的時(shí)候,D5 采用的是 Open Image Denoiser,在進(jìn)入降噪之前,每個(gè)像素已經(jīng)有上百個(gè)天光采樣和數(shù)十個(gè) GI 采樣,結(jié)合上文所述的 D5 GI 策略,得到了足夠高質(zhì)量的樣本信息,將這些信息輸入 AI 降噪器后,可以“瞬間”得到平滑的結(jié)果:
Open Image Denoise 降噪前 VS 降噪后
為了得到更好的降噪效果,Open Image Denoiser 還允許輸入 Albedo 通道和法線通道,這樣一來,就可以保證成果圖邊角和紋理的清晰。D5 使用了這個(gè)流程為靜幀圖片降噪。
Albedo
法線
上圖:輸入 Albedo 和法線信息后,AI 降噪結(jié)果細(xì)節(jié)更多,可見墻角的轉(zhuǎn)折和木紋理更加清晰了。
視頻幀序列渲染
Open Image Denoiser 缺乏前后幀的連貫性,這意味著在降噪視頻后會造成視頻畫面的抖動和閃爍。
而屏幕空間降噪(SSD)可能會丟失一些畫面的高頻細(xì)節(jié),為了緩解這個(gè)問題,我們使用了 World Space Denoiser(WSD),改變了降噪取樣的方式:
左圖紅圈為屏幕空間降噪采樣范圍示意,
右圖紅圈為世界空間降噪采樣范圍示意。
根據(jù)場景的空間信息,決定降噪的強(qiáng)度,就可以保留更多的高頻細(xì)節(jié):
更多相關(guān)內(nèi)容推薦
評論(0)