标签:
第7章 Forward渲染路径打开Lab_0下的场景,如图所示。这场景里有3个RenderingPath,分别为VertexLit,Forward以及Deferred的相机,而且场景里有足够丰富的平行光、点光源、Pixel光源、Vertex光源。
第一排小球应用的是Lab 0/ Shader下的材质FwdBase.shader,只是在LightMode= ForwardBase的Pass内输出一个(0, 0.5, 1.0, 1.0)的蓝色,第三排小球使用的是FwdAddX.shader,在LightMode = ForwardAdd的Pass内输出一个(1.0,0,0,1.0)的红色,第三排小球应用的是FwdAdd.shader,单单在LightMode = ForwardAdd的Pass内输出一个(1.0, 0.5, 0,1.0)的橘黄色。
Shader "Tut/Lighting/Forward/Lab_0/FwdBase" {
SubShader {
pass{//这个Pass只是被用来数出一个确定的颜色,用来检查这种类型的Pass在不同渲染路径下的表现
Tags{ "LightMode"="ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdbase
#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.5,1,1);//输入固定的蓝色
return o;
}
float4 frag(vertOut i):COLOR
{
return i.color;
}
ENDCG
}//end pass
}
}Shader "Tut/Lighting/Forward/Lab_0/FwdAdd" {
SubShader {
pass{
Tags{ "LightMode"="ForwardBase"}
CGPROGRAM
#pragma multi_compile_fwdbase
#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.5,1,1);//蓝色
return o;
}
float4 frag(vertOut i):COLOR
{
return i.color;
}
ENDCG
}//end pass
pass{
Tags{ "LightMode"="ForwardAdd"}
Blend One Zero//通过这种混合方式消去ForwardBase的影响
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(1,0.5,0,1);//输出固定的橘黄色
return o;
}
float4 frag(vertOut i):COLOR
{
return i.color;
}
ENDCG
}//end pass
}
} FwdAddX.shader的主要代码如下:
SubShader {
pass{
Tags{ "LightMode"="ForwardAdd"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//#pragma multi_compile_fwdadd
#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(1,0,0,1);//输出固定的红色
return o;
}
float4 frag(vertOut i):COLOR
{
return i.color;
}
ENDCG
}//end pass
}
}7.1.2 ForwardBase和ForwardAdd的表现untiy 3d ShaderLab_第7章_ Forward渲染路径_1_ForwardBase和ForwardAdd
标签:
原文地址:http://blog.csdn.net/heyuchang666/article/details/51314757