unity-shader之混合模式、面剔除、Alpha测试、深度测试、通道遮罩
发布日期:2021-05-07 17:59:10
浏览次数:16
分类:技术文章
本文共 2119 字,大约阅读时间需要 7 分钟。
混合模式
我们着色完成之后,需要把颜色的混合输出到帧缓冲区里面,这个时候就可能涉及到源与目标,比如说半透明,原来是一个颜色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测试的位置一样。深度测试
深度测试与上一篇博客的渲染队列相似,这里不再说明,语法与前两者一样通道遮罩
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) } } }
场景:
使用并运行: 只输出一个通道值转载地址:https://blog.csdn.net/lfanyize/article/details/104124572 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月04日 05时48分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HashMap 为什么线程不安全?
2019-04-27
厉害了,Servlet3的异步处理机制
2019-04-27
Static 关键字的 5 种用法,你会几种?
2019-04-27
你还在百度这些代码吗?
2019-04-27
为什么 Java 不支持类多重继承?
2019-04-27
微服务设计 10 大反模式和陷阱!
2019-04-27
如何优雅地终止一个线程?
2019-04-27
Java 程序员必须掌握的 5 个注解!
2019-04-27
Intellij IDEA Debug 调试技巧
2019-04-27
Tomcat 连接数与线程池详解
2019-04-27
漫画:HTTP 协议极简教程,傻瓜都能看懂!
2019-04-27
java高级应用:线程池全面解析
2019-04-27
Spring Boot 打包插件,真是太有用了!
2019-04-27
7 个棘手的 JavaScript 面试题!
2019-04-27
世纪之战:Python和Java,到底学哪个更好?
2019-04-27
String 也能做性能优化,我只能说牛逼!
2019-04-27
重磅!!Redis 6.0.0 已发布,有史以来改变最大的版本
2019-04-27
IntelliJ IDEA 内存优化最佳实践!
2019-04-27
Spring Boot Dubbo 应用启停源码分析
2019-04-27
LinkedHashMap 源码分析,底层竟这么简单!
2019-04-27