可见性剔除:遮挡、视锥与 Portal 的层级设计
可见性剔除遮挡、视锥与 Portal 的层级设计一、看不见的就不该画实时渲染的其一是条铁律是不可见的物体不渲染。一个开放场景里可能有十万物件但玩家同一时刻只能看到其中一小部分。把全部物件都送进管线是带宽与顶点处理的双重浪费。可见性剔除Visibility Culling就是一套把看不见的在最早阶段剔掉的层级体系是大规模场景帧率的基石。剔除不是单一技术而是分层递进先在最粗粒度砍掉整个区域再逐层细化到单个物体。每一层都面向不同规模的浪费组合使用才能把绘制调用压到最低。二、层级剔除的数据流典型的层级剔除从粗到细依次为视锥剔除、遮挡剔除、Portal 剔除。这一过程如同一个漏斗从场景全部物件开始逐级过滤直至提交绘制的可见集。视锥剔除最简单不在相机视野四棱锥内的直接丢弃遮挡剔除更聪明被前景大物体完全挡住的也被丢弃。Portal 剔除面向室内通过门洞Portal判断哪些房间可能可见房间外的直接跳过。三层漏斗逐级收窄可见集。三、生产级剔除查询与可见集构建实现下面是一段 C 示例展示如何用八叉树做视锥剔除并把可见集交给绘制。#includevector#includecmathstructAABB{floatminx,miny,minz,maxx,maxy,maxz;};structFrustumPlanes{floatp[6][4];};// 6 个平面: axbyczd// 球体与平面的有符号距离0 表示在背面staticinlinefloatDistToPlane(constfloatp[4],floatx,floaty,floatz){returnp[0]*xp[1]*yp[2]*zp[3];}// 用包围球做保守剔除球完全在任一平面背面则剔除boolIsVisible(constFrustumPlanesf,floatcx,floatcy,floatcz,floatr){for(inti0;i6;i){if(DistToPlane(f.p[i],cx,cy,cz)-r)returnfalse;// 保守宁可多画不可误剔}returntrue;}classCuller{public:std::vectorintCull(constFrustumPlanesf,conststd::vectorAABBboxes){std::vectorintvis;vis.reserve(boxes.size()/4);for(inti0;i(int)boxes.size();i){autobboxes[i];floatcx(b.minxb.maxx)*0.5f,cy(b.minyb.maxy)*0.5f,cz(b.minzb.maxz)*0.5f;floatrstd::sqrtf((b.maxx-b.minx)*(b.maxx-b.minx)(b.maxy-b.miny)*(b.maxy-b.miny)(b.maxz-b.minz)*(b.maxz-b.minz))*0.5f;if(IsVisible(f,cx,cy,cz,r))vis.push_back(i);}returnvis;// 返回可见索引集交由绘制提交}};这段代码的关键契约剔除必须保守——用包围球做测试宁可多画不可误剔。一旦错误剔除了本应可见的物体玩家会看到物体凭空消失比多画几帧更不可接受。生产环境应在八叉树或 BVH 上做层级剔除先砍整棵子树再细化到叶避免逐个物体裸测包围体更新需在物体移动时及时重算否则剔除会基于过期包围盒失效。在工程落地中遮挡剔除常采用软硬结合的策略。硬件遮挡查询适合GPU密集型场景但对室内复杂结构大多力不从心。此时需要软件遮挡体或预计算遮挡信息来补足。门户剔除则专门针对房间与走廊的连通关系玩家未穿过门就绝不加载门外内容对室内关卡收益极高。近年GPU驱动剔除把可见性判断下沉到绘制命令本身由GPU决定哪些绘制调用真正执行。进一步削减了CPU端的剔除开销与提交负担。四、保守误剔、遮挡精度与 CPU 开销的代价剔除的最大风险是误剔遮挡剔除若用不精确的遮挡体如用粗糙的盒代替真实遮挡物可能把本可见的物体判为被挡。导致穿帮。因此遮挡剔除常需保守的遮挡体或硬件遮挡查询GPU 回读但硬件查询本身有延迟与带宽成本需权衡。Portal 剔除依赖手工放置的门洞对自动化大世界不友好且 Portal 维护是额外美术工作量。CPU 侧剔除本身也有开销每帧遍历场景做可见性测试物件极多时这部分 CPU 时间不可忽略。需借助空间索引八叉树、BVH把复杂度从 O(N) 降到接近 O(log N)。收尾是过度剔除导致远处弹出的问题剔除太激进物件在转入视野瞬间才加载会有明显 pop-in需用淡入或预加载缓冲。所以落地建议剔除必须保守、用空间索引加速、遮挡用保守体或硬件查询Portal 配合手工放置远处用预加载缓冲防 pop-in。五、总结可见性剔除通过视锥、遮挡、Portal 的层级漏斗把不可见物体在最早期剔除是大规模场景帧率的基石。其风险是保守不足导致的误剔穿帮、遮挡精度与硬件查询成本的权衡、以及 CPU 侧测试的复杂度。工程落地须坚持保守剔除宁可多画借助八叉树或 BVH 把测试复杂度降到对数级遮挡剔除用保守遮挡体或硬件查询。并用预加载缓冲抑制远处 pop-in。包围体须在物体移动时及时更新避免基于过期数据失效。

相关新闻

ClipBERT性能优化指南:10个技巧提升视频问答准确率

ClipBERT性能优化指南:10个技巧提升视频问答准确率

ClipBERT性能优化指南:10个技巧提升视频问答准确率 【免费下载链接】ClipBERT [CVPR 2021 Best Student Paper Honorable Mention, Oral] Official PyTorch code for ClipBERT, an efficient framework for end-to-end learning on image-text and video-text tasks…

2026/9/24 16:40:25 阅读更多 →
Devstral-Small-2-24B-Instruct-2512-5bit:苹果MLX平台的终极视觉语言模型指南 [特殊字符]

Devstral-Small-2-24B-Instruct-2512-5bit:苹果MLX平台的终极视觉语言模型指南 [特殊字符]

Devstral-Small-2-24B-Instruct-2512-5bit:苹果MLX平台的终极视觉语言模型指南 🚀 【免费下载链接】Devstral-Small-2-24B-Instruct-2512-5bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Devstral-Small-2-24B-Instruct-2512-5bit …

2026/9/24 16:41:11 阅读更多 →
P1508 Likecloud-吃、吃、吃 【洛谷算法习题】

P1508 Likecloud-吃、吃、吃 【洛谷算法习题】

P1508 Likecloud-吃、吃、吃 网页链接 P1508 Likecloud-吃、吃、吃 题目背景 问世间,青春期为何物? 答曰:“甲亢,甲亢,再甲亢;挨饿,挨饿,再挨饿!” 题目描述 正处…

2026/9/21 6:35:56 阅读更多 →

最新新闻

基于 InstantDB 的 Stripe 一次性购买模式:Token 先行、Webhook 记账与字段级权限解锁

基于 InstantDB 的 Stripe 一次性购买模式:Token 先行、Webhook 记账与字段级权限解锁

基于 InstantDB 的 Stripe 一次性购买模式:Token 先行、Webhook 记账与字段级权限解锁 【免费下载链接】instant Instant is the best backend for AI-coded apps. You get auth, permissions, storage, presence, and streams — everything you need to ship apps…

2026/9/24 16:40:54 阅读更多 →
用 GN 构建 Skottie iOS 示例应用:Metal / CPU / OpenGL 三种后端完整指南

用 GN 构建 Skottie iOS 示例应用:Metal / CPU / OpenGL 三种后端完整指南

图形学 【免费下载链接】skia Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions. 项目地址: https://gitcode.com/gh_mirrors/ski/skia 点击查看 免费下载 导读 本文以 Skia 仓…

2026/9/24 16:40:53 阅读更多 →
拆解简博斯JG-M系列在线测径方案:双远心光学、85ms节拍与动态精度是怎么配合的

拆解简博斯JG-M系列在线测径方案:双远心光学、85ms节拍与动态精度是怎么配合的

在线测径看起来就是“拍个照量一下”,但真放到无心磨床出料口,要同时解决三件事:零件在动、零件在滚、零件表面反光各不相同。简博斯JG-M系列在线投影图像测量仪的技术方案,本质上是围绕这三个约束做的光学、算法和接口设计。 为什…

2026/9/24 16:40:53 阅读更多 →
ParlAI 中的 CNN/DM 摘要任务:从数据构建到 Teacher 实现的完整解析

ParlAI 中的 CNN/DM 摘要任务:从数据构建到 Teacher 实现的完整解析

NLP人工智能深度学习 【免费下载链接】ParlAI A framework for training and evaluating AI models on a variety of openly available dialogue datasets. 项目地址: https://gitcode.com/gh_mirrors/pa/ParlAI 点击查看 免费下载 本文围绕 ParlAI 任务库中的 cnn…

2026/9/24 16:40:53 阅读更多 →
远程软件哪个好用?2026年远程控制工具怎么选

远程软件哪个好用?2026年远程控制工具怎么选

如果你正在搜索“远程软件哪个好用”,先给一个比较实际的结论:没有一款远程软件适合所有人,关键要看你是临时协助、远程办公,还是需要长时间连接和托管。 我把常见需求拆开对比后,比较推荐优先试用支持多端连接、操作路…

2026/9/24 16:40:53 阅读更多 →
@vanilla-extract/dynamic 使用指南:在零运行时架构下动态赋值 CSS 变量(assignInlineVars 与 setElementVars)

@vanilla-extract/dynamic 使用指南:在零运行时架构下动态赋值 CSS 变量(assignInlineVars 与 setElementVars)

前端开发工具 【免费下载链接】vanilla-extract Zero-runtime Stylesheets-in-TypeScript 项目地址: https://gitcode.com/gh_mirrors/va/vanilla-extract 点击查看 免费下载 导读 vanilla-extract 是一款「Zero-runtime Stylesheets-in-TypeScript」方案&#xf…

2026/9/24 16:39:46 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →