ShaderLab: SubShader
每個shader在Unity中都包含了一系列subshaders。當Unity要顯示一個mesh,他將找shader來使用,並選擇第一個可以在用戶顯卡上運行的subshader。
Syntax
Subshader { [Tags] [CommonState] Passdef [Passdef ...] }
定義subshade包含可選的tags,common state和Pass定義列表
Details
一個subshader定義一系列rendering passes 並且選項中設置的任何狀態對於所有Pass都是相同的。此外, subshader的Tags 可以被設置.
當Unity選擇一個subshader來渲染,它定義的每個Pass都會渲染物體一次(可能更多是由於光的影響)。 因爲對象的每個渲染都是一個昂貴的操作,所以你希望在shader中定義儘可能少的Pass。當然,在有時在某些顯卡上,需要的效果可能不能通過一個Pass實現,那麼你就需要定義多個Pass。
每個定義的Pass可以是 一個 regular Pass, 一個 Use Pass 或 一個 Grab Pass.
任何在Pass定義中允許的聲明,都可以出現先Subshader代碼塊中。這樣所有的Pass都會使用這個“共享”的狀態。
Example
// ...
SubShader {
Pass {
Lighting Off
SetTexture [_MainTex] {}
}
}
// ...
這個subshader定義了一個Pass,關閉了光照只是用一個名爲_MainTex的紋理顯示mesh。