Skip to content

Latest commit

 

History

History
198 lines (132 loc) · 11.2 KB

File metadata and controls

198 lines (132 loc) · 11.2 KB

2.1.0 (Apr 18, 2026)

Bug fixes and adjustments post 2.0.0 release.

Enhancements

  • Support plain x/y/z/r/g/b point clouds in ply files (#340) (@mrxz)
  • Implement forEachSplat and getBoundingBox for PagedSplats (#324) (@mrxz)
  • Specify 0.180.0 or higher as Three.js peer dependency (#309) (@mrxz)

Bug Fixes

  • Rename packed to packedData as Chrome 149 onwards considers it a reserved keyword (#351) (@mrxz)
  • Remove spark-internal-rs from biome.json ignore list (#350) (@mrxz)
  • Fix issue when premultipliedAlpha cannot longer be changed on the fly (#331) (@mrxz)
  • Fix problem when loading CloudCompare-exported binary PLY files (#338) (@mrxz)
  • Address memory leak by clearing texture references so can be GCed (#326) (@mrxz)
  • Fix examples importmaps (@mrxz, @dmarcos)
  • Docs Improvements (@mrxz, @dmarcos, @mikeyzhong)

2.0.0 (Apr 14, 2026)

Spark 2.0 is a major release that adds a Level-of-Detail (LoD) system for 3DGS, enabling huge worlds to be rendered on the web on any device, with progressive streaming, virtual splat paging, and higher precision storage. It remains mostly backward compatible with 0.1 apps.

New features

  • New SparkRenderer that supports rendering multiple LoD splat trees computed according to max splat counts, minimum screen-space size, and camera foveation. Also supports rendering splats from a virtual paging system, extended precision encoding. New options for custom render targets and overriding material properties including custom shaders and uniforms.
  • Tunable LoD rendering: max splat count tunable with SparkRenderer.lodSplatCount and .lodSplatScale, minimum detail with .lodRenderScale, foveation parameters using .coneFov0, .coneFov, .coneFoveate, and .behindFoveate. Individual meshes tunable using SplatMesh.lodScale, .coneFov(0), .coneFoveate, and .behindFoveate.
  • New splat file format .RAD (RADiance field) that supports custom field encoding, columnar storage and compression, and chunked random access, enabling progressive loading and streaming of huge 3DGS scenes.
  • Two 3DGS downsampling algorithms: tiny-lod for generating LoD splat trees on-demand in the browser after loading, and bhatt-lod for higher-quality LoD splat tree generation in an offline setting. Both algorithms can be run in the browser or from the build-lod cmdline tool.
  • On-demand LoD splat creation using new SplatMesh({ lod: true }) and SplatMesh.createLodSplats, and instant toggling between LoD and non-LoD versions of the splats using SplatMesh.enableLod.
  • Virtual splat paging system SplatPager to preallocate GPU buffers shared across splat objects, loaded across the network in order prioritized by the viewpoint, managed in LRU fashion.
  • High-precision splat encoding in ExtSplats that mirrors PackedSplats and alleviates most precision issues. High precision usage selectable using SplatMesh.extSplats,SparkRenderer.pagedExtSplats, and .accumExtSplats.
  • Multiple viewport rendering using multiple SparkRenderer, generalizing viewport rendering to encompass different scenes, splats, and shader effects between renders.

Enhancements

  • Huge file loading support from ReadableStream, enabling multi-GB splat files from URLs or local drag-and-drop without first allocating a full Uint8Array.
  • Chainable splat Dyno modifiers using SplatMesh.objectModifiers and .worldModifiers arrays.
  • New SparkXr wrapper for AR / VR experiences

Breaking changes

  • Apps must now explicitly create a SparkRenderer and add it to the scene. Spark no longer automatically injects one because it would sometimes result in multiple renderers within the scene.
  • Multiple viewpoints now use multiple SparkRenderer instances instead of spark.newViewpoint(), and sorting options are configured directly on each renderer.
  • Spark 2.0 requires THREE.js r179 or newer, replaces VRButton with SparkXr, and replaces SparkRenderer.getRgba() / .readRgba() workflows with generator-based RGBA rendering.
  • OldSparkRenderer and related Old* classes are available as temporary fallbacks for code that still depends on the 0.1 renderer model.

Deprecations

  • Deprecated the experimental stochastic sort-free rendering mode.
  • Deprecated splat texture support for arbitrary per-splat RGBA texture profiles.

0.1.10 (Oct 24, 2025)

SOG v2 support, new examples and bug fixes

Enhancements

  • SOGSv2 (SOG) compression format support (#179) (@mrxz)
  • Use DecompressionStream for decompressing .spz files for faster loading times (#181) (@mrxz)
  • Make WASD default control for viewer (#6d7d801) (@dmarcos)
  • Add minPixelRadius property to discard splats during vertex shader (#184) (@mrxz)
  • Docs enhancements (@querielo)
  • Interactive holes example (#189) (@kali-shade)
  • Interactive ripples effect (#194) (@kali-shade)
  • Support logarithmic depth buffer (#199) (@Philipp-M)

Bug fixes

  • Issue preventing the splats from being updated when they should. (#191) (@mrxz)
  • Make bash script conform to "standard" (#197) (@Philipp-M)
  • Fix issue with splats rendered at incorrect position for a few frames (#200) (fix #192, #193) (@mrxz)

0.1.9 (Sep 22, 2025)

Performance improvements, SPZ v3 support, new splat transition and reveal effects, brush painting / erasing splat example.

Enhancements

  • New splat transition effects (#172) (@kali-shade)
  • New splat reveal effects (#153, #149) (@kali-shade)
  • Add support for SPZ v3 (fix #151) (#171) (@gwegash, @dmarcos)
  • Reduce small memory allocations when loading ply files (#147) (@mrxz)
  • Improve .ply parsing speed using compiled parser function (#150) (@mrxz)
  • Add support for ortographic rendering (#157) (@mrxz)
  • Make sure all examples resize when the window is resized (#155) (@mrxz)
  • Call gl.flush() to encourage eager execution. SparkRenderer.updateInternal was not immediately executed (#156) (@mrxz)
  • Use child mesh in SplatMesh to auto-inject SparkRenderer instead of monkey-patching (#158) (@mrxz)
  • Pre-compute lookup tables when parsing SOGS files (#159) (@mrxz)
  • Avoid allocating THREE.Quaternion instances in setPackedSplat (#160) (@mrxz)
  • Use native Float16Array to encode a number as a float16 if available. (#161) (@mrxz)
  • Splat brush painting / brush erasing example (#165) (@winnie1994)

0.1.8 (July 31, 2025)

Bug fix + SplatMesh bounding box calculation.

Bug fixes

  • Fix SH encoding scale factors (#142) (@asundqui, @mrxz, @heimeii)
  • Calculate a SplatMesh's bounding box! SplatMesh.getBoundingBox() (#126) (@winnie1994)

0.1.7 (July 30, 2025)

Image quality and performance improvements.

Enhancements

  • Customizable splat encoding ranges (rgb, sh1, sh2, sh3) for wider range of colors and scales support improving contrast and color reproduction. Expose premultipliedAlpha flag to use when accumulating splat RGB (#134) (@asundqui)
  • Experimental Stochastic splat ordering option. Faster rendering since sorting no longer needed but with some visual quality tradeoffs (#8f5596e) (@asundqui)
  • Higher precision mode (float32) for splat sorting in addition to the default one (float16). Addresses z-fighting issues between splats (@asundqui, @mrxz) (#129)
  • Allow decoding and parsing of SOGS images to happen in parallel (@mrxz) (#122)
  • New splat shaders effect example (#141) (@kali-shade)
  • Expose minAlpha and maxPixelRadius in the SparkRenderer parameters (#130) (@asundqui)
  • Tree-shaking on worker code (@mrxz) (#118)
  • Add JSDocs to docs (@mrxz) (#123)
  • Use THREE.js built-in full screen quad instead of custom setup to cover the entire render target (@mrxz) (#121)
  • Redunce bundle size by removing anyhow::anyhow dependency (#127) (@asundqui)

Deprecations

  • Remove SparkRenderer blending parameter. Rely instead on THREE.js built-in support for premultipliedAlpha that sets the right blending mode automatically (#136) (@mrxz)

0.1.6 (July 11, 2025)

Visual quality improvements, .zip sogs file support, bug fixes.

Enhancements

  • Can load SOGS compressed splats packaged in a .zip file (#100) (@asundqui)
  • Rename SparkRenderer renderScale parameter to focalAdjustment (#113) (fix #99) (@asundqui, @mrxz)
  • Use OffscreenCanvas and WebGL2 context to decode webp SOGS images instead of 3rd party dependency (#90) (@mrxz)
  • Animated transitions between splats example (#69) (@winnie1994)
  • Example of loading a SOGS compressed splat (@dmarcos, @vincentwoo, @61cygni)
  • Expand value range of internal splat encoding to improve visual quality. Lower zero cut-off to retain and render small splats. (#110) (@asundqui, @mrxz)

Bug fixes

  • Fix visible property of SplatMesh not having effect. (fix #77) (#100) (@asundqui, @cyango)
  • Add missing sh1 and sh2 support to SOGS compressed support (fix #108) (#109) (@lucasoptml)
  • Prevent unintentional reuse of ArrayBuffer on concurrent file requests or hits to THREE.Cache. Replace use of THREE.FileLoader with fetch API (#94, #112) (fix #93) (@mrxz, @asundqui)

0.1.5 (July 1, 2025)

Visual quality improvements and SOGS support

Enhancements

  • Add support for SOGS compression format 3D Gaussian Splatting (#73) (@asundqui)
  • Change splat shapes by using any RGBA texture to compute the Gaussian falloff (#79) (@asundqui)
  • Use RenderTarget properties to reduce manual render state tracking (#80) (@mrxz)

Bug fixes

  • Visual quality, Fix .ksplat decoding (fix #66) (@asundqui)
  • Visual quality, Fix Spherical Harmonics not included in SPZ transcoding (fix #66) (#83) (@asundqui)
  • Visual quality, Fix incorrect calculation of renderer size. Especially improves rendering in high DPI displays (#71) (@mrxz)
  • Fix support of compressed .ply files exported from SuperSplat. Newer versions include min/max_r/g/b properties in the header that were not parsed (#82) (@asundqui)

0.1.4 (June 24, 2025)

Enhancements

  • Ability to render depth and normal values (#58) (@asundqui)
  • New parameters to change renderer focal distance and aperture angle (#59) (@asundqui)
  • GLSL code injection example (#56)
  • WebXR example (#50)

Bug fixes

  • Option to disable SparkControls camera roll for touch controls (fix #46) (#60) (@asundqui)
  • Fix sign in SH2 coefficient signs improving visual quality (#64)

0.1.3 (June 11, 2025)

Fix types export in npm package.

0.1.2 (June 10, 2025)

It removes unnecessary dependencies from npm package.

0.1.1 (June 10, 2025)

Bug fixes

  • Fix compressed .ply files by gsplat not loading (#34) (@bolopenguin, @asundqui)
  • Fix image quality rendering with mostly transparent splats (#36) (@hybridherbst, @@asundqui)
  • Fix SplatMesh not rendering when it's a child of an Object3D (#38) (@dmarcos)

0.1.0 (June 2, 2025)

First release