Shader multi_compile

本文介绍如何在Unity中使用Shader的多编译指令(#pragma multi_compile)来实现不同的渲染效果。通过一个具体的Cube示例,展示了如何根据条件变量选择性地启用或禁用特定的编译宏,从而实现绿色或蓝色的渲染输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、新建一个Shader和一个Material


  1. Shader "Custom/Multi_Compile" {
  2. SubShader {
  3. Pass {
  4. CGPROGRAM
  5. #pragma vertex vert
  6. #pragma fragment frag
  7. #pragma multi_compile MY_multi_1 MY_multi_2 //告诉Unity编译两个不同版本的Shader
  8. #include "UnityCG.cginc"
  9. struct vertOut {
  10. float4 pos:SV_POSITION;
  11. };
  12. vertOut vert(appdata_base v)
  13. {
  14. vertOut o;
  15. o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
  16. return o;
  17. }
  18. float4 frag(vertOut i):COLOR
  19. {
  20. float4 c = float4(0, 0, 0, 0);
  21. #ifdef MY_multi_1
  22. c = float4(0, 1, 0, 0);//输出绿色
  23. #endif
  24. #ifdef MY_multi_2
  25. c = float4(0, 0, 1, 0);//输出蓝色
  26. #endif
  27. return c;
  28. }
  29. ENDCG
  30. }
  31. }
  32. FallBack "Diffuse"
  33. }

二、新建个Cube, 挂上脚本Multi_Compile.cs


  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class Multi_Compile : MonoBehaviour {
  5.  
  6. public bool multi_1;
  7. // Use this for initialization
  8. void Start () {
  9. if (multi_1) {
  10. Shader.EnableKeyword ("MY_multi_1");
  11. Shader.DisableKeyword ("MY_multi_2");
  12. } else {
  13. Shader.EnableKeyword ("MY_multi_2");
  14. Shader.DisableKeyword ("MY_multi_1");
  15. }
  16. }
  17. }
运行效果,当multi_1=true时:

multi_true.png

运行效果,当multi_1=false时:

multi_false.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值