混合模式
我們着色完成之後,需要把顏色的混合輸出到幀緩衝區裏面,這個時候就可能涉及到源與目標,比如說半透明,原來是一個顏色Alpha通道的意思是我這個目標能夠透過多少,也就是說我們本來的顏色只有RGB是沒有Alpha通道的,Alpha類似於描述疊加顏色的時候要怎麼疊加過去,所以Alpha通道
又叫做透明度,一旦有了透明度,就涉及到了原顏色與目標顏色的混合
下圖是混合命令。
注意:混合命令要放置在通道Pass裏面
示例:
場景
代碼:
Shader "Custom/Mix_Shader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color",Color) = (1.0,0.0,0.0,1.0)
}
SubShader
{
Tags { "RenderType"="Opaque" "Queue" = "Transparent+1"}
LOD 100
Pass
{
//修改混合顏色模式的地方是在這裏,將Zero修改成其他的混合模式
Blend Zero OneMinusSrcAlpha //在未開啓混合模式的時候,不管怎樣修改透明度都沒有反應
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;
};
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Color;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = _Color;
return col;
}
ENDCG
}
}
}
開啓混合模式之後
Alpha測試
可以通過AlphaTerst off/on 來進行開啓或者關閉Alpha測試,默認是關閉的
此測試是阻止片元被寫到屏幕中的最後的機會,決定最終渲染的顏色的透明度與一個設定的固定值進行比較,符合條件則通過測試,進行片元的繪製,反之則丟棄此片元
比較測試紙的模式
- Greater 是>
- GEqual 是>=
- Less 是 <
- LEqual 是 <=
- Equal ==
- NotEqual !=
- Always 永遠渲染
- Never 永不渲染
想要開啓或者關閉Alpha測試只需要在Pass通道里面,CGPROGRAM外面添加相應的代碼即可(由於添加的代碼並不是標準的CG語言,所以需要添加到外面)
面剔除
與Alpha測試的位置一樣。
深度測試
深度測試與上一篇博客的渲染隊列相似,這裏不再說明,語法與前兩者一樣
通道遮罩
1.通道遮罩是開發冉淵指定渲染結果輸出的通道,而不是正常情況下的RGBA四個通道
2.可選的是RGBA的任意組合以及0,如果爲0意味着不會寫入任何隊列
3.ColorMask RG…ColorMask 0
用法
Shader "Custom/Pass_Shader"
{
SubShader
{
Pass
{
ColorMask R
Color(1.0,1.0,1.0,1.0)
}
}
}
場景:
使用並運行:
只輸出一個通道值