zeux/meshoptimizer
多媒体与设计优化、压缩并简化 3D 网格与 glTF 资产,让渲染更快、占用空间更小。
meshoptimizer 是一组面向实时 3D 渲染数据侧的 C/C++ 算法库:重排与压缩顶点/索引缓冲、简化网格,并为现代光栅化和光线追踪构建 cluster。它面向图形程序员和引擎/工具链开发者,处理 glTF 或自定义几何格式,而不是寻找点点点式网格编辑器的人。头文件兼容 C(实现是 C++),因此也可通过 FFI、Rust crate 或部分算法的 JavaScript 包在其他语言中使用 文档。
工作流中的实际变化
库把工作组织成有序的核心管线:索引化(去除冗余顶点)、顶点缓存优化、可选的 overdraw 优化、顶点 fetch 重排、顶点量化、索引过滤,以及可选的 shadow indexing。顺序很重要——例如顶点 fetch 优化必须作用于最终索引缓冲,shadow indexing 要在其他顶点/索引优化之后进行 管线文档。此后,无损的顶点与索引编码器期望输入已优化且已量化的数据;喂入未优化的网格会得到很差的压缩率 压缩文档。
简化是另一条主要路径。meshopt_simplify 返回复用原顶点的新索引缓冲;变体支持属性感知的误差加权、跨属性接缝折叠(permissive 模式),或原地更新顶点位置——最后一种会覆盖原顶点缓冲,若仍需原网格必须先复制 简化文档。
Cluster、mesh shader 与光线追踪
面向 meshlet 管线,库可构建并划分 cluster,用于 mesh shading 或 clustered 光线追踪,并提供专门的 meshlet 与点云编码器,以及用于 DXR2 风格压缩位置编码的 position exponent 辅助函数 cluster 文档。文档明确说明:对静态几何,clustered 光线追踪相较传统 BLAS 会降低性能,其价值在于可为形变或分层 LOD 单独更新 cluster 光追章节。
要求与限制
- 可用 CMake 构建,或只把需要的
src/*.cpp加入工程;发行版也为多个 Linux 发行版、vcpkg 和 Conan 提供包,GitHub 上有当前发布分支 安装。 - 随附的
gltfpack命令行工具可自动优化 glTF 文件;文档指出 npm 版本比原生二进制效率低且不支持纹理压缩 gltfpack。 - 非实验 API 在更新间保持源码、二进制和行为兼容,但算法输出不保证完全一致;实验 API 可能变更或被移除 实验 API。
- 旧版本编码的数据可用新版本解码;正确设置或固定格式版本时,新版本编码的数据也可在旧版本上解码;meshlet 数据没有内嵌版本头 版本兼容。
- 自定义分配器在内存不足时必须抛出异常或中止——README 明确指出
malloc不满足这一约定 内存管理。 - MIT 许可证;README 要求在面向用户的文档中署名 许可证。
HotRepo 点评
2026-07-10 至 07-12 以及 2026-10-30 有每日榜观察记录(星标从 7,985 到 8,718),但样本太稀疏,无法判断趋势;项目本身自 2016 年就已存在 仓库。
本文由 AI 根据项目 README 生成,更新于 2026年10月30日,以项目官方文档为准。