2026 年 9 月初,NVIDIA 发布了其开源 vk_lod_clusters 样本的更新版本。这是一个 Vulkan 演示,将驱动暴露的集群光线追踪与类 Nanite 的集群层级细节(LOD)管线相结合,以流式传输并显示一个采用全路径追踪的极高细节场景。此次更新新增了一个以 glTF 文件形式提供的 Zorah 场景,并促使 meshoptimizer 网格处理库的作者 Arseny Kapoulkine 发表了题为“数十亿三角形重访”的后续文章。新文章较早先关于该场景的报告更少关注处理时间,更多聚焦于压缩与管线其他方面;阅读早期文章并非理解本文的前提。
新 Zorah 场景规模约 16 亿三角形,下载体积约 70 GB。最引人注目的不是下载大小,而是 glTF 场景数据本身:2026 版本约 32 GB,而 2025 版本约 36 GB,尽管几何总量几乎未变。相比之下,NVIDIA 现在还提供了去除属性与纹理的原始场景版本,仅 9 GB,这表明属性与纹理的添加在很大程度上推高了早期文件向 36 GB 增长。
体积缩减得益于 glTF 场景中的 meshoptimizer 压缩扩展:EXT_meshopt_compression 使用较旧的“v0”顶点格式暴露顶点与索引压缩,而更新的 KHR_meshopt_compression 采用升级后的 v1 顶点格式,于 2026 年初成为标准。这些扩展并非逐个网格打包,而是将数据组织为表示顶点或索引数据的字节数组,留给工具自由决定如何分割和缓冲网格。meshoptimizer 顶点编解码器本身是无损的——能精确复现原始字节序列——但其底层可通过预量化数据(当 glTF 访问器支持时)或“滤镜”以牺牲少量精度换取更高压缩比,使其成为有损压缩。作为中间文件而非最终交付格式,Zorah 场景采用了无损选项;最终交付则会使用调优的有损压缩以最小化文件体积。
Kapoulkine 报告了场景的以下体积:原始(解压后)、v0(下载文件中磁盘存储的内容)和 v1(用 v1 格式重新压缩):
类别 原始 v0 v1 位置 14.3 GB 9.1 GB (63.5%) 8.9 GB (62.1%) 属性 30.1 GB 21.6 GB (71.8%) 20.5 GB (68.2%) 索引 18.9 GB 1.9 GB (10.1%) 1.9 GB (10.1%) 总计 63.3 GB 32.6 GB (51.5%) 31.3 GB (49.5%)
索引数据压缩效果尤为显著;位置与属性压缩较为温和。切换到 v1 顶点格式能再挽回几个百分点,且解码更快。
为何要压缩中间文件?Kapoulkine 给出两个理由。一是降低从磁盘读取场景的成本:顶点或索引数据的解码在单核上可达每秒数 GB 输出,解压耗时不足总处理时间的 1%,完全并行运行,且将磁盘读取占用减半。二是针对网格的优化压缩器有时比通用压缩器更小。在原始数据上使用 6 级 Zstandard 得到 38.0 GB 文件(原始的 60.1%),而在 v1 meshopt 压缩之上再叠加 Zstandard 则达到 27.4 GB(原始的 43.3%)——一个看似悖论的结果。其设计初衷明确:meshoptimizer 编解码器不重新实现完整的无损压缩器,而是针对通用压缩器常遗漏的特性进行优化,同时保持输出流既利于快速解码,又便于后续再压缩。最初的动机仅仅是 SSD 变得快得不合理;当驱动器能以每秒数 GB 的速度流式传输时,缓慢但紧凑的压缩未必划算,而分层方法让发布者可在不触动网格层的前提下选择底层编解码器(LZMA、Zstandard 等)。
处理端管线基本沿用前文:将输入网格分割为集群,将集群划分为组,在保持边界的前提下简化每个组,将新组再分割为更多集群,循环往复。运行时端,clusterlod.h 现提供 clodBuildHierarchy,在集群 DAG 上构建 BVH 以快速选取正确保真度的集群,正如最初 Nanite 演示所描述。因场景现包含属性,故使用感知属性的简化 meshopt_simplifyWithAttributes:各属性根据其对表面外观的影响程度获得一个标量权重,使简化器的误差度量反映完整视觉结果。
clusterlod.h 近期改进提升了空间相干性与简化鲁棒性。partition_sort 选项按 Morton 阶排序分区,使 DAG 空间相干性更强,有助流式传输的局部性;得益于策略性预取,meshopt_buildMeshletsSpatial 更快;meshopt_partitionClusters 在近期版本中也有改进。宽容模式由 meshopt_SimplifyPermissive 标志启用,经过改进并标记为稳定:它豁免了大多数拓扑限制,使得富含缝合线的网格不再令简化器停滞——这是依赖将高细节源网格简化至单一集群的分层 LOD 方案的一大痛点——且属性误差现可被钳制,避免过度悲观的 LOD 选择。使用宽容模式时,带不连续性的属性应传给简化器以进行基于属性的加权,LOD 选择应依据计算出的输出误差而非固定三角形预算;Zorah 未使用选择性不连续保护。在 Zorah 场景上,低质量“粗糙”回退现在仅用于约 0.01% 的简化组,作者认为这无伤大雅。
文章注明测试环境为配备 12 GB 显存的 GeForce RTX 5070,并附带附录,涵盖面向最终交付场景的有损压缩调优。
