我可以完全跳过ShaderLab着色器的传递吗?

时间:2015-12-16 15:25:27

标签: c# unity3d shader

我想完全跳过着色器的传递,具体取决于Unity中检查器的属性,例如:(请记住这不会编译)

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

我已经查找过Toggles(如示例所示),pragma shader_feature和multi_compile,但所有这些只会让我使用里面的传递本身。

1 个答案:

答案 0 :(得分:0)

我认为您可能需要复制着色器,但没有要跳过的传递。然后根据需要交换。

此处的参考是一个如何在单行中交换着色器的示例:

[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

的更多信息