Skip to content
Tech News
← Back to articles

Show HN: Turning a Gaussian Splat into a videogame

read original get Gaussian Splat 3D Model → more articles
Why This Matters

This article showcases how Gaussian Splatting can create photorealistic environments in browser-based games, overcoming traditional limitations by integrating physics, lighting, and navigation meshes. It highlights a practical approach to rendering complex scenes efficiently for various devices, pushing the boundaries of real-time graphics and interactive experiences in the tech industry.

Key Takeaways

Gaussian Splatting gives you photorealistic environments for free. The catch: a splat is just a cloud of oriented blobs - no triangles, no colliders, no navmesh, no lights. Drop a character in and they'll float through walls looking like they belong in a different universe.

This post walks through the demo I built to fix all of that:

👉 Play it in your browser - WASD, mouse to aim, left-click to fire.

- WASD, mouse to aim, left-click to fire. 👉 Check the project - the full PlayCanvas project is public. Every script mentioned in this post lives inside it, ready to read, fork, or remix.

The scene is a gorgeous indoor scan of a real abandoned place by Christoph Schindelar. On top of that splat I bolted a physics collider, a grid of baked lighting probes, a Recast navmesh, eight personality-driven NPCs and a classic FPS loop. Everything runs in a browser tab.

Here's how I built it, step by step.

Before any code, you need a scene. Any splat on SuperSplat tagged Downloadable has been published under Creative Commons by its author - grab the .ply or .sog and drop it straight into your own PlayCanvas project. The lighting, clutter and scale of the scan I picked were already cinematic, so I didn't have to art-direct anything.

Try it now Jump straight to the pre-filtered downloadable view and pick one.

The Swiss Army knife for everything that follows is splat-transform - PlayCanvas's open-source CLI for converting splats. We'll lean on it for streamed LOD here and for a collision mesh in the next step.

My scene is a few million Gaussians - big enough that shipping it as a single .sog asset would punish anyone on a phone or a slow connection. The fix is Streamed LOD: instead of one monolithic file, SuperSplat (and splat-transform ) write out a folder of SOG chunks plus a manifest. The runtime loads chunks on demand based on the camera's viewpoint and the device's capability - high-end desktop pulls full detail around the player, a phone pulls a lighter subset, and neither of them stalls waiting for the whole file.

... continue reading