第一個Shader程序
shader 很復雜,我學習的過程中也確實感受到了,需要會數(shù)學、圖形學、編程語法等等知識。不如讓我們直接看看 Shader 到底是什么?直接應用起來?;蛟S沒有那么復雜。
1、在場景中新建一個正方體,如下圖

2、在 project 面板下新建一個材質,起名為Test,如下圖

把新建的材質應用到正方體上

3、創(chuàng)建Shader文件,如下圖

把新創(chuàng)建的 Shader 文件應用到上面新建的材質上,在 Shader 的下拉框上,選擇 Unilt,再選擇我們新建 TestShader 。


4、這里我們先刪除 scene 中的 Plane,因為影響我們看最后的效果

5、查看我們新建的TestShader的代碼
這個初始著色器看上去不是那么簡單!但不要擔心, 我們將逐步介紹每個部分。
1、名稱定義
Shader "Unlit/TestShader"
對文件名的定義,"/"代表查找的路徑。如上面我們需要在材質的 Shader 的屬性下選擇Unlit–》TestShader來找到我們的 Shader 文件
2、屬性
Properties
Properties 代碼塊包含著色器變量 (紋理、顏色等),這些變量將保存為材質的一部分, 并顯示在材質檢視面板中。在我們的無光照著色器模板中, 聲明了單個紋理屬性。
3、SubShader
SubShader
一個著色器 (Shader) 可以包含一個或多個子著色器 (SubShader),主要 用于實現(xiàn)不同 GPU 功能的著色器。我們這里只包含一個著色器。在普通情況下,shader會從上到下,并根據(jù)以下優(yōu)先級選取合適的的子著色器。第一個被選到的SubShader將會直接用于渲染,而其他則被忽略。
4、Pass
Pass
每個子著色器由可以由多個Pass組成,每個Pass執(zhí)行 頂點和片元代碼。當執(zhí)行子著色器內的渲染方案時,所有的Pass會被依次執(zhí)行,這也意味著,Pass越多,計算復雜度則越高,性能開銷也更大。
5、#pragma
? ? ?
在代碼片段的開頭,可使用 #pragma 語句的形式提供編譯指令。有些類似于C語言里的函數(shù)聲明。
通過渲染管線我們知道頂點著色器、片元著色器是可編程的。而這里頂點著色器對應的是vert,片元著色器對應的是frag。通過這兩部分編程我們來修改圖像的最終展示。
6、CGPROGRAM …ENDCG
CGPROGRAM ..ENDCG
在CGPROGRAM …ENDCG關鍵字內,包含頂點和片元著色器中的 HLSL 代碼 部分
這里面有兩個關鍵函數(shù)vert、frag。上面我們定義了兩個函數(shù)
編寫一個更簡單的著色器

這里我們可以修改顏色,來讓正方體呈現(xiàn)不同的顏色。
這里我們沒有細摳 Shader 每一部分的代碼,而是實現(xiàn)我們的第一個 Shader,很簡單。至于每一部分詳細的介紹,一篇文章無法介紹全。可以看看我別的文章,爭取多更新一些文章。