1.渲染流程:Blend 决定了要渲染的像素和Gbuffer里像素到底怎么取舍
2.Blend 公式:
3.factor可以取值的内容有:
One 1
Zero :0
SrcColor : 要渲染的像素
SrcAlpha : 要渲染像素的 a 通道。
DstColor : 已经渲染在gbuffer 里面的像素
DstAlpha : 已经渲染在gbuffer 里面的像素 a 通道
OneMinusSrcColor : 1- 将要渲染的像素
OneMinusSrcAlpha : 1-将要渲染的像素 a 通道
OneMinusDstColor : 1-已经渲染在gbuffer 里面的像素
OneMinusDstAlpha: 1-已经渲染在gbuffer 里面的像素 a 通道。
4.实例演示:
Shader "Hidden/Blend"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
// No culling or depth
//Cull Off ZWrite Off ZTest Always
//将要渲染的像素*将要渲染的像素的a通道 + (1-将要渲染的像素的 a通道) * Gbuffer里面的像素值
Blend SrcAlpha OneMinusSrcAlpha
//Blend SrcColor Zero
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
// just invert the colors
//col.rgb = 1 - col.rgb;
return col;
}
ENDCG
}
}
}
5.BlendOp指令:
BlendOp : 指定 将要渲染像素 和 gbuffer 里面的像素 逻辑运算 。
当这个指令 存在 ,Blend 这个指令 就会被忽略 。
Shader "Hidden/Blend"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
// No culling or depth
//Cull Off ZWrite Off ZTest Always
//将要渲染的像素*将要渲染的像素的a通道 + (1-将要渲染的像素的 a通道) * Gbuffer里面的像素值
Blend SrcAlpha OneMinusSrcAlpha
//Blend SrcColor Zero
BlendOp Min
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
// just invert the colors
//col.rgb = 1 - col.rgb;
return col;
}
ENDCG
}
}
}