尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Z-Prepass 与多遍渲染解析:深度先行消除无效片元着色

Z-Prepass 与多遍渲染解析:深度先行消除无效片元着色 引言:被遮挡的像素为什么还在跑着色器200 个角色同屏的战斗场景帧时间飙到 28ms,抓帧后发现:被前排角色完全挡住的像素仍在执行完整的 PBR 片元着色。这是前向渲染的经典病灶——着色发生在可见性确定之前,Overdraw 层的每一层重复像素都要全额支付片元成本。解决思路是把"确定可见性"与"计算颜色"拆成两步:先让 GPU 摸黑走一遍把深度写好,再开灯装修。这就是 Z-Prepass(Depth Pre-Pass)。本文解析其原理、收益结构、与多 Pass 管线的组织方式,以及在移动 TBR 架构下的适用边界。一、Z-Prepass 的工作机制1.1 两遍结构第一遍(深度 Pass):渲染场景几何,只写深度缓冲,不输出颜色(ColorMask 0),片元着色器退化为空操作甚至完全省略;第二遍(颜色 Pass):渲染同样的几何,深度测试设为 Equal——深度缓冲中已有的值意味着该像素属于最近表面,测试通过才执行完整着色;被更近表面覆盖的像素在 Early-Z 阶段即被剔除,片元着色器根本不运行。// Z-Prepass 的深度 Pass:只写深度,不产生颜色输出 Pass { Name "DepthOnly" Tags { "LightMode" = "DepthOnly" } ZWrite On ZTest LEqual ColorMask 0 //
返回列表