v0.21
This release contains improvements to the meshoptimizer library and many gltfpack enhancements! Notably, the introduction of sparse and absolute error simplification options in meshopt_simplify
as well as per-vertex locking in meshopt_simplifyWithAttributes
improves Nanite-style processing pipelines, meshlet optimization increases rasterization performance further on NVidia hardware, and gltfpack now preserves most data compression / optimization extensions which makes it easier to compose with other glTF processing tools.
Library improvements
- Introduce experimental
meshopt_optimizeMeshlet
algorithm that should be used to optimize individual meshlets for rendering efficiency (mostly affects NVidia hardware but can be used for other vendors as well) meshopt_simplifyWithAttributes
now takes an additional optional array,vertex_lock
, which allows specifying 1 for individual vertices that should not be moved during simplification (note that this is an interface change and will require source changes; the API continues to be experimental and may see further changes in future releases)meshopt_simplify
options now support a new flag,meshopt_SimplifySparse
, which significantly increases simplification performance when simplifying small subsets of a larger mesh (note that the error in this mode is relative to the subset, as such use ofmeshopt_SimplifyErrorAbsolute
is recommended for consistency)meshopt_simplify
options now support a new flag,meshopt_SimplifyErrorAbsolute
, which treats target error and the result error as absolute (in mesh coordinate space) instead of relative to mesh extents- Simplifier now tries harder to prevent triangle flips at a minimal cost to simplification performance and efficiency
meshopt_optimizeVertexCache
now needs ~5% less memory and is ~7% faster on Windows- MESHOPT_SOVERSION CMake option can be used to customize .so version for shared library builds
gltfpack improvements
- Implement support for
KHR_texture_basisu
andEXT_texture_webp
extensions in the input files; the extensions and images will be preserved as is regardless of compression flags - Implement support for
EXT_mesh_gpu_instancing
extension in the input files; instanced meshes will be preserved regardless of-mi
flag - Implement support for
EXT_meshopt_compression
extension in the input files; files using this extension will be automatically decompressed (and recompressed if-c
/-cc
is specified) - Implement support for
KHR_materials_dispersion
extension - Implement attribute aware simplification: when
-sv
flag is specified, vertex colors and normals are used during simplification to improve appearance - Image names are now preserved when present in the input file
- Improve texture compression when using UASTC format: textures are now a little smaller by default, and using low quality levels via
-tq
allows to push compressed size further down at the expense of some quality loss - Improve behavior of simplification with extremely low factors (eg
-si 0
) - Improve behavior of quantization when the input file is already quantized
- Improve behavior for textures that are missing on disk when the output file is a GLB
- Automatically fix incorrect MIME type for PNG/JPEG input textures
- Normal attributes are removed for meshes that use unlit materials to reduce size
- Normals can be optionally stored without quantization by using
-vnf
flag (only needed for rare edge cases involving morph targets, prefer-vn
to increase normal quality)
Thanks to @ruby0x1, @sciecode and @oisyn for contributions to this release!