Shader深度渲染队列Queue预定义值:Background(1000)、Geometry(2000)、AlphaTest(2450)、Transparent(3000)、Overlay(4000)。

渲染优先顺序: Queue值越小越先渲染,后渲染的物体会覆盖先渲染的物体。

测试:我想让远处的红色方块遮挡住近处的蓝色方块,即让蓝色的先渲染,红色的后渲染,我将红块的Queue设置为Transparent ,蓝块的Queue值设置为Transparent -1,按照上面的渲染优先顺序,值越小越先渲染,按道理红块后渲染应该覆盖在蓝块前面对吧,结果却不是这样的,蓝块依旧在红块前面。

这是为什么呢?原因在下面两条指令,shader代码中虽然没有定义,但是默认存在的。

ZTest:深度测试。(LEqua小于等于、Less小于、Greater大于、Equal等于 , NotEqual不等于)

ZWrite:深度写入。(On打开、Off关闭)。

 系统中存在一个颜色缓冲区和一个深度缓冲区,分别存储颜色值和深度值,来决定画面上应该显示什么颜色。深度值是物体在世界空间中距离摄像机的远近,距离越近深度值越小,反之越大。

上面的测试中,蓝色方块比红色方块近,那么蓝色方块的深度值就比红色方块小。假设蓝块的深度值为1,红块深度值为2,例子中蓝块优先渲染,系统就先将蓝色值存入颜色缓冲区,将深度值1存入了深度缓冲区。

接下来渲染红块,系统会将红块的深度值和缓冲区的深度值对比(这个过程就是深度测试),由于ZTest的深度测试方式是Lequal小于等于,即深度值小于1才会通过测试,如果通过了测试,且ZWrite处于On状态,

该颜色的深度值就会替换深度缓冲区中的值,颜色值也会替换颜色缓冲区中的值,从而显示新的颜色。很显然,2 > 1,深度测试并不能通过,红色也就不能显示在蓝色的前面。

如果我们硬要远处的红块遮挡近处的蓝块,很显然,我们应该关闭深度写入ZWrite或者关闭深入测试ZTest,能得到我们想要的结果,如下:

Unity ZTest深度测试 & ZWrite深度写入的更多相关文章

  1. 【转】Unity ZTest 深度测试 & ZWrite 深度写入

    原文连接:https://www.cnblogs.com/ljx12138/p/5341381.html 参考另一篇写的比较好的:Unity Shader中的 ZTest & ZWrite 初 ...

  2. Unity ZTest 深度测试 & ZWrite 深度写入

    初学Shader,一开始对于渲染队列,ZTest 和 ZWrite一头雾水,经过多方查阅和实验,有了一些自己的理解.发此文与初学Shader的朋友分享,也算是为自己做个笔记.不对或不足之处欢迎指正. ...

  3. Unity Shader-渲染队列,ZTest,ZWrite,Early-Z

    在渲染阶段,引擎所做的工作是把所有场景中的对象按照一定的策略(顺序)进行渲染.最早的是画家算法,顾名思义,就是像画家画画一样,先画后面的物体,如果前面还有物体,那么就用前面的物体把物体覆盖掉,不过这种 ...

  4. [UnityShader基础]02.深度测试 & 深度写入

    参考链接: https://blog.csdn.net/v_xchen_v/article/details/79380222 前面说到了渲染队列,对于两个不透明的物体A和B,它们处于同一个渲染队列中. ...

  5. Unity编辑器 - 资源修改立即写入磁盘AssetDataBase.SaveAssets()

    Unity编辑器 - 资源修改立即写入磁盘AssetDataBase.SaveAssets() 在编写编辑器时,如果需要修改Unity序列化资源(如Prefab,美术资源,ScriptableObje ...

  6. Unity加载模块深度解析(Shader)

    作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二 ...

  7. Unity加载模块深度解析(网格篇)

    在上一篇 加载模块深度解析(一)中,我们重点讨论了纹理资源的加载性能.这次,我们再来为你揭开其他主流资源的加载效率. 这是侑虎科技第53篇原创文章,欢迎转发分享,未经作者授权请勿转载.同时如果您有任何 ...

  8. Unity加载模块深度解析(纹理篇)

    在游戏和VR项目的研发过程中,加载模块所带来的效率开销和内存占用(即“加载效率”.“场景切换速度”等)经常是开发团队非常头疼的问题,它不仅包括资源的加载耗时,同时也包含场景物件的实例化和资源卸载等.在 ...

  9. Unity --- 如何降低UI的填充率

    1.首先简单介绍一下什么叫填充率: Fill Rate(填充率)是指显卡每帧或者说每秒能够渲染的像素数.在每帧绘制中,如果一个像素被反复绘制的次数越多,那么它占用的资源也必然更多.目前在移动设备上,F ...

随机推荐

  1. python如何与以太坊交互并将区块链信息写入SQLite

    关于区块链介绍性的研讨会通常以易于理解的点对点网络和银行分类账这类故事开头,然后直接跳到编写智能合约,这显得非常突兀.因此,想象自己走进丛林,想象以太坊区块链是一个你即将研究的奇怪生物.今天我们将观察 ...

  2. sprint2(第六天)

    昨天休息一天,今天继续做任务. 燃尽图:

  3. BugPhobia开发篇章:绩效管理的层次优化

    0x00 :用0x00去书写一段故事 If you weeped for the missing sunset, you would miss all the shining stars 绩效管理,恐 ...

  4. C# Linq找不到行或已更改

    前段时间工作中的一个新需求,有机会用到了Linq to SQL.使用后的第一感觉,就是方便很多,也为整个项目节约了一大把的开发时间,甚至代码量也少了很多.不过在程序的实际运行中,始终会遇到一些莫名其妙 ...

  5. gogoing软件NABCD

    N,need 需求:gogoing项目目前打算做得是一个基于石家庄铁道大学在校大学生对于短期节假日出行旅游的指南.最关键的定义为“穷游”.“穷”则体现在以小的花销去实现最完美的旅游方式.我们的gogo ...

  6. ASP.NET中实现封装与策略模式

    首先把运算方法封装起来,这样在网页界面中直接就可以调用了,不过是换张脸而已! using System; using System.Collections.Generic; using System. ...

  7. 文献:Technology-related Disasters:A Survey toward Disaster-resilient Software Defined Networks

    DISASTER的定义和影响(本文中) 定义范围: 自然灾害,比如洪水.地震等造成一定范围类的节点故障: 恶意攻击,DDOS攻击或者电磁脉冲攻击造成节点故障: 技术相关的问题,配置错误或者误操作等: ...

  8. mysql hibernate 关于默认值

    字段的默认值 写 NOT NULL DEFAULT 0 等等 一直不行, 算了  干脆在创建的时候 在代码set好了 版权声明:本文为博主原创文章,未经博主允许不得转载.

  9. 【贪心算法】POJ-3262

    一.题目 Description Farmer John went to cut some wood and left N (2 ≤ N ≤ 100,000) cows eating the gras ...

  10. Keil C51 的printf

    转自:http://blog.csdn.net/zhanglianpin/article/details/44779009 在Keil C51 中使用printf ,首先需要重新实现 putchar( ...