万网网站后台管理,兰溪优秀高端网站设计地址,现有的网站开发技术,红色基调的网站1.是什么
①从渲染管线出发 ②书面上理解
所谓深度测试#xff0c;就是针对当前对象在屏幕上#xff08;更准确的说是frame buffer#xff09;对应的像素点#xff0c;讲对象自身的深度值与当前该像素点缓存的深度值进行比较#xff0c;如果通过了#xff0c;本对象再改…1.是什么
①从渲染管线出发 ②书面上理解
所谓深度测试就是针对当前对象在屏幕上更准确的说是frame buffer对应的像素点讲对象自身的深度值与当前该像素点缓存的深度值进行比较如果通过了本对象再改像素点才会将颜色写入颜色缓冲区否则不会写入颜色缓冲区
③逻辑上理解 ④从发展上理解 2.深度缓冲区Z-Buffer
深度缓冲就像颜色缓冲储存所有的片段颜色视觉输出一样在每个片段中储存了信息并且通常和颜色缓冲有着一样的宽度和高度。深度缓冲是由窗口系统自动创建的它会以16、24或者32位float的形式存储它的深度值。在大部分的系统中深度缓冲的精度都是24位的。
Z-Buffer中存储的是当前的深度信息对于每个像素存储一个深度值。
通过Z Write和Z Test来调用用Z-Buffer实现想要的渲染结果。
3.Z Write 和 Z Test
深度写入如包括两种状态ZWrite On与ZWrite Off
当我们开启深度写入的时候物体被渲染时针对物体在屏幕更准确的说是frame buffer上每个像素的深度都写入到深度缓冲区反之如果是ZWrite Off那么物体的深度就不会写入深度缓冲区。但是物体是否会写入深度除了ZWrite这个状态外更重要的是是需要深度测试通过也就是ZTest通过如果ZTest都没通过那么也就不会写入深度了
Z Test比较操作 默认ZWrite On和ZTest Lequal深度缓存一开始为无穷大。
Z Test分为通过和不通过两种情况ZWrite分为开启和关闭两种情况的话一共就是四种情况具体见下图。
4.深度测试流程 5.渲染队列
Unity中的集中内置的渲染队列按照渲染顺序从先到后进行排序队列越小的越先渲染队列数越大的越后渲染。 Unity中设置渲染队列Tags{QueueTransparent}默认是Geometry。 不透明物体的渲染顺序从前往后透明物体的渲染顺序从后往前更严谨说是不透明物体渲染队列数值从小到大透明物体渲染顺序队列数值从大到小
Unity中Inspector shader面板中查看队列 6.简述Early-Z技术
传统渲染中Z Test其实是在Blending阶段这时候进行深度测试所有对象的像素着色器都会计算一遍没有什么性能提升仅仅是为了得出正确的遮挡结果会造成大量的无用计算因为每个像素电商肯定重叠了很多计算。因此现代GPU中运用了Early-Z的技术在Vertex阶段和Fragment阶段之间光栅化之后fragment之前进行一次深度测试如果深度测试失败就不必进行fragment阶段的计算了因此在性能上会有很大的提升。但是最终的Z Test仍然需要进行以确保最终的遮挡关系结果正确。前面的一次主要是Z-Cull为了裁剪已达到优化的目的后一次主要是Z-Check为了检查如下图 7.深度值 为什么深度缓冲区使用非线性深度
参考链接深度测试 - LearnOpenGL-CN
8.深度测试总结
使用深度缓冲区最重要的两个值当前深度换重置Z BufferValue和深度参考值Reference Value并通过比较操作获取立项渲染效果。Unity中的渲染顺序西安许安然不透明物体顺序是从前到后在渲染透明物体顺序是从后到前。通过Z Write和Z Test组合使用控制半透明物体的渲染。引入Early-Z技术后的深度测试相关的渲染流程。深度缓冲区古中存储的深度值为0到1范围的浮点值切为非线性。
9.深度测试扩展
基于深度的着色湖水渲染阴影忒图ShadowMap透明物体、粒子渲染透视X-Ray效果切边效果等等 参考链接
Unity Shader-渲染队列ZTestZWriteEarly-Z
learnopengl 深度测试
unity-shader深度测试-透视xray
《Unity ShaderLab开发实战详解》
《Unity Shader 入门精要》
Toon Water Shader 视频代码 Z-Test