[UnityShader基础]02.深度测试 & 深度写入
参考链接:
https://blog.csdn.net/v_xchen_v/article/details/79380222
前面说到了渲染队列,对于两个不透明的物体A和B,它们处于同一个渲染队列中。假如它们一前一后地摆放着,当先渲染A再渲染B,那么B显示在前面;当先渲染B再渲染A,那么A显示在前面。因此,单靠渲染队列还是无法很好解决物体间的遮挡关系,这时就需要利用深度这个东西了。
1.深度
指该像素距离摄像机的距离。离摄像机越远,深度越大。
2.深度缓冲 & 颜色缓冲
深度缓冲中存储着每个像素对应的深度值。
颜色缓冲中存储着每个像素对应的颜色值。
3.深度测试
将像素的深度与深度缓冲的深度进行比较。如果通过了深度测试,就有机会去改写深度缓冲的对应值;否则该像素会被舍弃。
语法如下:
ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always
默认值为LEqual,小于等于。即表示如果像素的深度小于等于深度缓冲的深度,则通过了深度测试。
4.深度写入
是否要将像素的深度写入到深度缓冲中。前提是通过了深度测试。
语法如下:
ZWrite On | Off
默认值为On,即写入深度缓冲。
5.总结
a.根据这两个默认值,可以知道,离摄像机近的会遮挡住离摄像机远的,因此也就解决了最开始说的两个物体的遮挡问题:假如A在前B在后,当先渲染A再渲染B,在渲染B时B不能通过深度测试从而被舍弃;当先渲染B再渲染A,在渲染A时A通过深度测试从而覆盖了B。因此对于不透明物体间的遮挡,通过这两个默认值就可以得到很好的处理。
b.当深度测试不通过时,该像素会被舍弃,深度缓冲和颜色缓冲无变化;否则,该像素的颜色值会覆盖掉颜色缓冲的颜色值,然后根据深度写入来决定是否覆盖掉深度缓冲中的深度值。
[UnityShader基础]02.深度测试 & 深度写入的更多相关文章
- Unity ZTest深度测试 & ZWrite深度写入
Shader深度渲染队列Queue预定义值:Background(1000).Geometry(2000).AlphaTest(2450).Transparent(3000).Overlay(4000 ...
- 【转】Unity ZTest 深度测试 & ZWrite 深度写入
原文连接:https://www.cnblogs.com/ljx12138/p/5341381.html 参考另一篇写的比较好的:Unity Shader中的 ZTest & ZWrite 初 ...
- Unity ZTest 深度测试 & ZWrite 深度写入
初学Shader,一开始对于渲染队列,ZTest 和 ZWrite一头雾水,经过多方查阅和实验,有了一些自己的理解.发此文与初学Shader的朋友分享,也算是为自己做个笔记.不对或不足之处欢迎指正. ...
- [UnityShader基础]03.透明度混合
如果要渲染半透明物体,那么就需要用到透明度混合. 需要注意的有这几点: 1.设置标签:Tags { "Queue"="Transparent" "Ig ...
- [UnityShader基础]05.模板测试
参考链接: https://blog.csdn.net/u011047171/article/details/46928463 https://blog.csdn.net/JohnBlu/articl ...
- javascript基础02
javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...
- javaSE基础02
javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...
- java基础学习05(面向对象基础02)
面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...
- [UnityShader基础]04.ColorMask
语法如下: ColorMask RGB | A | 0 | 其他R,G,B,A的组合 ColorMask R,意思是输出颜色中只有R通道会被写入 ColorMask 0,意思是不会输出任何颜色 默认值 ...
随机推荐
- kettle判断是否是数据首行(第一行)
可以用组件:分析查询(Analytic Query) 后面可以通过判断pre_id 是否为空值(null)判断.
- 【转】前端Web开发MVC模式-入门示例
前端Web开发MVC模式-入门示例 MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:cont ...
- SystemParametersinfo 用法
var BmpPath: PChar; begin BmpPath := 'C:\Temp\Test.bmp'; SystemParametersInfo(SPI_SETDESKWALLP ...
- oracle数据库使用小结
select * from r_patient a where a.birthdate= to_date('1953-03-01','yyyy-mm-dd');select * from r_pati ...
- 火狐对SVG的兼容性
使用d3在SVG中画流程图,需要获取流程图的宽,高,来给流程图居中布局.在Chrome中 正常显示,可是在火狐中svg流程图在容器内偏移,查看很不方便.在网上百度了,找不到火狐对d3的兼容性,所以就自 ...
- WPF系列学习
1:WPF最小化到系统托盘 2:WPF程序单例运行 3:WPF中三种异常捕获:UI线程异常.非UI线程异常.Task线程异常 在窗体放一个按钮在单击事件执行如下代码来模拟. private void ...
- VBScript Scripting Techniques: File Open Dialog http://www.robvanderwoude.com/vbstech_ui_fileopen.php
I accept cookies This website uses cookies to ensure you get the best experience on our website More ...
- vue之后台管理系统遇到的几个痛点
杂七杂八的一些日总结 1.vue(最)合理的处理表单提交和初始化表单数据显示的方式 对于表单处理,繁琐的一个地方就是当出现多个下拉选择的表单框的时候,我们需要进行多次将选择的文本去换对应的id值的操作 ...
- python调用有道翻译api实现翻译
通过调用有道翻译的api,实现中译英.其他语言译中文 代码: # coding=utf-8 import urllib import urllib2 import json import time i ...
- spring4.0之八:Groovy DSL
4.0的一个重要特征就是完全支持Groovy,Groovy是Spring主导的一门基于JVM的脚本语言(动态语言).在spring 2.x,脚本语言通过 Java scripting engine在S ...