URP渲染管線光照核心機(jī)制剖析
1: URP渲染管線光源
UPR渲染管線重新定義了光源組件, 看下相比向前渲染管線攝像機(jī)機(jī)制的核心變化

URP平行光組件

普通平行光組件
由上圖對(duì)比我們發(fā)現(xiàn)了UPR 平行光源組件相比向前渲染管線,多了Bias設(shè)置,少了Cookie光暈這些。Bias設(shè)置的為”Use Pipeline Settings”,我們?nèi)ipeline Settings里面去看下與光相關(guān)Bias設(shè)置

URP平行光組件
先來講URP光源的幾個(gè)核心變化:
(1) 采用主光源MainLight+附加光源 Additional Lights模式,代替向前渲染管線里面的Import光源與No Import光源。主光源只能是平行太陽光,Additional Light可以是其它類型的光源。游戲引擎把所有主光源的顏色值疊加好以后,傳遞給URP的Shader,把所有Additional Lights的光源數(shù)據(jù)傳遞給URP的Shader, URP Shader 獲取光源數(shù)據(jù),用來做光照計(jì)算,來著色, 而向前渲染管線是每個(gè)重要光源經(jīng)過一次pass計(jì)算,來疊加到最后得顏色,這樣做得有點(diǎn)是可以任意數(shù)目的光源與光照計(jì)算,缺點(diǎn)是多次繪制性能受影響。相反URP 是一次pass, 處理多個(gè)光源, 但是支持的光源的數(shù)目不是任意的,當(dāng)然對(duì)于做手機(jī)游戲來說這點(diǎn)可以打破,正是打破了這一點(diǎn),使得很多手機(jī)游戲開始用URP了。Additional Light的數(shù)目URP做了”Per Object Limit”限制

URP光源的數(shù)目限制
(2) 傳統(tǒng)渲染管線,采用是逐頂點(diǎn)光照,還是逐像素光照,都是由Shader的實(shí)現(xiàn)來決定,而URP把這個(gè)開關(guān)放到了光源這邊,這樣方便我們進(jìn)行響應(yīng)的配置與調(diào)整。
URP光源的逐頂點(diǎn)+逐像素配置

(3)?URP?和普通模式向前渲染管線一樣,可以支持靜態(tài)光照與烘培,用法一致。
(4)?URP?渲染管線的光照策略,在有限光源數(shù)目前提下相比傳統(tǒng)的獲得更好的性能和更容易配置的選項(xiàng)。
…
還有一些差別,后續(xù)還可以結(jié)合URP Shader講解來進(jìn)一步體會(huì)。
2: URP Shader中如何獲取URP渲染管線中的光源
光照上色的本質(zhì)就是,渲染Shader拿到光照的數(shù)據(jù),根據(jù)光照計(jì)算,最后決定片元的顏色,上色到屏幕中。URP渲染管線中游戲引擎通過CPU把光源數(shù)據(jù)傳遞給GPU,GPU就可以獲取到,在URP渲染管線中,Shader庫把它封裝成了特定的Shader API函數(shù),如下:
URP Shader獲取主光源數(shù)據(jù):GetMainLight
URP Shader 獲取附加光源數(shù)據(jù):?GetAdditionalLightsCount/ GetAdditionalLight
這里截圖了URP PBR Shader中的代碼如何獲取光源數(shù)據(jù),一次性完成光照計(jì)算
