Unity-表面著色器和渲染路徑
在內(nèi)置渲染管線中,使用表面著色器時(shí),如何應(yīng)用光照以及使用著色器的哪些通道取決于使用的渲染路徑。著色器中的每個(gè)通道均通過(guò)通道標(biāo)簽來(lái)表達(dá)其光照類(lèi)型。
在前向渲染中,將使用?
ForwardBase
?和?ForwardAdd
?通道。在延遲著色中,將使用?
Deferred
?通道。在舊版延遲光照中,將使用?
PrepassBase
?和?PrepassFinal
?通道。在舊版頂點(diǎn)光照中,將使用?
Vertex
、VertexLMRGBM
?和?VertexLM
?通道。在上述任何情況中,要渲染陰影或深度紋理,都將使用?
ShadowCaster
?通道。
前向渲染路徑
ForwardBase
?通道可一次性渲染環(huán)境光、光照貼圖、主方向光和不重要的(頂點(diǎn)/SH)光源。ForwardAdd
?通道用于任何附加的每像素光源;針對(duì)此類(lèi)光源照亮的每個(gè)對(duì)象進(jìn)行一次調(diào)用。請(qǐng)參閱前向渲染以了解詳細(xì)信息。
如果使用前向渲染,但著色器沒(méi)有適合前向渲染的通道(即,ForwardBase
?和?ForwardAdd
?通道類(lèi)型均不存在),則會(huì)按照在頂點(diǎn)光照通道中的方式來(lái)渲染該對(duì)象,請(qǐng)參閱下文。
延遲著色路徑
Deferred
?通道將渲染光照需要的所有信息(在內(nèi)置著色器中:漫射顏色、鏡面反射顏色、平滑度、 世界空間法線、發(fā)光)。它還在發(fā)光通道中增加光照貼圖、反射探針和環(huán)境光照。有關(guān)詳細(xì)信息,請(qǐng)參閱延遲著色。
舊版延遲光照路徑
PrepassBase
?通道將渲染法線和鏡面反射指數(shù);PrepassFinal
?通道將通過(guò)組合紋理、光照和發(fā)光材質(zhì)屬性來(lái)渲染最終顏色。所有常規(guī)的場(chǎng)景內(nèi)光照都在屏幕空間中單獨(dú)完成。有關(guān)詳細(xì)信息,請(qǐng)參閱延遲光照。
舊版頂點(diǎn)光照渲染路徑
由于頂點(diǎn)光照最常用于不支持可編程著色器的平臺(tái),因此 Unity 無(wú)法在內(nèi)部創(chuàng)建多個(gè)著色器變體來(lái)處理光照貼圖與非光照貼圖的情況。所以,要處理光照貼圖對(duì)象和非光照貼圖對(duì)象,必須顯式編寫(xiě)多個(gè)通道。
Vertex
?通道用于非光照貼圖對(duì)象。所有光源均通過(guò)固定函數(shù) OpenGL/Direct3D 光照模型 (Blinn-Phong) 立即渲染VertexLMRGBM
?通道在光照貼圖為 RGBM 編碼(PC 和游戲主機(jī))時(shí)用于光照貼圖對(duì)象。情況下不會(huì)應(yīng)用實(shí)時(shí)光照;通道應(yīng)該將紋理與光照貼圖組合。VertexLM
?通道在光照貼圖為雙 LDR 編碼(移動(dòng)平臺(tái))時(shí)用于光照貼圖對(duì)象。情況下不會(huì)應(yīng)用實(shí)時(shí)光照;通道應(yīng)該將紋理與光照貼圖組合。