失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > unity-shader之混合模式 面剔除 Alpha测试 深度测试 通道遮罩

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

时间:2022-08-06 20:50:59

相关推荐

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 100Pass{//修改混合颜色模式的地方是在这里,将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 texturefixed4 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 RColor(1.0,1.0,1.0,1.0)}}}

场景:

使用并运行:

只输出一个通道值

如果觉得《unity-shader之混合模式 面剔除 Alpha测试 深度测试 通道遮罩》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。