首页/新闻资讯/正文详情

[TA] 百人计划-图形3.1-深度与模版测试笔记

发布时间:2026/9/23 9:53:37 来源:云帆数科 栏目:资讯中心
[TA] 百人计划-图形3.1-深度与模版测试笔记
目录一、 模版测试1.1 模版测试的原理1.2 模版测试核心配置1.3 应用二、深度测试2.1 深度测试原理2.2 基础概念2.2.1 Early-Z2.2.2 ZTest比较操作2.2.3 深度缓冲区2.2.4 ZWrite深度写入2.2.5 渲染队列2.3 深度值特性2.4 深度测试核心配置2.5 深度测试应用2.6 总结参考资料一、 模版测试1.1 模版测试的原理模版缓冲区每个像素存储1个8位无符号整数范围0-255 默认值0原理当前片元参考值与模版缓冲区指定值比较通过保留片元否则丢弃1输出原本颜色0不输出从渲染管线理解图中流程均在frag之后frag阶段高度可配置但无法编程stencil test位置alpha测试之后深度测试之前其他阶段说明Pixel OwnerShip Test像素权测试在scene、game视图里的可视像素Scissor Test裁剪测试自定义渲染区域Alpha Clip按照阈值剔除半透明区域即alpha低于如0.7都被剔除常用场景传送门里面是另一个房间场景也可以用另一个相机拍RT参考游戏《笼中窥梦》1.2 模版测试核心配置配置项功能说明Ref参考值自定义0-255的数值用于和模板缓冲区值做比较Read Mask读掩码与参考值、模板缓冲区值做按位与运算后再进行比较Write Mask写掩码控制模板缓冲区可写入的位范围Comp比较操作可选Never、Less、LEqual、Equal、NotEqual、Greater、GEqual、Always共8种规则Pass模板测试通过时对模板缓冲区执行的操作Fail模板测试失败时对模板缓冲区执行的操作ZFail模板测试通过但深度测试失败时对模板缓冲区执行的操作Color Mask颜色遮罩设为0时不输出任何颜色仅用于更新模板缓冲区1.3 应用思路外界、边界、内界即渲染物体-渲染mask-渲染被mask遮罩的物体3d卡牌效果卡牌呈现纵深3d感随视角变化卡牌内也有视差变化原来的完整场景将卡牌边框外的东西都剔除多面盒子描边反射阴影体蒙版二、深度测试2.1 深度测试原理原理通过深度缓冲区判断片元的前后遮挡关系针对当前对象在屏幕上(更准确的说是frame buffer)对应的像素点将像素自身深度值与当前像素点缓冲的像素点比较若通过本对象的像素点才将颜色写入颜色缓冲否则不写入。位置模版测试之后、alpha混合之前深度缓冲区存储每个像素深度值精度为24位高端显卡支持32位深度测试的发展早期算法画家算法从远往近层层覆盖会产生大量overdraw与现在相反被淘汰、Z-Buffer算法通过深度缓冲区存储像素深度值自动比较前后关系当前主流方案-控制Z-Buffer对深度值的存储ZTest、ZWrite-控制不同类型物体的渲染顺序渲染队列透明、不透明物体-减少overdrawEarly-Z、Z-cull、Z-check2.2 基础概念2.2.1 Early-Z定义frag前进行深度测试直接丢弃未通过测试的面片降低无效片元在frag的计算位置光栅化后、frag之前注意有时候会用到两次深度测试Early-Z一次、FS处理后ZTest再进行一次起到检查作用前次Z-Cull后次Z-Check2.2.2 ZTest比较操作ZTest 状态描述Greater深度大于当前缓存则通过LEqual深度小于等于当前缓存则通过Less深度小于当前缓存则通过GEqual深度大于等于当前缓存则通过Equal深度等于当前缓存则通过NotEqual深度不等于当前缓存则通过AlwaysOff深度不论如何都通过Never深度不论如何都不通过2.2.3 深度缓冲区定义类似颜色缓冲(储存所有的像素颜色每个像素存储信息。跟颜色缓冲一样有宽度和高度。深度缓冲是由窗口系统自动创信息它会以16、24或32位float的形式诸存它的深度值。在大部分的系统中深度缓冲的精度都是24位z-buffer里存储当前深度信息2.2.4 ZWrite深度写入深度写入包括两种状态ZWrite On与ZWrite Off先ZTest、再ZWriteZTest读深度缓冲拿当前片元 Z 和缓冲里已存 ZZWrite写深度缓冲把本片元的 Z 存进去只有测试成功才会执行写操作ZTest分为通过和不通过两种情况ZWrite分为开启和关闭两种情况的话一共就是四种情况序号状态组合结果1深度测试通过深度写入开启写入深度缓冲区写入颜色缓冲区2深度测试通过深度写入关闭不写深度缓冲区写入颜色缓冲区3深度测试失败不写深度缓冲区不写颜色缓冲区渲染呈现ZWrite On渲染队列AlwaysLEqual越靠前越先渲染ZWrite Off不写入深度被后来者覆盖除非渲染队列更大←——————相机前方—————— 相机位置 —————相机后方————→ -10 -5 0 5 10 方块B 方块A 相机-1,1-0,1 方块a更近覆盖bpsshader中默认状态是ZTest LEqual、ZWrite On2.2.5 渲染队列内置渲染队列介绍队列数越小越先渲染队列数越大越后渲染。队列名称队列号描述Background1000最早被渲染的物体的队列Geometry2000不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染也是Unity Shader中默认的渲染队列AlphaTest2450有透明通道需要进行Alpha Test的物体的队列比在Geometry中更有效Transparent3000半透物体的渲染队列。一般是不写深度的物体Alpha Blend等的在该队列渲染Overlay4000最后被渲染的物体的队列一般是覆盖效果比如镜头光晕屏幕贴片之类的设置位置Shader代码中设置Tags { Queue Transparent }默认是GeometryShader / Material 的 Inspector面板可以查看Render Queue相关属性在此处设置会覆盖shader里的设置物体渲染顺序规则不透明物体的渲染顺序从前往后透明物体的渲染顺序从后往前OverDraw2.3 深度值特性深度缓冲区存储0-1之间非线性缓冲值因为在适应透视相机的投影阶段viewport视椎体-前后裁剪面一致大小的面此时深度值映射变为非线性近处深度值间间隔宽越远越密集想象人眼看通向远处的树利用有限的缓冲区精度近平面分配高精度、远平面分配低精度近清晰、远模糊ps时刻结合生活中真实的视觉效果理解空间变化模型空间无深度-世界空间线性,z-视空间线性获取场景内线性深度就是转到这一步,z-裁剪空间线性MPerspectivezA·z B-NDC非线性z/w-屏幕空间深度冲突Z-Fighting两个平面极近平行时深度缓冲区精度不足导致导致前后像素频繁切换造成画面频闪解决. 物理上拉开物体之间距离调远摄像机近平面提高近处深度精度使用更高精度的32位缓冲区2.4 深度测试核心配置核心配置两项(1)Unity内置渲染队列队列号越小越先渲染队列名称队列号适用场景渲染顺序规则Background1000背景-Geometry2000不透明物体从前往后渲染减少OverdrawAlphaTest2450透明度测试物体-Transparent3000半透明物体从后往前渲染保证混合效果正确Overlay4000镜头光晕、屏幕贴片等覆盖效果-(2)ZTest与ZWrite组合序号状态组合结果1深度测试通过深度写入开启写入深度缓冲区写入颜色缓冲区2深度测试通过深度写入关闭不写深度缓冲区写入颜色缓冲区3深度测试失败不写深度缓冲区不写颜色缓冲区举例被遮挡物体的显示Greater,ABC, 深度:ABC如果B要展示在A之上Pass 0 正常绘制 ZTestLequal ZWriteOnPass 1 被遮挡发光 ZTestGreater ZWriteOff被遮挡部分通过测试绘制在A上如果背景深度是无穷远不通过露出部分不绘制不写入深度他后面的物体还是Lequal都大于这个深度无法正确绘制在屏幕上适用场景被建筑物等遮挡时人物依然有轮廓显示注意(1)Queue是SubShader 标签Pass没有独立生效的渲染队列。材质的渲染队列默认使用inspector里设置的会覆盖shader的队列设置(2)透明混合的pass出现在不透明阶段原因材质队列2000某pass使用Blend SrcAlpha OneMinusSrcAlpha混合(3)URP下所有Pass无法保证按顺序书写UPR根据渲染阶段LightMode管线绘制安排pass不会默认把shader内所有pass都执行会执行的pass① 标准用途LightMode为以下都会执行LightMode用途UniversalForward前向渲染路径中绘制物体UniversalForwardOnly始终以前向方式绘制兼容前向和延迟 RendererUniversalGBuffer延迟渲染时写入 GBufferSRPDefaultUnlit未设置LightMode时的默认值也用于额外绘制如描边ShadowCaster写入阴影贴图让物体投射阴影DepthOnly深度预通过输出相机视角的深度DepthNormalsOnly深度与法线预通过配合 SSAO 等功能Universal2D供 2D Renderer 使用Meta光照贴图烘焙时提取材质信息② 相同LightMode默认只执行第一个匹配项③ 其他pass要自己设置renderer feature④没写LightMode的 Pass 会被视为SRPDefaultUnlit不是任意数量的无标签 Pass 都会自动执行2.5 深度测试应用基于深度着色水体渲染比较跟水底的深度做颜色渐变阴影贴图比较灯光空间和视空间的深度差透明物体、粒子渲染透掉黑底角色遮挡透视效果能量罩切边效果2.6 总结深度缓冲重要的两个值当前深度缓冲值ZBufferValue与深度参考值rederenceValue通过比较抉择是否更换深度缓冲值Early-Z能节省开销提前抛弃会造成overdraw的无效片元深度测试通过ZTest、ZWrite完成控制如半透明、透明的渲染深度缓冲区存储的是0-1范围内的浮点非线性深度渲染顺序先渲染不透明物体从前往后再渲染透明物体从后往前如有错漏欢迎指正参考资料1.【【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例】 https://www.bilibili.com/video/BV1Tb4y1C7Qa/?share_sourcecopy_webvd_sourceffa9f839ea8afb4bd7809dfc7ae336f8

相关推荐

kustomize cfg list-setters 命令指南:列出资源配置中的所有 Setter
kustomize cfg list-setters 命令指南:列出资源配置中的所有 Setter

kustomize cfg list-setters 命令指南:列出资源配置中的所有 Setter 【免费下载链接】kustomize Customization of kubernetes YAML configurations 项目地址: https://gitcode.com/gh_mirrors/ku/kustomize 本指南围绕 kustomize 的 kustomize cfg list-set… · 2026/9/23 9:53:31

Cgroup 原理与实战:从 CPU 内存限制到容器资源配额
Cgroup 原理与实战:从 CPU 内存限制到容器资源配额

1. 从一次线上事故说起:为什么每个后端人都该吃透 Cgroup去年冬天的一个凌晨,我被电话叫醒。一台跑了十几个微服务的宿主机,内存监控曲线像坐过山车一样冲顶,然后 OOM Killer 开始无差别扫射,把最核心的订单服务给干掉… · 2026/9/23 9:53:24

道德经第二十章拆解3个实战项目避坑指南
道德经第二十章拆解3个实战项目避坑指南

道德经第二十章拆解3个实战项目避坑指南 报错一堆看不懂 StackTrace,是不是让你抓狂?在微服务架构的 实战项目 里,这种堆栈信息就像天书。别慌,今天咱们聊聊《道德经第二十章》里的“众人熙熙,如享太牢,如春登台。我独泊兮,其未兆;如婴… · 2026/9/23 9:53:24

hypervolume_:多目标优化解集质量评估的工程实现与避坑指南
hypervolume_:多目标优化解集质量评估的工程实现与避坑指南

简介:压缩包内含三个MATLAB脚本(mode.m、rank_sort_new.m、hypervolume.m),聚焦超体积指标在多目标优化中的应用,主要面向进化算法研究者、研究生以及需要量化帕累托前沿质量的开发人员。hypervolume.m 是核心代码&… · 2026/9/23 10:38:37

I2C物理层深度解剖:从开漏、上拉电阻到多主仲裁
I2C物理层深度解剖:从开漏、上拉电阻到多主仲裁

1. 这不是教科书,是我在芯片验证岗上熬了七个通宵后画的I2C解剖图你手里的开发板上那两根细线——SDA和SCL——从来就不是简单的“数据线时钟线”。它们是物理层上一场精密的微型战争:开漏结构在拉低电平上拼刺刀,上拉电阻在释放总线时抢地盘… · 2026/9/23 10:38:37

OpenALPR 车牌识别库实战指南:从 alpr 命令行到多语言集成
OpenALPR 车牌识别库实战指南:从 alpr 命令行到多语言集成

人工智能计算机视觉OCR 【免费下载链接】openalpr Automatic License Plate Recognition library 项目地址: https://gitcode.com/gh_mirrors/op/openalpr 点击查看 免费下载 OpenALPR 是一个用 C 编写的开源自动车牌识别(Automatic License Plate Reco… · 2026/9/23 10:38:37

彩色激光同轴位移计:摄像头模组测量的技术路线与实战
彩色激光同轴位移计:摄像头模组测量的技术路线与实战

都说摄像头模组是手机、车载、安防成像链路的“眼睛”,但很少有人关心这颗眼睛在出厂前要过多少道测量关。我在精密测量行业干了十来年,接触过不少位移传感器,最近两年在摄像头模组产线上用得比较多的一类设备,就是简博斯JG-C系列… · 2026/9/23 10:38:37

Attero损伤仪使用手册精讲:从参数设置到重复性校准
Attero损伤仪使用手册精讲:从参数设置到重复性校准

简介:面向网络测试工程师的Attero损伤仪中文使用手册,系统讲解硬件接口、功能特性、软件安装及损伤模型配置,帮助用户模拟时延、抖动、丢包等网络故障场景,适用于100M/1G/10GE光口与电接口测试任务。资源包含1个docx文档&#xff… · 2026/9/23 10:38:30

3步搞定至强cpu排行榜生成,告别配置卡半天
3步搞定至强cpu排行榜生成,告别配置卡半天

3步搞定至强cpu排行榜生成,告别配置卡半天 配置环境就卡半天,是不是你也经历过?刚下载好数据,脚本跑了两分钟没动静,CPU占用率飙到100%,内存也跟着报警。很多开发者在面对 至强cpu排行榜… · 2026/9/23 10:38:30

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码