{"slug": "better-gaussian-splatting-in-julia", "title": "Better Gaussian Splatting in Julia", "summary": "GaussianSplatting.jl 2.0, a Julia package for 3D Gaussian splatting, adds multi-GPU backend support (AMD, NVIDIA, MacBook), a multithreaded UI, MCMC densification, depth and geometry supervision, and a sky dome feature. The update improves user experience with live loss plots and progress bars, and enhances reconstruction quality through optional depth priors and normal-based regularization.", "body_md": "# Better Gaussian Splatting in Julia\n\n[GaussianSplatting.jl](https://github.com/JuliaNeuralGraphics/GaussianSplatting.jl) **2.0**\nrelease brings notable quality of life improvements and new capabilities.\n\nSame code, multiple GPU backends\n\nWritten entirely in Julia it supports following GPU backends:\n\n- AMD GPU (AMDGPU.jl)\n- NVIDIA GPU (CUDA.jl)\n- MacBook GPU(Metal.jl)\n\nThis is achieved with\n[KernelAbstractions.jl](https://github.com/JuliaGPU/KernelAbstractions.jl)\nthat allows writing a single kernel that get's compiled to a specific target.\n\nMultithreaded UI\n\nTo avoid freezing the app during heavy work (such as JIT compilation of GPU kernels, dataset loading, etc.) the app is now split into two threads:\n\n- Frontend: handles the UI, performs OpenGL rendering, dispatches commands to the backend.\n- Backend: performs Gaussian Splatting rendering, training, dataset loading, etc.\n\nIn this way, the UI always stays responsive and user can interact with it, even if there are long-standing jobs in the background. It also shows progress bars that something is happening with tips, instead of becoming frozen like before.\n\nUI/UX itself got a big update and is now displays loss plots live during training along with all hyperparameters.\n\nMarkov Chain Monte Carlo Strategy\n\nBesides default cloning and splitting densification strategy,\nwe now support [MCMC](https://arxiv.org/abs/2404.09591)\n(3D Gaussian Splatting as Markov Chain Monte Carlo) densification strategy.\n\nIt allows precise control of the number of Gaussians in the scene and generally relies less on having a good initialization.\n\nUsers can select MCMC during dataset loading or in the code with:\n\n```\nTrainer(\n    rasterizer, gaussians, dataset, opt_params;\n    strategy=MCMCStrategy(; kwargs...),\n)\n```\n\nDepth & Geometry Supervision\n\nTo improve reconstructed geometry, we can provide **depth priors** using off-the-shelf depth estimation models.\nDepth images should be part of the dataset, under `<dataset-root>/depths/<FILENAME>.png`\n\npath.\n\nTo enable depth supervision, either toggle it in UI or with `OptimizationParams(; use_depth_loss=true)`\n\n.\nDepth maps then provide supervision during training resulting in better geometry and reduced number of floaters.\n\nSince depth may vary between frames, all depth maps are first refitted against prior point cloud to the same scale. The ones that fail refitting are discarded and not used for supervision.\n\nTo further improve geometry and smoothness, we can perform **geometry regularization** to constrain the shape of the surface,\nwhile depth supervision constrains only its location.\nIt can be enabled in the UI or with `OptimizationParams(; use_normal_loss=true)`\n\nand performs two things:\n\n- depth normal consistency pins surface orientation: normals derived from the rendered depth map must align with the per-Gaussian normals.\n- flattening surface: flattening each Gaussian along its smalles axis.\n\nSky Dome\n\nTo help disentangle sky / distant background and reduce floaters, GaussianSplatting.jl now supports Sky Dome, which is a frozen shell of Gaussians at a large radius, rendered in its own pass and composited behind the scene.\n\nDepending on your environment (e.g. like this fountain above), you may want to prefer hemisphere instead of a sphere, because a full sphere will pull parts of the geometry onto itself, making the ground less opaque. By using hemisphere, the bottom half background is black and does not affect geometry at all.\n\nThe overhead of Sky Dome is negligible (~32K Gaussians) comparing to the rest of the scene (millions of Gaussians).\n\nTo further help disentangle the sky, we can use **sky segmentation masks** obtained from any off-the-shelf sky-segmentation models,\nwhich should be part of the dataset under `<dataset-root>/sky/<FILENAME>.png`\n\npath.\n\nThis helps with small details around the edges of geometry, like leaves.\n\nCamera Frustum\n\nCamera frustum visualization got a small quality-of-life update and now shows a miniature picture of the image that the actual camera took.\n\nSome Other Niceties\n\nList of other improvements in no particular order:\n\n-\n**Automatic checkpointing** saves checkpoints every N steps in the selected directory. -\nCustom\n**hyperparameter configuration**(learning rate, loss weights, regularization, etc.) can be provided during dataset loading with`hyperparameters.toml`\n\nfile (use`Load...`\n\n,`Save...`\n\nbuttons). It can also be saved later on if you are satisfied with these values, helping reproducibility. -\n**Camera path** for**Capture Mode** can now be saved / loaded and reproduced exactly accross training runs. -\nUI shows how much\n**VRAM** is being used by the application.\n\n---\n\nThis concludes GaussianSplatting.jl 2.0 update.\n\nFeel free to try and leave the feedback on the GitHub repo.\n\nThanks! :)\n\nAcknowledgements\n\n-\n[LichtFeld Studio](https://lichtfeld.io/)for inspiration! -\nPeople who work on\n[JuliaGPU ecosystem](https://juliagpu.org/).", "url": "https://wpnews.pro/news/better-gaussian-splatting-in-julia", "canonical_source": "https://pxl-th.github.io/blog/better-gs-julia/", "published_at": "2026-08-09 15:01:04+00:00", "updated_at": "2026-08-13 13:14:31.668497+00:00", "lang": "en", "topics": ["machine-learning", "computer-vision", "ai-tools", "ai-research"], "entities": ["GaussianSplatting.jl", "JuliaNeuralGraphics", "AMDGPU.jl", "CUDA.jl", "Metal.jl", "KernelAbstractions.jl"], "alternates": {"html": "https://wpnews.pro/news/better-gaussian-splatting-in-julia", "markdown": "https://wpnews.pro/news/better-gaussian-splatting-in-julia.md", "text": "https://wpnews.pro/news/better-gaussian-splatting-in-julia.txt", "jsonld": "https://wpnews.pro/news/better-gaussian-splatting-in-julia.jsonld"}}