Skip to content

v0.10

Compare
Choose a tag to compare
@zeux zeux released this 11 Jan 04:04
· 2907 commits to master since this release

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 as meshopt_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 where char is unsigned (this mostly affected ARM hosts such as Android)
  • Substantially improve performance of multiple algorithms in Debug:
    • meshopt_analyzeVertexCache is 6x faster
    • meshopt_optimizeVertexCache is 4.7x faster
    • meshopt_analyzeOverdraw is 3.9x faster
    • meshopt_optimizeOverdraw is 1.4x faster
    • meshopt_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 by tools/meshencoder.cpp using .OBJ files as an input.