
JuliaNeuralGraphics has released GaussianSplatting.jl v2.0.0, which adds MCMC densification, depth and geometry supervision, and a Sky Dome pass for background separation.
The pure Julia gaussian splatting implementation had run the original clone and split densification since its first release, and v1.2.0 added the Apple GPU backend through Metal.jl to the existing AMDGPU.jl and CUDA.jl targets, one kernel compiled per target through KernelAbstractions.jl.
MCMC densification, from 3D Gaussian Splatting as Markov Chain Monte Carlo, is selectable at dataset load or in code by passing strategy=MCMCStrategy() to Trainer. Author Anton Smirnov describes it as allowing precise control of the number of Gaussians in the scene and relying less on a good initialization.
Depth supervision reads priors from a depths directory beside the dataset root and switches on with use_depth_loss=true in OptimizationParams, and the release post demonstrates priors from Depth-Anything 3. Depth varies between frames, so every map is refitted to a common scale against the prior point cloud, and maps that fail refitting are discarded.
Geometry regularization, enabled with use_normal_loss=true, pins surface orientation by requiring normals derived from the rendered depth map to align with the per-Gaussian normals, and flattens each Gaussian along its smallest axis.
The Sky Dome is a frozen shell of Gaussians at a large radius, rendered in its own pass and composited behind the scene, as either a sphere or a hemisphere. A full sphere pulls parts of the geometry onto itself and makes the ground less opaque, so a hemisphere suits outdoor scenes. The shell costs roughly 32K Gaussians against millions in the rest of the scene, and the release post compares reconstructions with and without it at 3K iterations. Optional sky segmentation masks load from a sky directory beside the dataset root.
The app is now split into a frontend thread that handles UI, OpenGL rendering and command dispatch, and a backend thread that handles splat rendering, training and dataset loading, so JIT compilation and dataset loads no longer freeze the window. Loss plots and hyperparameters update live during training, and the UI reports VRAM use.
The tag also carries a bilateral grid, a differentiable alpha map, densification refactored into a strategy, automatic checkpointing every N steps, hyperparameters.toml load and save, and Capture Mode camera paths that replay exactly across training runs. Checkpoints move from BSON to SafeTensors, and GaussianSplatting.app(ROCBackend()) replaces GaussianSplatting.gui() for launching the GUI.
New to Gaussian Splatting? Start here







