1、Unity提供的內置文件和變量
我們知道一個簡單的頂點/片元著色器很簡單。復雜的著色器可能需要我們處理法線,光照,陰影等。為了方便開發者的編碼,Unity提供了很多內置文件,包含了提前定義的函數、變量和宏等。下面我們逐一講解。
內置包含文件:類似于C++的include。在Unity中,包含文件的后綴是.cginc。這樣我們就可以使用該包含文件為我們提供的變量和函數。寫法如下:
CGPROGRAM
//...
#include "UnityCG.cginc"
//...
EndCG
CGIncludes文件夾中包含的是內置的包含文件。我們以后需要常去查閱一些內置函數的寫法,就在這里找對應的包含文件。
2.CGIncludes中主要的包含文件及其用處
文件名 | 概要 |
---|---|
UnityCG.cginc | 我們常用的結構體和函數基本都在里面 |
UnityShaderVariables.cginc | 即使我們沒用#include包含進來,它們也會自動包含進來,例如UnityShaderVariables.cginc里的UNITY_MATRIX_MVP,我們可以直接用 |
HLSLSupport.cginc | 即使我們沒用#include包含進來,它們也會自動包含進來 |
Lighting.cginc | 包含了內置的一些光照模型 ,編寫表面著色器會被自動包含進來 |
3.UnityCG.cginc是最常接觸的包含文件。我們常用的結構體和函數基本都在里面。例如,我們可以直接使用其中預定義的結構體作為頂點著色器的輸入和輸出,如下:
名稱 | 描述 | 包含的信息 |
---|---|---|
appdata_base | 可用于頂點著色器輸入 | 頂點位置,法線,第一組紋理坐標 |
appdata_tan | 可用于頂點著色器輸入 | 頂點位置,法線,切線,第一組紋理坐標 |
appdata_full | 可用于頂點著色器輸入 | 頂點位置,法線,切線,四組紋理坐標 |
v2f_img | 可用于頂點著色器輸出 | 裁剪空間中的位置,紋理坐標 |
appdata_img | 可用于頂點著色器輸入 | 頂點位置,第一組紋理坐標 |