您的位置:首页 > 移动开发 > Unity3D

Unity Shader 光照模式

2016-06-08 22:30 381 查看
Shader "Custom/Deferred_Forward_Vertex" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Blend One One
//.1
pass{
Tags{ "LightMode"="Vertex"}
Blend One Zero
CGPROGRAM
#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
//.2
pass{
Tags{ "LightMode"="ForwardBase"}
Blend One One
CGPROGRAM
#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
//.3
CGPROGRAM
#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块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: