返回

文章详情

优化 meshoptimizer 以在几分钟内处理数十亿个三角形 (2025)

Hacker News2026年8月21日 17:54

2025年9月30日 今年初,NVIDIA 发布了他们的新光线追踪技术 RTX Mega Geometry,并展示了令人印象深刻的 Zorah 演示。该演示作为约 100 GB 的虚幻引擎场景发布 - 只能在虚幻引擎的一个特殊分支 NvRTX 中打开。该演示展示了新驱动程序暴露的光线追踪特性的应用,特别是集群光线追踪,结合了 Nanite 集群 LOD 流程 - 允许在不使用虚幻引擎目前为光线追踪生成的 Nanite 代理网格的情况下,流式传输和显示非常高细节的场景。由于这对我来说过于虚幻引擎特定,我没法进行太多实验 - 但在九月初,NVIDIA 发布了他们的 vk_lod_clusters 开源示例的更新,其中包括 Zorah 场景作为 glTF 文件。当然,这激起了我的好奇心 - 让我花了相当多的时间来改善 meshoptimizer 对分层集群 LOD 的支持。技术 剩下的内容如果你对 Nanite 有合理的了解,会更容易理解。如果没有,我强烈推荐 Brian Karis 等人的《Nanite:深入分析》,它详细讲述了细节;我在这里简要总结一下基本流程。给定一个三角网格,可能包含大量三角形,我们的任务是 1) 生成一个层次结构,该结构可以在任意细节级别表示该网格,2) 以适当的细节流式传输该结构的部分,3) 以适当的细节级别渲染可见网格部分。我们使用的结构能够在网格的多个不同区域表示多个细节级别非常重要 - 这使得它能够扩展到大型模型,同时适当地分配细节;高效渲染也是很重要的。这里选择的结构是一个集群的图(DAG);每个集群是一小组三角形,比如最多 128,代表在给定细节级别下的网格小块。该结构包含不同细节级别的集群,并且运行时代码负责流式传输和渲染它们,以最小化视觉错误 - 只有当结果视觉错误低于 1 像素时,集群才会被更粗糙的集群替换(而且结果切换是被 TAA 或其他时间滤波器隐藏的)。这个技术有三个棘手的部分:从高细节网格生成结构;压缩结果以使其高效流式传输;以及实时渲染结果。我们只会稍微谈谈第一部分 :) 为了构建结构,网格被拆分为一组集群;相邻集群被合并成稍大的组;每个组独立简化,保留组的边界边缘;然后将结果组拆分为更多集群,这一过程递归进行,直到没有可接受的集群为止。算法结合的方式有很多细微差别,以确保最终表示在不同细节级别之间没有裂缝,涉及的个别算法也有很多权衡 - 这无疑是一个论文的主题(实际上,已经在这个主题上写了多篇论文)。自从 2021 年发布 Nanite 以来,多种不同的引擎开始采用这种处理范式。我目前正在参与的一个开源几何处理库 meshoptimizer,自 2024 年以来有一个结合了 meshoptimizer 提供的多种不同算法构建结果结构的示例 1。拥有一个端到端示例使得改进算法和尝试更高级别的技术变种变得更加容易 - 我是否可以使用该示例代码来处理 Zorah 场景? 规模感 上面的屏幕截图确实看起来很漂亮;达到这种细节水平需要进行大量纹理、着色和照明工作,超出了 Nanite 的范畴。幸运的是,我们只关心几何部分;这应该使我们的工作变得轻松,对吧?如前所述,虽然原始 Zorah 场景是一个虚幻引擎资产,NVIDIA 将 Zorah 的 glTF 场景作为其开源 Vulkan 示例的一部分发布。让我们来看一下,好吗?zorah_main_public.gltf.7z 1.64B 三角形,18.9B 三角形(带实例化),磁盘上占 36.1 GB 渲染缓存 62 GB, 可以下载或生成……哦。一个仅包含几何的 36 GB glTF 文件 - 此外,它不包含绝大多数网格的顶点属性数据,仅包含位置!(示例代码从着色器代码中的位置推导法线进行着色) 在 Blender 中导入此 glTF 文件大约需要 10 分钟,直到内存耗尽 2。自然,虚幻引擎速度更快 - 也就是说,此文件的 UE 导入在不到 5 分钟内就耗尽内存并崩溃了!3 显然,处理的内存需求相当高,而 192 GB RAM 事实上对每个人都不够。幸运的是,我们不需要导入这个文件。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡