Unity #pragma multi_compile说明
Posted nafio
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity #pragma multi_compile说明相关的知识,希望对你有一定的参考价值。
https://blog.csdn.net/ak47007tiger/article/details/100007655
multi_compile
- 作用
- 根据编译选项产生shader变体
- 避免分支语句导致的性能下降
- 主要用于在代码中选择shader变体
- Unity在打包时会把所有multi_compile产生的shader变体都打进包中
Shader "DC/Shader/ShaderLab/MultiCompile" { Properties { _MainTex ("Texture", 2D) = "white" {} [KeywordEnum(R,G,B)] _CL("ColorSelect", Float) = 0 } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile _CL_R _CL_G _CL_B //使用 __ 减少一个编译选项,编译选项最多256个 #pragma multi_compile __ DB_ON #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { #if DB_ON return fixed4(1,1,0,1); #elif _CL_R return fixed4(1,0,0,1); #elif _CL_G return fixed4(0,1,0,1); #elif _CL_B return fixed4(0,0,1,1); #else fixed4 col = tex2D(_MainTex, i.uv); return col; #endif } ENDCG } } }
using UnityEngine; namespace DC { public class MultiCompile : MonoBehaviour { public Material mat; public void OnEnable() { mat.EnableKeyword("DB_ON"); // Shader.EnableKeyword("ON"); } public void OnDisable() { mat.DisableKeyword("DB_ON"); // Shader.DisableKeyword("DB_ON"); } } }
以上是关于Unity #pragma multi_compile说明的主要内容,如果未能解决你的问题,请参考以下文章
如何用unity3D shader修改渲染设置 使空缺贴图显示透明而不是白色
Unity Shaders and Effects Cookbook (6-1) 使用 alpha 参数的 半透明着色器
#pragma 标记的意义是啥?为啥我们需要#pragma 标记?