keyword multi_compile

we know that one shader which is decorated by the #pragma multi_compile will be compiled to more than one shader.
let me take an example.

Shader "Course/MultiCompileShader"
{
    Properties
    {
        _firstTexture("fist texture", 2D)="white"{} 
        _secondTexture("second texture", 2D)="black"{}
    }
    SubShader
    {
        CGPROGRAM
        #pragma surface surf Lambert 
        #pragma multi_compile FIRST_SHADER SECOND_SHADER
        struct Input
        {
            float2 uv_firstTexture;
            float2 uv_secondTexture;
        };

        sampler2D _firstTexture;
        sampler2D _secondTexture;

        void surf(Input IN, inout SurfaceOutput o)
        {
            #ifdef FIRST_SHADER
                half4 tex = tex2D(_firstTexture, IN.uv_firstTexture);
                o.Albedo += tex.rgb; 
            #endif
            #ifdef SECOND_SHADER
                half4 tex = tex2D(_secondTexture, IN.uv_secondTexture);
                o.Albedo += tex.rgb;
            #endif
        }
        ENDCG
    }
}

from the above block code. we know that we prepare two pictures that are used to paste the surface of the object.
then we will write a C# script to control the key word FIRST_SHADER or SECOND_SHADER.
C# code like this:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour 
{
    public void Update()
    {
        if(Input.GetKeyDown(KeyCode.A))
        {
            Shader.EnableKeyword("FIRST_SHADER");
            Shader.DisableKeyword("SECOND_SHADER");
        }
        else if(Input.GetKeyDown(KeyCode.B))
        {
            Shader.EnableKeyword("SECOND_SHADER");
            Shader.DisableKeyword("FIRST_SHADER");
        }
    }
}

in the update function, if u press A, we will use the first picture to render the object. if we press B we will use second picture to render the object. so we now understand the key word multi_compile and the Shader.EnableKeyWorld and Shader.DisableKeyword function.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值