Three.js-based implementation of 3D Gaussian splatting
MIT License
Bot releases are hidden (Show)
Published by mkkellogg about 2 months ago
Viewer.dispose()
behavior as well as abort behavior for splat scene loading functionsdemo/dynamic_dropin.html
Published by mkkellogg 3 months ago
Viewer
parameter splatRenderMode: GaussianSplats3D.SplatRenderMode.TwoD
dispose()
call in Viewer.removeSplatScene()
Viewer.removeSplatScenes()
Published by mkkellogg 4 months ago
Updates targeting memory usage:
.ply
that's loaded into memory for rendering (not export to .ksplat
) via the Viewer
parameter plyInMemoryCompressionLevel
. Previously it would be stored as an uncompressed SplatBuffer
, but now the compression level can be chosen and valid values are the same as when exporting to .ksplat
: 0, 1, or 2. Default is 2.Viewer
parameter freeIntermediateSplatData
. When true, the intermediate splat data that is the result of decompressing splat bufffer(s) and is used to populate the data textures will be freed. This will reduces memory usage, but if that data needs to be modified it will need to be re-populated from the splat buffer(s). Default is false.Add ability to import reduced-memory version of INRIA .ply
files (more info here: https://repo-sam.inria.fr/fungraph/reduced_3dgs/)
Split spherical harmonics into multiple textures for large scenes
Add ability to toggle splat scene visibility or set the opacity of individual splat scenes.
Fixed bug preventing Viewer.addSplatScene()
or Viewer.addSplatScenes()
from working after scenes have already been added.
Fixed sorting crash on iOS < 17.0 where SIMD is not supported in web assembly modules
Fixed bug with progressively loading dynamic scenes
Breaking changes:
Viewer.addSplatScene()
parameter: streamView
to progressiveLoad
Published by mkkellogg 5 months ago
Published by mkkellogg 5 months ago
Viewer
constructor parameter to enable: sphericalHarmonicsDegree
. Default value is 0..ksplat
format to include spherical harmonics.ksplat
files (2) that is identical to (1) except spherical harmonics are compressed to 8-bitPublished by mkkellogg 6 months ago
Published by mkkellogg 6 months ago
Published by mkkellogg 6 months ago
Viewer.removeSplatScene()
when there was only a single splat scene loaded (Thanks @pesa2000 for the heads up and help with testing)create-ksplat.js
script (Thanks @gotoeasy for finding this bug and providing the fix!)Published by mkkellogg 7 months ago
Viewer.setOrthographicMode()
SplatMesh.setSplatScale()
to set the value by which splats are scaled in screen-space (default is 1.0)SplatMesh.setPointCloudMode()
to enable/disable point-cloud mode, where each splat is rendered as a filled circleViewer.removeSplatScene()
Published by mkkellogg 7 months ago
Viewer
parameter 'antialiased': true
.halfPrecisionCovariancesOnGPU
is now false
by default. It was causing issues for very small models.Published by mkkellogg 7 months ago
Bug fixes:
esbuild
not properly handling static class members in web workersUpdates:
Viewer
constructor parameter for choosing scene reveal mode: sceneRevealMode
Published by mkkellogg 7 months ago
.ply
format..ply
files and compressed .ply
files.Published by mkkellogg 7 months ago
Fixed a bug with loading .ply
files using Viewer.addSplatScene()
and Viewer.addSplatScenes()
Published by mkkellogg 7 months ago
The Viewer
class now accepts a new parameter renderMode
, which lets you control when the viewer renders. It is of the type RenderMode
:
const RenderMode = {
Always: 0,
OnChange: 1,
Never: 2
};
Always
is the default and will cause the viewer to render every frame.OnChange
will make the viewer only render when a visual element in the scene changes (camera position, camera orientation etc.)Never
prevents the viewer from doing any renderingAdditionally the new function Viewer.setRenderMode()
allows this setting to be changed at runtime
Published by mkkellogg 7 months ago
Small bug fixes for the progressive loading feature:
Published by mkkellogg 7 months ago
Support progressive loading for .ksplat
and .splat
files. Support for streaming .ply
files will be included in a future release.
streamView
option to addSplatScene
. It is false
by default to preserve existing behavior.Viewer.dispose()
to be called while scene loading is in progressBeaking Changes:
.ksplat
format so that it can be streamed, and to allow for better compression, multiple scene sections, and an optimized layout that yields better sorting performance. Older versions of .ksplat
files will no longer be supported.showLoadingSpinner
parameter for Viewer
constructor is now showLoadingUI
Thanks to @gotoeasy for helping me test this feature out and find bugs!
Published by mkkellogg 8 months ago
Published by mkkellogg 9 months ago
Viewer.dispose()
to explicitly dispose of resources directly and indirectly held by the viewer..ply
, .splat
, or .ksplat
).Published by mkkellogg 9 months ago
Small release containing a fix for a bug that caused scene transforms to be incorrectly applied.
Published by mkkellogg 10 months ago
This update adds the ability to apply real-time transformations to splat scenes. Prior to this release, splat scenes could have a custom transformation applied when the scene was added to the viewer, after which the scene had to remain static.
Code changes
Added dynamicScene
parameter to Viewer
and dynamicMode
parameter to SplatMesh
as a hint so that they won't make any optimizations that assume a static scene.
Updated splat data access methods in SplatMesh
so that by default they only apply scene transformations if dynamicMode
is false
.
Added new API for accessing individual splat scenes. Each of the following methods returns a SplatScene
object by which the position, orientation, and scale of an individual splat scene can be modified in real time.
SplatMesh.getScene(sceneIndex)
Viewer.getSplatScene(sceneIndex)
DropInViewer.getSplatScene(sceneIndex)
Added demo page with dynamic scenes example: demo/dynamic_scenes.html
Breaking Changes
Updated splat scene loading functions to have more consistent names that better describe their purpose:
- Viewer.loadFile()
changed to Viewer.addScene()
- Viewer.loadFiles()
changed to Viewer.addScenes()
- DropInViewer.addSceneFromFile()
changed to DropInViewer.addScene()
- DropInViewer.addScenesFromFiles()
changed to DropInViewer.addScenes()
Changed Viewer.scene
parameter to Viewer.threeScene
to avoid confusion with the concept of splat scenes