Spark: a performant 3D Gaussian splatting renderer built on THREE.js
GitHub RepoImpressions819
View on GitHub
@githubprojectsPost Author

Spark: A Performant 3D Gaussian Splatting Renderer Built on THREE.js

Intro

If you've been following the 3D rendering space lately, you've probably heard about Gaussian splatting. It's a technique that takes a bunch of 3D Gaussian points—each with color, opacity, and shape—and renders them into a scene without needing a traditional mesh or polygon structure. It's remarkably good at representing real-world scenes from photos or scans, and it's been popping up in everything from VR to digital twins.

Spark is a new renderer that brings Gaussian splatting to the browser, built right on top of THREE.js. No heavy C++ plugins, no WebGL wrappers from scratch. Just a clean JavaScript library that plays nicely with the THREE.js ecosystem. If you've ever wanted to drop a photorealistic 3D scan into a web app without the usual headache, this might be exactly what you're looking for.

What It Does

Spark takes a .ply file (the standard output from most Gaussian splatting tools) and renders it in real time using THREE.js. Under the hood, it uses a custom shader to efficiently render thousands to millions of 3D Gaussians as screen-space splats. The result is a scene that looks like a high-quality point cloud, but with smooth, continuous surfaces that can handle lighting, transparency, and even refraction.

The key insight is that Spark doesn't try to reinvent the wheel. Instead, it hooks into THREE.js's pipeline, so you can use the same cameras, lights, and scenes you're already comfortable with. You just add a GaussianSplatting object to your scene, point it at a .ply file, and you're off.

Why It's Cool

The obvious win here is performance. Gaussian splatting is notoriously heavy. Most desktop implementations require a GPU with dedicated VRAM, and web ports often struggle with anything above a few hundred thousand points. Spark claims to handle millions of points at 60fps on modern hardware, thanks to clever frustum culling and a heavily optimized fragment shader.

But what I find really neat is the integration story. Since it's built on THREE.js, you can mix Gaussian splatting with regular 3D objects. You could have a scanned room with a Gaussian splatting environment, and then drop in a standard THREE.js mesh (like a chair) with real-time lighting, shadows, and interactions. That's a huge deal for prototyping AR experiences, virtual staging, or even game environments.

Another cool detail: Spark supports level-of-detail (LOD) via a built-in K-d tree. If you're far from a splat, it renders fewer points. Zoom in, and it adds detail. That's a must for large scenes, and it's implemented without any extra config on your end.

How to Try It

Getting started is straightforward. You need a .ply file (you can generate one from a set of photos using tools like gaussian-splatting or 3D Gaussian Splatting for Real-Time Radiance Field Rendering). Then just install Spark:

npm install @sparkjs/spark

Or grab it from a CDN if you're working in a plain HTML file. Here's a minimal code example:

import * as THREE from 'three';
import { GaussianSplatting } from '@sparkjs/spark';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100);
const renderer = new THREE.WebGLRenderer();

const splat = new GaussianSplatting('path/to/your/scene.ply');
scene.add(splat);

function animate() {
  requestAnimationFrame(animate);
  renderer.render(scene, camera);
}
animate();

You can also check out the live demo linked in the repo. It's a good way to see how fast it feels before you commit to coding anything.

Final Thoughts

Spark feels like one of those libraries that fills a gap nobody realized was there. Gaussian splatting is powerful, but the web ecosystem hasn't had a clean, performant, and THREE.js-native way to use it. Spark solves that without adding bloat or requiring a PhD in shader programming.

If you're building anything that involves photorealistic environments—virtual tours, digital twins, product configurators, even data visualization—Spark is worth a look. It's early days, so expect the API to evolve, but the foundation is solid. And hey, if you're already using THREE.js, this is basically a zero-cost integration.

Check it out on GitHub: https://github.com/sparkjsdev/spark

@githubprojects

Back to Projects
Last updated: June 10, 2026 at 05:11 PM