Shader簡(jiǎn)介
????著色器(Shader)在Unity中是一個(gè)腳本,它會(huì)應(yīng)用材質(zhì)中所包含的屬性用來(lái)將3D物體的mesh渲染成屏幕上顯示的2D圖像。Shander的代碼和對(duì)應(yīng)的渲染管線是相關(guān)的。

????在Unity中,具體使用的shader依賴于所選擇的渲染管線。?
Shader的類(lèi)型
????Shader大體上可以粗略的分成兩種操作類(lèi)型:片元著色(Fragment Shading)和頂點(diǎn)著色(Vertex Shading)。
????片元著色,也稱為像素著色,用于進(jìn)行逐像素計(jì)算顏色的操作。頂點(diǎn)著色操作mesh的頂點(diǎn),典型地操作是改變頂點(diǎn)的位置使得表面發(fā)生變化。
????執(zhí)行這種兩種操作的著色器通常被稱為片元著色器和頂點(diǎn)著色器。
基于物理的著色器和渲染(Physically based shaders & rendering)
????隨著計(jì)算機(jī)性能變強(qiáng)以及渲染技術(shù)的進(jìn)化,基于物理的渲染PBR(Physically Based Rendering)的使用變得更加廣泛。PBR模擬了真實(shí)世界的物理和光線,用來(lái)實(shí)現(xiàn)具有真實(shí)感的陰影、反射 、環(huán)境光等。
????PBR中光源和表面的屬性保持分離。光源通過(guò)它們的亮度、顏色和范圍進(jìn)行定義。表面使用材質(zhì)來(lái)定義,通過(guò)顏色,反射性以及其它真實(shí)世界中光在表面上如何表現(xiàn)的特性來(lái)描述。
????下圖顯示了場(chǎng)景中不同光照下相同的表面所呈現(xiàn)的樣子,這些表面的屬性在不同的圖像中是一樣的,只有光源的顏色和方向在發(fā)生變化。



????當(dāng)使用non-PBR(non-Physically Based Rendering)時(shí),所得到的顏色、陰影和反射效果要么是近似的結(jié)果,要么就沒(méi)有進(jìn)行渲染。對(duì)于某個(gè)non-PBR著色器來(lái)說(shuō),一個(gè)紅色的材質(zhì)可能渲染為平坦的紅色或者帶有簡(jiǎn)單的反射和陰影。Non-PBR通常看起來(lái)不如PBR真實(shí),但它可以做出期望的風(fēng)格化效果。比如卡通著色器(Toon shaders)會(huì)讓一個(gè)3D場(chǎng)景中的表面看起來(lái)有2D卡通效果。如下圖的緋紅結(jié)系的效果:

URP(Universal Rendering Pipeline)中的shader
????一個(gè)項(xiàng)目中,shader必須和所使用的渲染管線兼容。Unity的URP工程中,會(huì)看到有許多shader的名字中帶有Lit或Unlit。Lit shaders會(huì)響應(yīng)場(chǎng)景中的光源,Unlit shaders則不會(huì)。Unlit shaders在某些藝術(shù)風(fēng)格中非常有用,也能通過(guò)不使用光源來(lái)優(yōu)化項(xiàng)目使其更高效。