【Unity Shaders】Transparency —— 使用渲染队列进行深度排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【Unity Shaders】Transparency —— 使用渲染队列进行深度排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2547字,纯文字阅读大概需要4分钟。
内容图文
本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。
这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。
========================================== 分割线 ==========================================
写在前面
准备工作
- 创建一个新的场景,以及两个球体,并且让它们排在一条线上。我们的目标是(没有蛀牙!),无论它们在3D空间中的实际坐标是什么,我们可以随你所欲地安排它们的绘制顺序,即谁在谁的上面。
- 为了可以看出修改绘制顺序发生的变化,我们还需要至少两个Shaders。所以,我们创建两个新的Shaders,并可以分别分别命名为Depth001和Depth002。
-
你的场景应该看起来和下面图片类似。
实现
-
首先我们需要生命这个对象将会被绘制到那个渲染队列中。为了做到这一点,我们需要修改Tags{}块,也就是在SubShader{}的内部:
Tags { "Queue"="Geometry-20" }
-
然后,我们需要告诉Unity,我们想要自己控制这个对象的渲染顺序,而不想写到深度缓存中。在上一步代码的下面添加如下代码:
ZWrite Off
- 保存,返回Unity查看。你将会发现其中一个球体出现在所有对象的后面,甚至当它的3D空间中的实际坐标在所有对象前面时也是一样。如下图所示:
Shader "Custom/Depth001" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Tags { "Queue"="Geometry-20" } ZWrite Off LOD 200 CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }
解释
渲染队列 | 渲染队列描述 | 渲染队列值 |
Background | 这个队列被最先渲染。它被用于skyboxes等。 | 1000 |
Geometry | 这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。 | 2000 |
AlphaTest | 通道检查的几何体使用该队列。它和Geometry队列不同,对于在所有立体物体绘制后渲染的通道检查的对象,它更有效。 | 2450 |
Transparent | 该渲染队列在Geometry和AlphaTest队列后被渲染。任何通道混合的(也就是说,那些不写入深度缓存的Shaders)对象使用该队列,例如玻璃和粒子效果。 | 3000 |
Overlay | 该渲染队列是为覆盖物效果服务的。任何最后被渲染的对象使用该队列,例如镜头光晕。 | 4000 |
原文:http://blog.csdn.net/candycat1992/article/details/37345251
内容总结
以上是互联网集市为您收集整理的【Unity Shaders】Transparency —— 使用渲染队列进行深度排序全部内容,希望文章能够帮你解决【Unity Shaders】Transparency —— 使用渲染队列进行深度排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。