unity-shader之混合模式、面剔除、Alpha測試、深度測試、通道遮罩

混合模式

我們着色完成之後,需要把顏色的混合輸出到幀緩衝區裏面,這個時候就可能涉及到源與目標,比如說半透明,原來是一個顏色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測試,默認是關閉的
此測試是阻止片元被寫到屏幕中的最後的機會,決定最終渲染的顏色的透明度與一個設定的固定值進行比較,符合條件則通過測試,進行片元的繪製,反之則丟棄此片元

比較測試紙的模式

  1. Greater 是>
  2. GEqual 是>=
  3. Less 是 <
  4. LEqual 是 <=
  5. Equal ==
  6. NotEqual !=
  7. Always 永遠渲染
  8. 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)
			}

		
    }
    
}

場景:
在這裏插入圖片描述
使用並運行:
在這裏插入圖片描述
只輸出一個通道值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章