2015-12-16 50 views
3

我想完全跳過依賴於統一的檢查,比如這一個屬性的着色器的一通:(請記住,這不會編譯)我可以完全跳過ShaderLab着色器的通過嗎?

Shader "Name" 
{ 
Properties 
{ 
    [Toggle(STUFF_ON)] _StuffOn("Stuff On", Float) = 1 
} 
SubShader 
{ 
    #if STUFF_ON 
    Pass 
    { 
     [...] 
    } 
    #endif 
    Pass 
    { 
     [...] 
    } 
} 
} 

我已經找了切換(如如示例中所示),雜注shader_feature和multi_compile,但所有這些只會讓我使用指令內部的傳遞本身。

回答

0

我想你可能需要複製着色器,但沒有你想要跳過的通道。然後根據需要進行交換。

僅供參考這裏是你怎麼可以一個monobehaviour內換着色器的例子:

[RequireComponent(typeof(Renderer))] 
public class ShaderSwapExample : MonoBehaviour 
{ 

    void Start() 
    { 
     Shader TransDiffuseShader = Shader.Find("Transparent/Diffuse"); 

     if (TransDiffuseShader != null) 
     { 
      Renderer renderer = GetComponent<Renderer>(); 
      renderer.material.shader = TransDiffuseShader; 
     } 
    } 
} 

您可以找到有關交換着色器here

+0

我想這應該做更多的信息,儘管我一直在尋找對於那些並不意味着複製代碼的東西,因爲維護是一個問題。我發現的另一個解決方案是,如果禁用了該功能,只需將float4(0,0,0,0)渲染爲輸出。 – nokto

相關問題