Unity 有三種編寫shader的方式:
surface shaders,
vertex and fragment shaders,
fixed function shaders.編程
Unity建議從ShaderLab語法開始學習shader。Fixed function shader 只能被ShaderLab編寫。(可是 vertex and fragment shader 和surface shader 是不限於shaderlab的,可使用Cg/HLSL/GLSL)。編輯器
Shader "MyShader" { Properties { _MyTexture ("My Texture", 2D) = "white" { } //其餘屬性 } SubShader { // - surface shader or // - vertex and program shader or // - fixed function shader } SubShader { // 一個更簡單的shader,能夠運行在更弱的硬件上 } Fallback "Legacy Shaders/VertexLit" [CustomEditor] }
首先是一些屬性定義,屬性名是前面帶下劃線的,顯示在編輯器的名字是後面字符串中的。
接下來是一個或者多個的子着色器,只有一個能被執行,哪個子着色器被使用是由運行的平臺所決定的。子着色器是代碼的主體,每個子着色器中包含一個或者多個的Pass。
最後指定一個回滾,用來處理全部Subshader都不能運行的狀況(好比目標設備實在太老,全部Subshader中都有其不支持的特性)。
CustomEditor是定製編輯器。學習
須要提早說明的是,在實際進行 surface shader 的開發時,咱們將直接在Subshader這個層次上寫代碼,系統將把咱們的代碼編譯成若干個合適的Pass。spa