Unity Shader 光照模式

来源:互联网 发布:淘宝商品类目id统计表 编辑:程序博客网 时间:2024/05/20 15:42
Shader "Custom/Deferred_Forward_Vertex" {    Properties {    _MainTex ("Base (RGB)", 2D) = "white" {}    }SubShader {Blend One One//.1pass{Tags{ "LightMode"="Vertex"}Blend One ZeroCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct vertOut{float4 pos:SV_POSITION;float4 color:COLOR;};vertOut vert(appdata_base v){vertOut o;o.pos=mul(UNITY_MATRIX_MVP,v.vertex);o.color=float4(0,0,1,1);return o;}float4 frag(vertOut i):COLOR{return i.color;}ENDCG    }//end pass//.2pass{Tags{ "LightMode"="ForwardBase"}Blend One OneCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct vertOut{float4 pos:SV_POSITION;float4 color:COLOR;};vertOut vert(appdata_base v){vertOut o;o.pos=mul(UNITY_MATRIX_MVP,v.vertex);o.color=float4(0,1,0,1);return o;}float4 frag(vertOut i):COLOR{return i.color;}ENDCG}//end pass//.3CGPROGRAM#pragma surface surf MyDeferred half4 LightingMyDeferred_PrePass (SurfaceOutput s, half4 light) { half4 c;            c.rgb = s.Albedo;            c.a = s.Alpha;            return c;}struct Input {float2 uv_MainTex;};sampler2D _MainTex;void surf (Input IN, inout SurfaceOutput o) {o.Albedo=float3(1,0,0);}ENDCG}FallBack "Diffuse"}

定义三种光照模式,根据相机的Render Mode选择对应的光照模式看看输出 什么颜色


相机的Render Mode=Vertex时 ,只有"LightMode"="Vertex" 的pass块才执行,没有这个块其他的不执行 

相机的Render Mode=Forward时 ,只有"LightMode"="ForwardBase" 的pass块优先执行,没有这个块执行 "LightMode"="Vertex" 的pass块,两者都没有其他的不执行 

相机的Render Mode=Deferred时 ,只有"LightMode"="MyDeferred" 的pass块优先执行,没有这个块执行"LightMode"="ForwardBase" 的pass块,没有执行"LightMode"="Vertex"的pass块。

0 0
原创粉丝点击