v0.10
This release contains a number of fixes and improvements for vertex codec, substantially improves performance of several algorithms in Debug builds and introduces support for decompressing vertex/index data from JavaScript.
New algorithms:
- Introduce an experimental algorithm,
meshopt_generateVertexRemapMulti
, that generates the same remap table asmeshopt_generateVertexRemap
for indexing a mesh, but supports vertex data stored as multiple independent streams (deinterleaved) - Introduce an experimental algorithm,
meshopt_generateShadowIndexBufferMulti
, that can generate a second index buffer that shares the vertex data with the original index buffer, but supports vertex data stored as multiple independent streams (deinterleaved)
Improvements:
- Optimize NEON code in
meshopt_decodeVertexBuffer
, making it 1-2% faster - Improve compatibility of SIMD code in
meshopt_decodeVertexBuffer
, fixing compilation issues on ARM64, MSVC ARM, and clang for Windows - Fix a bug in
meshopt_encodeVertexBuffer
that resulted in incorrectly encoded data on platforms wherechar
isunsigned
(this mostly affected ARM hosts such as Android) - Substantially improve performance of multiple algorithms in Debug:
meshopt_analyzeVertexCache
is 6x fastermeshopt_optimizeVertexCache
is 4.7x fastermeshopt_analyzeOverdraw
is 3.9x fastermeshopt_optimizeOverdraw
is 1.4x fastermeshopt_simplify
is 1.3x faster
JavaScript support:
- Introduce
js/decoder.js
that contains a WebAssembly version of vertex and index decoders with a JavaScript-friendly interface. The decoders run at 200-400 MB/s on modern desktop CPUs. - Introduce
tools/OptMeshLoader.js
that contains an example mesh loader for THREE.js that uses vertex/index codecs for compression and quantizes vertex data for efficient storage; the meshes for this loader can be produced bytools/meshencoder.cpp
using .OBJ files as an input.