Skip to content

v3.0.0

Latest

Choose a tag to compare

@slimbuck slimbuck released this 08 Sep 10:33

SuperSplat Editor 3.0 is a ground-up rewrite of the renderer and the editor's data model on WebGPU. Scenes that used to exhaust browser memory now load and edit comfortably, large scenes stay interactive, and selection, appearance and the panel layout have all been redesigned around the new engine.

SuperSplat 3.0 requires WebGPU. It runs in current Chrome and Edge, Safari 26 or later, and Firefox where WebGPU is enabled. The 2.x editor is preserved on the v2 branch (last release v2.32.5).

Highlights

πŸš€ New WebGPU renderer

  • Splat projection, frustum culling, compaction, depth sorting and draw submission all run on the GPU every frame (compute projector, GPU radix sort, indirect draw). The CPU sort worker and WebGL2 path are gone.
  • Splat data lives in chunked GPU storage with a small per-gaussian "instance" list holding the editable state (selection, locks, transform and colour indices). The editor no longer keeps full float copies of the scene in JavaScript.
  • The result is a dramatic drop in memory use. On a 4.4M-splat scene (990 MB PLY), peak JS heap measured on v2 β†’ v3:
Operation v2 v3
Scene loaded, idle 1,557 MB 105 MB
Save PLY 1,722 MB 623 MB
Save compressed PLY 2,982 MB 1,759 MB
Save .ssproj 1,723 MB 790 MB
Publish 1,934 MB 741 MB
Render 1080p video 1,673 MB 142 MB
  • Exports are streamed chunk by chunk through splat-transform, so PLY, compressed PLY, SOG, SPZ, .ssproj and Publish no longer materialise the whole scene before writing.
  • Histograms, range selection, colour matching, bounds and all selection intersect passes run as GPU compute.
  • Orthographic rendering and depth picking are correct when the camera is inside the scene bounds (#1022).

⚑ Stochastic Alpha: fast interaction on heavy scenes

  • A new sort-free stochastic transparency mode renders splats opaque and depth-tested with per-fragment coverage, so heavy scenes stay responsive while you orbit or edit. The moment the scene settles a fully sorted, blended frame is drawn, so what you see at rest is exact.
  • Preferences β–Έ Rendering β–Έ Stochastic Alpha offers Disabled, Enabled, Movement and Auto (the default). Auto keeps the clean sorted path until a sorted frame's GPU time proves slow, then switches to stochastic during movement, and drops back again when the view gets lighter (#1014, #1017).
  • Rings mode renders correctly in stochastic frames too.

🎯 Selection redesign

  • The old surface/through toggle is replaced by two independent switches on the bottom toolbar: Selection Depth (N) picks only splats on the visible surface, and Selection Footprint (M) tests whole gaussian footprints instead of centers. Every 2D and 3D selection tool honours both, and footprint selection runs on a GPU intersect pass (#1020).
  • Zero-alpha splats are now selectable.
  • New 3D Sphere Brush tool (Shift+B): paint a stroke and each sample is depth-picked to a world position, so the brush follows the surface rather than selecting through the scene. Radius maps to world size at the picked depth, strokes split across depth discontinuities, and brush size is shared with the 2D brush ([ ] and Alt+Wheel) (#1024).
  • Lasso/polygon and flood/eyedropper are grouped into press-and-hold popups on the bottom toolbar, with refreshed icons for the brush, box and sphere tools (#1025).
  • Selections that are still computing are isolated from later camera moves and repaints, so an async selection can no longer be corrupted mid-flight.

🎨 Appearance panel and display overlays

  • A new Appearance popup on the right toolbar controls how Gaussians, Centers and Rings are drawn, with separate tint strength for unselected and selected splats, center size, ring thickness, and toggles for selection centers, rings and outline (#1020, #1028).
  • Ring shading now covers the whole gaussian footprint.
  • Tab toggles all display overlays on and off without changing your settings. Overlays are off by default, and turning on any Display toggle brings them back. This replaces the old Centers/Rings mode switch and Show/Hide Splats button.
  • Every Appearance option has a help tooltip with its shortcut.

🧭 Grid rework

  • Each grid plane (XZ, XY, YZ) can be toggled independently, and the choice is saved in preferences and in the document (#1026).
  • Grid levels adapt to the view: large scenes get 100 m and 1000 m lines, close-ups never flood with sub-pixel ones, and the coarser level is drawn brighter.
  • Analytic line antialiasing removes the horizon artefacts, axis lines stay crisp to the vanishing point, and the dither noise where the grid crossed splats is gone.

πŸ—‚οΈ Panels reorganised

  • Settings is now Preferences and holds only application preferences: Language, Colors, Stochastic Alpha, Tone Mapping, SH Bands, Fly Speed, FOV and FOV Auto Dolly, plus Reset to Defaults (#1016).
  • A new Overlays popup (eye icon) holds viewport state: Grid and planes, Bounding Box and Dimensions, Camera Poses, Camera Info, and the Frame Timings diagnostic.
  • Colors moves into the Scene Manager as a collapsible section under Transform, since colour grading edits the current splat. It gains an Apply button to bake the grade.
  • Consistent header rows, spacing and dropdown layering across all popups.

πŸ“Š Data panel

  • Separate Log Counts and Log Bins controls, with signed logarithmic binning, accurate raw-value labels and range selection, and lower recalculation overhead (#1018).

πŸ“ˆ Frame Timings overlay

  • Overlays β–Έ Diagnostics β–Έ Frame Timings shows a live GPU frame-time graph with min, median and p95 over the last second, on fixed scales so numbers compare across sessions.

Improvements

  • Orient tool points are now picked on the GPU like the measure tool. On a 2.4M-gaussian scene a click dropped from ~8.5 s of frozen UI to under 25 ms, with no duplicate points on retry (#1028).
  • Frame (F) works on the active sphere, box, measure and orient tools and frames the tool's actual bounds instead of a fraction of the whole splat (#1028).
  • Camera pose imports (JSON and COLMAP) are batched so the spline and timeline rebuild once, and the current FOV is kept when poses omit it (#1019).
  • Project loading renders once with the final state instead of flashing half-assembled frames; loading .ssproj from a URL is fixed (#1017).
  • .ssproj documents (version 1) store each layer's instance list alongside the shared static data, so layer state survives a save cheaply. v2 (version 0) projects still open. LCC layers now reopen correctly oriented (#1026).
  • Keyboard shortcuts popup audited and completed: Shift+Ctrl intersect, Enter to close a polygon, Backspace to remove polygon/measure/orient points, Alt+Wheel brush size, Ctrl+click key overwrite, Shift+drag key copy, Tab display overlays (#1028).
  • Startup shows a clear, localised message when WebGPU is unavailable instead of a blank page (#1015).
  • Installable app: manifest registers file handlers for .ply, .splat, .sog, .spz, .ksplat and .ssproj, and the splash no longer flashes white (#1015).
  • The version number in the About dialog is shown in orange (#1023).
  • Built on PlayCanvas Engine 2.22.0 and splat-transform 3.3.3, with all other dependencies updated (#1034).

Fixes

  • Deleting the selected splat while another was hidden left a stale selection that crashed the gizmo, histogram and queued intersects (#1032).
  • Rect and lasso tools died after a touch selection because releasePointerCapture threw once the pointer was gone; all drag tools and the camera controller now handle pointercancel correctly for mouse and touch (#1032, #1033).
  • Rectangle selection dragged past the canvas edge produced a negative pick origin (#1032).
  • Polygon tap with no pointer move used a null point (#1032).
  • Publish hung when an S3 part upload failed; the error popup is now shown, including for a failure on the final gzip chunk (#1032, #1033).
  • A second click on the measure or orient tool while a pick was in flight left too many points and threw every frame (#1027).
  • Opening the data panel after File β–Έ New or deleting the last splat crashed on a splat with no scene (#1027).
  • Tooltip timers firing after their target was destroyed (#1027).
  • Dragging non-file content (text, URLs, images from another tab) onto the editor threw (#1027).
  • Scene add/remove race that left a dead element crashing every later frame (#1028).
  • Flood selection's pointerup handler survived tool deactivation (#1015).
  • Select dropdowns were clipped by the settings panel and dialog bounds (#1014).
  • Favicon restored (#1015).

Removed

  • WebGL2 rendering. SuperSplat 3.0 is WebGPU only.
  • Service worker / offline cache. It never covered the app's content-hashed chunks and only added staleness risk. The first load of 3.0 unregisters workers installed by earlier versions; if you still see an old build, hard-refresh once (#1015).
  • Centers/Rings mode toggle and the Show/Hide Splats toolbar button, replaced by the Appearance panel and Tab.
  • The floating Colors popup and its toolbar button, now a Scene Manager section.
  • The surface/through selection toggle, replaced by Selection Depth and Selection Footprint.

Upgrade notes

  • Browser: you need WebGPU. On older browsers, or with hardware acceleration disabled, the editor shows a startup message instead of loading. Use the v2 branch build if you must stay on WebGL2.
  • Preferences: view toggles moved from Settings to the Overlays popup, Colors moved to the Scene Manager, and Stochastic Alpha defaults to Auto. Stored preferences carry over; only their homes changed. The grid plane preference is now a per-plane set.
  • Documents: projects saved by 3.0 use document version 1. Open them with 3.0 or later.
  • Behaviour: display overlays (centers/rings) are off by default; press Tab or enable them in Appearance. Deleting the selected splat with exactly one other remaining now selects that one, matching the behaviour with two or more.

Thanks

Thanks to everyone who tested the alpha builds and reported issues.

Full Changelog: v2.32.5...v3.0.0