尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
大场景视距裁剪与 Hi-Z 遮挡剔除在移动端的实操与优化
大场景视距裁剪与 Hi-Z 遮挡剔除在移动端的实操与优化在开放世界大场景游戏中仅靠视锥体裁剪Frustum Culling已无法遏制渲染几何负载的膨胀。当玩家站在山谷或城镇街道中央时视野前方虽然包含了数万个建筑、植被和道具但其中超过 70% 的物体实际上完全被前方的大山或临街城墙遮挡。如果将这些完全不可见的物体依然送入渲染管线会产生巨量的顶点吞吐浪费与无效的 Early-Z 深度测试开销。层次深度缓冲Hierarchical Z-Buffer, Hi-Z遮挡剔除利用上一帧生成的深度金字塔Depth Pyramid在 GPU Compute Shader 中对候选包围盒AABB进行快速保守可见性测试结合 GPU Driven 渲染架构的间接绘制DrawMeshInstancedIndirect可以在移动端将 Draw Call 与顶点处理压力削减 60% 以上。Hi-Z 遮挡剔除工作流与原理解析Hi-Z 的核心思想是构建一个类似 Mipmap 的深度纹理金字塔。在标准纹理采样中Mipmap 生成采用平均值Average Downsampling但在 Hi-Z 深度金字塔中每个降采样像素必须取其对应的 4 个子像素的最大深度值在 Reverse-Z 规范下为最小深度值代表最靠近相机的表面以确保遮挡判定的严格保守性Conservative Testing。[原始深度缓冲 (Depth Pre-Pass)] │ ▼ (Max/Min 降采样构建 Mipmap 链) [Hi-Z 深度金字塔 (1/2, 1/4, 1/8, 1/16, ...)] │ ▼ (在 Compute Shader 中输入候选包围盒 AABB) ┌──────────────────────────────────────────────┐ │ 1. 视锥体相交测试 (Frustum Test) │ │ 2. 计算 AABB 屏幕空间包围矩形与对应 Mip 级别 │ │ 3. 采样 Hi-Z 金字塔深度并与 AABB 最近深度比对 │ └──────────────────────────────────────────────┘ │ ▼ (通过测试的实例写入 Culled Instance Buffer) [DrawMeshInstancedIndirect 间接绘制命令触发]移动端 Hi-Z Compute Shader 核心实现以下是基于 HLSL 实现的 GPU 实例剔除着色器代码支持 Reverse-Z 模式#pragma kernel CSMain struct InstanceData { float4x4 objectToWorld; float3 boundsCenter; float3 boundsExtents; }; StructuredBufferInstanceData _InstanceBuffer; AppendStructuredBufferuint _VisibleInstanceArgsBuffer; Texture2Dfloat _HiZDepthTexture; SamplerState sampler_HiZDepthTexture; float4x4 _ViewProjectionMatrix; float4 _CameraPositionWS; float4 _HiZTextureSize; // (Width, Height, 1/Width, 1/Height) float _MaxDrawDistance; // 判断 AABB 是否在视锥体外部 bool IsOutsideFrustum(float3 center, float3 extents) { // 标准 6 个视锥平面的快速点积判别 // 此处省略 6 平面判别循环返回 true 表示在视野外 return false; } [numthreads(64, 1, 1)] void CSMain(uint3 id : SV_DispatchThreadID) { uint instanceIndex id.x; InstanceData inst _InstanceBuffer[instanceIndex]; float3 centerWS mul(inst.objectToWorld, float4(inst.boundsCenter, 1.0)).xyz; float distToCamera distance(_CameraPositionWS.xyz, centerWS); // 1. 距离裁剪 if (distToCamera _MaxDrawDistance) return; // 2. 视锥体裁剪 if (IsOutsideFrustum(centerWS, inst.boundsExtents)) return; // 3. 计算 AABB 在屏幕空间的投影像素范围 float3 minWS centerWS - inst.boundsExtents; float3 maxWS centerWS inst.boundsExtents; float3 boxCorners[8] { float3(minWS.x, minWS.y, minWS.z), float3(maxWS.x, minWS.y, minWS.z), float3(minWS.x, maxWS.y, minWS.z), float3(maxWS.x, maxWS.y, minWS.z), float3(minWS.x, minWS.y, maxWS.z), float3(maxWS.x, minWS.y, maxWS.z), float3(minWS.x, maxWS.y, maxWS.z), float3(maxWS.x, maxWS.y, maxWS.z) }; float2 minScreen float2(1.0, 1.0); float2 maxScreen float2(-1.0, -1.0); float nearestDepth 0.0; // Reverse-Z: 1.0 为近平面, 0.0 为远平面 [unroll] for (int i 0; i 8; i) { float4 clipPos mul(_ViewProjectionMatrix, float4(boxCorners[i], 1.0)); float3 ndc clipPos.xyz / clipPos.w; minScreen min(minScreen, ndc.xy); maxScreen max(maxScreen, ndc.xy); nearestDepth max(nearestDepth, ndc.z); // 找到离相机最近的深度 } // 映射到 [0, 1] 纹理坐标空间 float2 minUV saturate(minScreen * 0.5 0.5); float2 maxUV saturate(maxScreen * 0.5 0.5); float2 uvSize (maxUV - minUV) * _HiZTextureSize.xy; // 根据包围盒像素占位计算最佳采样 Mip 级别 float maxDim max(uvSize.x, uvSize.y); float mipLevel ceil(log2(max(maxDim, 1.0))); // 采样 Hi-Z 金字塔的 4 个脚点深度 float4 depthSamples; depthSamples.x _HiZDepthTexture.SampleLevel(sampler_HiZDepthTexture, minUV, mipLevel).r; depthSamples.y _HiZDepthTexture.SampleLevel(sampler_HiZDepthTexture, maxUV, mipLevel).r; depthSamples.z _HiZDepthTexture.SampleLevel(sampler_HiZDepthTexture, float2(minUV.x, maxUV.y), mipLevel).r; depthSamples.w _HiZDepthTexture.SampleLevel(sampler_HiZDepthTexture, float2(maxUV.x, minUV.y), mipLevel).r; // 在 Reverse-Z 下如果 Hi-Z 记录的最小深度大于等于物体的最近深度说明被完全挡住 float maxOccluderDepth min(min(depthSamples.x, depthSamples.y), min(depthSamples.z, depthSamples.w)); if (nearestDepth maxOccluderDepth) { // 可见压入间接绘制索引缓冲 _VisibleInstanceArgsBuffer.Append(instanceIndex); } }移动端TBDR工程落地的关键避坑上一帧深度缓冲的滞后性Temporal Reprojection直接使用上一帧生成的 Hi-Z 进行当前帧裁剪时快速转动视角会导致视野边缘物体出现 1 帧的“闪烁空洞”。必须使用上一帧的 ViewProjection 矩阵逆变换重新投影 AABB或者对画面边缘区域的包围盒适当外扩Padding。TBDR 深度解析开销Depth Resolve在移动端 Mali / Adreno 架构上将 On-Chip Tile Memory 中的 Depth Buffer 拷贝到系统内存Resolve会消耗显存带宽。建议将 Hi-Z 金字塔的生成放在不透明物体渲染之后的低分辨率拷贝 Pass 中限制金字塔尺寸为 512x256既能保证剔除精度又极大节省下采样带宽。两阶段剔除Two-Phase Culling对于动态移动的物体第一阶段使用上一帧 Hi-Z 进行保守裁剪并绘制已知可见物体第二阶段在完成主要遮挡物绘制后对第一阶段被剔除的疑似可见物体进行二次测试彻底杜绝闪烁。
RELATED

相关推荐

Rust 智能指针底层剖析:从 Rc/Arc 弱引用到 UnsafeCell 内部可变性

Rust 智能指针底层剖析:从 Rc/Arc 弱引用到 UnsafeCell 内部可变性

Rust 智能指针底层剖析:从 Rc/Arc 弱引用到 UnsafeCell 内部可变性在 Rust 严谨的内存安全哲学中,编译期借用检查器(Borrow Checker)严格贯彻着著名的 “别名异变排他法则(Aliasing XOR Mutability)”&…

📅 2026/9/27 8:29:27
AlgoNote 算法复杂度详解:从大 O 记号到时间与空间复杂度分析实战

AlgoNote 算法复杂度详解:从大 O 记号到时间与空间复杂度分析实战

教程文档知识库 【免费下载链接】AlgoNote ⛽️「算法通关手册」:从零开始的「算法与数据结构」学习教程,200 道「算法面试热门题目」,1000 道「LeetCode 题目解析」,持续更新中! 项目地址: https://gitcod…

📅 2026/9/27 8:29:27
办公楼网络组建方案设计避坑指南:搞定这3点,建站报价才不虚

办公楼网络组建方案设计避坑指南:搞定这3点,建站报价才不虚

办公楼网络组建方案设计避坑指南:搞定这3点,建站报价才不虚 别再迷信那些一眼假、排版乱、加载慢的模板网站了。很多老板花了几千块,结果做出来的官网像上个世纪的产物,客户点进来三秒就关,这钱扔水里都不听响。…

📅 2026/9/27 8:29:27
MORE NEWS

更多资讯

📰

开会总是记不全重点?这6款口碑爆棚的录音转文字工具,实测帮你解放双手

你是不是也经历过这种崩溃时刻——开了一上午的跨部门沟通会,脑子还在回响着大家的争论,手边的笔记本却只记了几个零散的关键词。老板问“刚才张总提到的那个项目节点是什么”,你低头翻本子,一片空白。客户面谈时对方说了好几个需…

📰

零手写测试用例:TestSprite test plan generate如何用AI探索应用并自动生成测试

零手写测试用例:TestSprite test plan generate如何用AI探索应用并自动生成测试 【免费下载链接】testsprite-cli Official TestSprite CLI — AI-powered automated testing from your terminal 项目地址: https://gitcode.com/gh_mirrors/te/testsprite-cli …

📰

销售客服 Crew 会话工作流实战指南:基于 xiaobei 自媒体获客智能体的 CustomerDB 驱动销售闭环

人工智能AI Agent大模型AI 应用媒体生成 【免费下载链接】xiaobei 为OPC/中小微企业量身打造的自媒体获客智能体 项目地址: https://gitcode.com/gh_mirrors/wi/xiaobei 点击查看 免费下载 本文以 xiaobei 仓库中对外销售客服 Crew(crews/sales-cs&…

📰

RikkaHub 仓库 Claude API 技能集深度解读:Anthropic Managed Agents 的 Tools、MCP 服务器、Vault 凭据与 Skills 全指南

人工智能大模型AI 应用移动开发交互助手 【免费下载链接】rikkahub RikkaHub is an Android APP that supports for multiple LLM providers. 项目地址: https://gitcode.com/gh_mirrors/ri/rikkahub 点击查看 免费下载 本篇技术指南以 RikkaHub 仓库中 .agents/sk…

📰

3招搞定上海百度推广官网被黑,图解步骤保平安

3招搞定上海百度推广官网被黑,图解步骤保平安 网站突然弹出赌博广告,或者页面代码里多了几行看不懂的JS,后台密码怎么输都不对?这种“网站被黑挂马不知道怎么办”的恐慌,上海很多做百度推广的运营经理和建站负责人都经历过。别慌,这通常是服务器配置…

📰

如何手机做网站图解步骤

手机做网站实战对比评测:3步搞定域名服务器配置避坑 很多新手一听到“如何手机做网站”,脑子里第一反应就是:这得买服务器、买域名、搞SSL证书,太复杂了。其实,只要搞懂了 域名解析 和 服务器映射…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬