Unity學(xué)習(xí)筆記 Vol.107 Unity 實時光追(十一)- 應(yīng)用光追功能到現(xiàn)有HDRP項目中
記筆記

通過前面的10個節(jié),我們一起系統(tǒng)的學(xué)習(xí)了,如何使用unit HDRP中提供的各種光追功能,讓它們?yōu)閳鼍疤砑痈嗟募?xì)節(jié),這些光追功能包括環(huán)境光遮蔽、屏幕空間反射、屏幕空間全局光、屏幕空間陰影、次表面散射、遞歸式渲染等

在這節(jié)中,我將會使用來自Unity資源商店的ArchVizPro系列場景模型為大家演示,如何為一個基于HDRP高清渲染管線的場景,增加更多的光追細(xì)節(jié),比如讓物體表面呈現(xiàn)更精確的反射。

這里需要聲明一點,我并不是鼓勵大家去購買這些模型,我使用ArchVizPro的目的是想讓大家知道,即使在一個像ArchVizPro這么高質(zhì)量的實時渲染場景中,如果使用光追功能,還可以為它帶來很大的畫面細(xì)節(jié)提升。
如果大家沒有這個場景的話也沒有關(guān)系,我在這里講內(nèi)容,完全可以應(yīng)用到其他任何HDRP項目中去。

我們先來了解一下這個ArchVizPro的HDRP場景,首先打開HDRP?Render Pipeline wizard窗口。我們可以看到,當(dāng)前項目的設(shè)置是針對普通HDRP的,稍后我們會在這里切換到HDRP + DXR設(shè)置,讓項目支持光追功能。

在Hierarchy層級窗口展開3D Light里面包含了場景中的部分光源和Light Probe光照探針,這里有部分光源被設(shè)置成了實時的,也有設(shè)置為純烘焙的。

我們知道,純烘焙所得的光照信息會被保存在光照貼圖中。

在運(yùn)行時,這些參與烘焙的光源其實是不起作用的,而設(shè)置成Realty實時類型的光源,則只能為場景提供直接光照信息,無法提供間接光照,當(dāng)前場景中的另外一些光源則與模型關(guān)聯(lián)在了一起。

我們可以通過Window =>? Rendering菜單中的Light Explore窗口找到場景中的所有光源
以及其他相關(guān)的物體,比如Reflection Probes,?Volume,Light Probes等。

接著我們展開3D?Reflection,這里面包含了所有的反射探針,這些反射探針為場景提供了,基于Cubemap立方體貼圖的反射效果,雖然效果不錯,但是并不精確。


最后我們看一下3d HDRP下的Volume設(shè)置,Scene Setting是一個全局模式的Volume里面的設(shè)置可以影響整個場景,這里也有全局模式的后處理Volume,以及針對場景中不同部分的
后處理Volume。
之后,我們將會創(chuàng)建跟光追功能相關(guān)的Volume,當(dāng)然你也可以把光追功能添加到新Settings,這個Volume中,我們單獨(dú)放是為了便于管理這些光追設(shè)置。


接著我們要為這個場景設(shè)置光追功能,首先我們要在HDRP配置界面把普通HDRP轉(zhuǎn)換成HDRP + DXR

然后我們要通過HDRP配置文件界面,啟用相關(guān)的光追功能


比如RayTracing、屏幕空間反射、屏幕空間全局光照、屏幕空間陰影等

接著通過HDRP,默認(rèn)設(shè)置界面中的默認(rèn)幀設(shè)置界面,啟用相關(guān)的光追功能。


然后,檢查Scene窗口中的攝像機(jī)是否開啟了 TAA

并檢查是否開啟了always refresh選項,上述步驟在第2個節(jié)中,曾有過詳細(xì)的講解,這里不再贅述。

接著我們來檢查當(dāng)前項目中,需要參與光追計算的物體上的材質(zhì),確保這些材質(zhì)啟用了相關(guān)的光追功能,比如SSR/SSGI

透明物體上的SSR,Recursive Rendering 3S效果正確設(shè)置了Diffusion Profile。

這里請注意,我們可以選擇性的為場景中的物體打開材質(zhì)上的這些功能,如果某個物體無需參與,相關(guān)光追功能的計算,那我們就不要在材質(zhì)上使用這些功能


最后我要在層級窗口的3D HDRP層級下創(chuàng)建一個Game?object,命名為Ray Tracing?Settings,然后在上面添加一個Volume組件,在這個Volume上,我們可以使用默認(rèn)的Global全局模式,設(shè)置完畢。

我們現(xiàn)在可以在Volume上添加想要使用的光追功能了,第一個我要添加的是環(huán)境光遮蔽,我們可以看一下Volume上環(huán)境光遮蔽的參數(shù),因為環(huán)境光遮蔽屬于補(bǔ)充陰影的效果,所以我們一般不會把這里的Intensity強(qiáng)度數(shù)值設(shè)置的很大。




我們來看一下客廳中一些物體上的環(huán)境光遮蔽效果,比如在沙發(fā)邊上的燈罩的內(nèi)側(cè),樹葉的下方,沙發(fā)側(cè)邊的下方。與光柵化算法相比,光追版本的環(huán)境光遮蔽可以為我們提供更好的遮蔽效果。

第2個我們要添加的是屏幕空間反射效果,當(dāng)前場景中,已經(jīng)在關(guān)鍵位置放置了球形反射探針和平面反射探針。

不過要為場景中多個鏡子提供準(zhǔn)確的反射信息,我們需要用到屏幕空間反射,光追版本的屏幕空間反射可以為這些鏡子,提供非常精確的反射信息。

我們來看一下屏幕空間反射在Volume上的具體參數(shù),目前我們使用的是Performance性能模式。


我們來看一下這面鏡子中的反射,這是我們不使用屏幕空間反射時,僅僅依靠來自反射探針的反射信息所能達(dá)到的效果,可以看到,目前鏡子中并沒有對面放著的花盆,以及里面的植物,而且還顯示了并不在鏡子面前的茶幾,這顯然是不對的。

之所以在鏡子中顯示出了茶幾,是因為鏡子使用的反射探針,是位于客廳中央的反射探針

當(dāng)我們啟用了光追版本的屏幕空間反射效果以后,可以看到鏡子中,準(zhǔn)確的顯示了對面的植物客廳里。

另外一個例子是茶幾上的盤子和書,下面沒有真實的反射信息

啟用了光追版本的屏幕空間反射以后,書本和盆子,精確的反射在了玻璃桌面上。

我們再來看一下,浴室水龍頭表面上的反射,其實對于這個水龍頭表面來說,他并不需要參與屏幕空間反射的計算,因為水龍頭比較舊,表面已經(jīng)不再像新的水龍頭那么光滑,除非你要給他特寫鏡頭,否則用反射探針上的反射信息已經(jīng)綽綽有余了。

因此,我們可以去水龍頭的材質(zhì)中把Receive?SSR/SSGI選項進(jìn)行禁用。

不過對于后面的鏡子來說,只是使用反射探針上的反射信息,顯然是不夠的,你甚至都看不到鏡子中的水龍頭。

因此,我們可以把鏡子材質(zhì)上的SSR功能啟用。

但是鏡子中的水龍頭和其他,反射的物體表面看上去很白,這個感覺很奇怪啊。
這時我們需要來看一下,當(dāng)前場景中的Light Cluster的情況,如果大家已經(jīng)忘記了Light Cluster是拿來做什么用的,可以回去看看之前Light Cluster相關(guān)的內(nèi)容。

首先我們要為場景添加Light Cluster重載,然后在Debug窗口的Lighting界面,把FullScreen Debug?mode設(shè)置為Light Cluster。


我們可以看到,目前的Light Cluster的設(shè)置是有問題的,整個Light Cluster的幾乎都是紅色的,這意味著,每個單元格中的光照數(shù)量,已經(jīng)超過了我們在HDRP配置文件中的設(shè)置從而也導(dǎo)致了,剛才鏡子中的水龍頭和有些物體表面變成了白色。

為了解決這個問題,我們可以打開Project Settings界面,然后在Quality下面的HDRP設(shè)置界面,選擇HD?Render Pipeline Asset這個HDRP配置文件,然后在Lighting設(shè)置的部分

找到Lights里面的Maximum?Lights per Cell (Ray Tracing)參數(shù),將這里的數(shù)值從8增加到15

然后再次在Debug中切換到Light Cluster的顯示模式,可以看到只有部分地方還是紅色。

我們回到Project Settings界面,將Maximum?Lights per Cell?(Ray Tracing)這個參數(shù)再次調(diào)整設(shè)置為20,然后打開Light Cluster的Debug顯示模式,這次可以看到所有的單元格都是綠色的了。

切換回正常顯示模式,可以看到鏡子中的水龍頭顯示正常了。

我們也可以把SSR的重載參數(shù),它的模式設(shè)置為Quality質(zhì)量模式,這樣我們就可以通過調(diào)高Simple Count的采樣值和Bounce Count的反彈次數(shù),來提高反射的質(zhì)量,不過提高這兩個參數(shù),在獲得更好效果的同時,我們是需要付出代價的,那就是幀率的降低,這是目前無法避免的一個問題。
不過對于制作競爭或者影視動畫來說,這是可以忍受的,畢竟獲得了更好的效果,但是按照目前的硬件條件對于游戲開發(fā)者來說就不那么友好了。

最后我們要在場景中,嘗試使用屏幕空間全局光,在Volume上添加SSGI重載,然后我們到廚房看看,我們在廚房這個部分,看到地板上的地毯是黑色的,選中地毯材質(zhì),可以發(fā)現(xiàn)材質(zhì)上沒有打開Receive?SSR SSGI選項

把它勾選啟用以后,就可以獲得正確的光追,屏幕空間反射和全局光了。
在之前的屏幕空間全局光章節(jié)中提到過,在使用默認(rèn)光柵話版本的全局光時,HDRP 會把這些屏幕空間全局光信息,疊加在烘焙所得的光照貼圖上。但是如果我們啟用光追版本的全局光,HDRP就會禁用烘焙所得的光照貼圖,這時場景中的全局光將會全部來自光追算法的屏幕空間全局光。

如果我們把模式設(shè)置為Performance性能模式,即使我們把質(zhì)量設(shè)置為High,整個畫面質(zhì)量也沒有提升多少。

我們可以切換到Quality質(zhì)量模式,然后調(diào)整Simple Count產(chǎn)量值為2,Bounce Count的反彈次數(shù)為3,Clamp Value設(shè)置為最大值10,可用于提升畫面的整體亮度。

稍微等一會,可以看到整個室內(nèi)場景可以獲得,類似光照烘焙所能獲得的全局光。
不過幀率很低,這也是目前使用,屏幕空間全局光的一個問題,但是屏幕空間全局光也有烘焙所得的全局光所不具備的優(yōu)勢。

我們來看一下廚房兩個朝外的窗戶,他們上面各有一個面積光源,我們可以把一個光源的顏色改成紅色,另一個改成藍(lán)色

可以看到,在不啟用光追版本的,屏幕空間全局光時,場景中沒有帶顏色的全局光,我們必須通過,光照烘焙才能獲得這類全局光,但是因為光照烘焙只能針對靜態(tài)物體,所以如果是針對動態(tài)物體,通常我們只能通過不那么精確的Light Probe光照探針來提供這些全局光信息。

現(xiàn)在有了光追版本的全局光照,我們可以看到整個場景馬上獲得了準(zhǔn)確的帶顏色的全局光
而且紅色和藍(lán)色的光會發(fā)生自然的混合。

這可以同時作用于動態(tài)和靜態(tài)物體,我們一步到走廊,走廊兩側(cè)的墻上有6組燈,我們隨便選擇一組燈看一下設(shè)置,在這個燈下面有4個光源,兩個用于純光照烘焙的兩個實時的,但是兩個實時光源,目前設(shè)置成不影響漫反射,只影響高光

然后4個光源都設(shè)置成參與光追計算

不過目前用于純光照烘焙的燈光,其實是不參與光追計算的,所以我們可以把它們都禁用

我們只需要實時光源參與光追計算即可,但是我們要打開Affect defuse影響漫反射這個選項,讓光照影響漫反射。

啟用光追版本的屏幕空間全局光

這樣就可以看到走廊比之前亮了,我們再轉(zhuǎn)到客廳,看一下屏幕空間全局光的效果。

我們可以看到通過屏幕空間全局光,我們可以獲得近似于通過光照烘焙,所得到的全局光效果,只不過目前他的速度相對較慢,而且在低采樣值的設(shè)置下,我們可以看到,墻上的跟物體上的噪點較多。