Loading video...
Video Failed to Load
Spark 2.0 is here! 🚀 We’re redefining what’s possible on the web with a streamable LoD system for 3D Gaussian Splatting. Built on Three.js, you can now stream massive 100M+ splat worlds to any device from mobile to VR using WebGL2. All open-source. Dive into the tech 👇
420,985 views • 6 months ago •via X (Twitter)
56 Comments

How do we render 100M+ splats in a browser? Spark 2.0 solves the scale challenge with three core systems: - Continuous LoD trees - Progressive .RAD streaming - GPU Virtual Memory paging Interactive demos in thread 🧵👇 Technical blog:

Learn about Spark: Experience the scale for yourself. Coit Tower consists of 40M+ splats, yet it’s fully interactive in your browser. The beauty of Spark LoD is seeing 100M+ splat worlds run smoothly on any device. Explore here:

Traditional 3D uses texture-mapped triangles to build surfaces. But to capture the real world, we need something more fluid. 3D Gaussian Splatting uses millions of semi-transparent ellipsoids that blend together to form hyper-realistic details. Demo:

What is a Splat? 📂 Each "splat" is defined by its position, XYZ scale, rotation, color, and opacity. We render them using the "painter's algorithm," sorting millions of these ellipsoids back-to-front in real-time. It’s like digital pointillism, but with 3D Gaussian profiles. 🎨 Demo:

Spark began as an internal @theworldlabs tool to solve the limits of existing web renderers. Most could only handle one object at a time and lacked dynamic animations. We built Spark on @threejs and WebGL2 so anyone can build interactive 3DGS experiences that work on every device. Lofi Worlds:

Secret Sauce 🥫 To build massive worlds, you have to join multiple 3DGS objects together. Spark uses a three-step algorithm to ensure they coexist in the same space without looking "pasted over" each other: 1. Generate a global list 2. Sort back-to-front 3. Render in one go Demo:

Spark features a programmable GPU pipeline for every splat. This unlocks real-time effects like SDF clipping, animated transitions, and 4DGS interpolation. We use a two-pass radix sort in a Web Worker to keep the main thread smooth, even with multiple viewpoints. Demo:

As 3DGS scenes grow to 10M+ splats, not to mention 100M+, they hit a wall: huge downloads and GPU memory caps on mobile. Spark 2.0 breaks this barrier. We use Level-of-Detail, Progressive Streaming, and Virtual Memory to render massive worlds on any device. Demo:

The Splat Tree 🌲 Spark 2.0 uses an LoD Splat Tree. Every splat exists in a hierarchy where parent nodes are lower-resolution merges of their children. The root is a single large splat representing the whole object. Spark traverses this tree to pick a "cut" that perfectly matches your viewpoint.

Performance Magic 🪄 Spark maintains a steady frame rate by computing "slices" through the LoD tree. By setting a budget (500K to 2.5M splats), we ensure a constant workload for the GPU regardless of scene size. You can trade detail for FPS in real-time to fit any device. Demo:

To keep the main loop smooth, Spark updates LoD updates asynchronously using Rust compiled to WebAssembly. We also use fixed foveated rendering to bias the splat budget toward the center of your view. More detail where you look, less where you don't. 🎯 Demo:

Spark includes two "training-free" algorithms to build these hierarchies: Tiny-LoD for fast, on-demand use in the browser, and Bhatt-LoD for high-quality offline processing using statistical shape similarity. No reference images needed—just raw 3DGS data. 📁 Demo:

Existing formats like .PLY and .SPZ aren't built for streaming. We developed .RAD: a spatially partitioned format that lets you see a 64K coarse version of a scene instantly while refining details as you move. Refinement happens in real-time, prioritized for your view. ⚡

The final piece: Spark adapts OS-level Virtual Memory to the GPU. We manage a 16M splat physical pool that swaps 64K "pages" of data in and out from .RAD files using an LRU eviction strategy. This is how we render infinite, composite worlds on a mobile device. Demo:

Spark 2.0 is a complete solution for streaming and rendering 3DGS worlds on the web. 🌍 With a programmable GPU engine, .RAD streaming, and virtual memory, we're making 100M+ splat scenes accessible to everyone, on any device. Start building today:

Spark 2.0 can now stream 100M+ splats on any device! So proud to contribute to the open source ecosystem of web-based 3DGS rendering!❤️🔥🌐

🌎🤩

THIS IS HUGE!! Great work to the whole team!

Thanks Adam! 🚀 Let us know what you build!

I am excited to build using this.

What? Again? The second coming of 2.0? :)

Yes! 🤩 Developer preview is now fully public and updated on our website!

<3

Incredible, you guys have been cooking! Already testing it at cyango 🥳

this is great congrats cant wait to try it out

Yes! feel free to also test out our examples page here!

looks crazy!@#!@

Congratulations for making this OpenSource !

wild stuff fr

W

Great work! This is pretty cool!

This is very helpful. Our 3D printing community has one more 3D modeling channel. Also, thank you for the open-source nature and making it compatible with WebGL. It’s very useful.

that’s unreal webgl2 finally getting its crown

Oh my god you guys are on another level

🤩🙏

somebody put new york city in this

🏙️🏙️🏙️🌎

Looks amazing! any reason for not using webgpu over webgl2?

100M+ splats to mobile is a serious engineering milestone. The implications for web-based space sims alone are huge. 🤩

Very nice. What would be the required or recommended server setup for the rad files?

very nice!

Cool name!

I've been waiting for this 😎

LoD streaming for 3D Gaussian Splatting on the web is a big step forward. Congrats to the team.

So metaverse not dead anymore?

The development on spark is very cool. The finer control over the splats made possible our product Looking forward to more updates in the future!

cool!

coooool

Spark 2.0 is a game changer! We use 3DGS + Three.js for real-time underground pipeline visualization — field photos to interactive 3D on any browser. The LoD streaming will be huge for our large-scale utility mapping scenes. Live viewer:

👀

cool for static stuff, so what about animations

forgot the links my guy, can't dive into much rn

Built on Three.js

crazy how it can run smoothly using browser.

Yoo that’s pretty major! I gotta check this out!

Love the detailed technical explanation, however I don't understand why I'm having so many (and slow) pop-ins with my desktop PC setup. I'm at 400 Mbps download speed, i9-12900KF CPU + RTX 4090 GPU, and this is how it runs:
