1、Shader
Shader(著色器)實(shí)際上就是一小段程序,它負(fù)責(zé)將輸入的Mesh(網(wǎng)格)以指定的方式和輸入的貼圖或者顏色等組合作用,然后輸出。
Unity Shader 不等于真正的Shader,Unity Shader 實(shí)際上是指Shaderlab 文件,在硬盤上以.shader 為后綴的一種文件。
2、傳統(tǒng) Shader 與 Unity Shader相比
傳統(tǒng)Shader:
僅可以編寫特定類型的Shader,如頂點(diǎn)著色器顏色、片元著色器等
無(wú)法設(shè)一些渲染設(shè)置,如是否開(kāi)啟混合、深度測(cè)試
需要設(shè)置著色器輸入和輸出,并注意對(duì)應(yīng)關(guān)系
Unity Shader:
可以在同一文件內(nèi)同時(shí)包含著色器和片元著色器的代碼
通過(guò)一行特定指令就可以完成設(shè)置
需要在特定語(yǔ)句塊中聲明一些屬性,也可以依靠材質(zhì)修改這些屬性,數(shù)據(jù)(頂點(diǎn)位置、 uv坐標(biāo)、法線),也可以直接訪問(wèn)的方法
3、Shader Lab
Shader Lab 作為一種專門Unity Shader 服務(wù)語(yǔ)言,我們可以編寫Shader Lab ?來(lái)生成Unity Shader。

4、著色器語(yǔ)言,作為中間語(yǔ)言(Intermediate Language),即交給CPU 可以理解的語(yǔ)言。
Cg(C for Graphic)
HLSL(High Level Shading Language)
GLSL(OpenGL Shading Language)
Cg/HLSL 實(shí)際是同一種語(yǔ)言(Microsoft 和NVIDIA合作)
ShaderLab 內(nèi)部可以嵌套 Cg/HLSL 語(yǔ)言編寫著色器代碼,需要嵌套在命令CGPROGRAM 和ENDCG 之間,代碼如下:
Pass
{
//Pass 的標(biāo)簽和狀態(tài)設(shè)置
CGPROGRAM
//編譯指令
#pragma vertex vert
#pragma fragment frag
//CG 代碼
ENDCG
//其他設(shè)置
}