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 ZeroPass{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 ZeroBlendOp MinPass{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}}
}