当前位置:   article > 正文

unity-shader之混合模式、面剔除、Alpha测试、深度测试、通道遮罩_unity shader alpha

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
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

开启混合模式之后
在这里插入图片描述

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)
			}

		
    }
    
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

场景:
在这里插入图片描述
使用并运行:
在这里插入图片描述
只输出一个通道值

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/96778
推荐阅读
相关标签
  

闽ICP备14008679号