A virtual landscape filled with colorful 3D piñata llamas against a purple background, creating a whimsical atmosphere. On the right, a stylized, abstract representation of the llamas in vibrant colors against a black backdrop.

NanoGaussianSplats for UE5

NanoGS adds a UE plugin for big Gaussian splat scenes, with LOD clusters, culling, and GPU sorting to keep frames moving.

The problem NanoGS tackles

3D Gaussian splatting can look like magic right up until it starts behaving like a tax audit. Big captures mean millions of splats. Millions of splats mean constant sorting work, a lot of memory pressure, and a very real risk that the renderer spends time drawing things the camera never sees. NanoGS targets that exact pain: rendering large-scale Gaussian splatting files in real time, while handling video memory pressure, sorting huge splat counts efficiently, and drawing only what the screen needs.

The approach focuses on a set of optimisation techniques: Nanite-style LOD clusters, screen-space error LOD selection, splat compaction, a global accumulator, and GPU radix sort. The headline promise is straightforward: large-scale Gaussian splatting scenes should render efficiently, with an emphasis on keeping memory usage low. That is a marketing claim.

Supported engine versions and what you actually install

NanoGS lists support for Unreal Engine versions UE5.6 and UE5.7. The workflow stays inside the familiar plugin lane. You download the plugin from the releases page, place it into your project’s Plugins folder, then import a PLY file using the plugin import button. That import creates a Gaussian Splat Asset, which you can drag directly into a level for rendering.

There is also an asset action to enable or disable Nanite if needed. It is an unusual sentence to write about splats, but that is the point: the tool is trying to make splats behave like a native citizen in the realtime world.

A split image: on the left, a rocky coastal landscape with greenery; on the right, an abstract representation of the same scene using vibrant colors and shapes resembling various elements of nature.

The controls that decide whether it feels stable

The plugin exposes settings grouped by intent. They map cleanly to the trade-offs most realtime teams already juggle: quality, performance, and final look. On the quality side, SH Order adjusts spherical harmonics quality. On the performance side, Sort Every Nth Frame changes how often splats get sorted. Enable Frustum Culling turns frustum culling on or off. LOD Error Threshold sets how sensitive LOD cluster switching should be. On the rendering side, Opacity Scale adjusts splat opacity, and Splat Scale adjusts splat size.

These are not vanity sliders. Sorting frequency can be the difference between a stable camera move and a shimmering mess. Culling can be the difference between a scene that fits and a scene that explodes memory. LOD sensitivity can be the difference between crisp detail and visible popping. And opacity and scale are the levers that decide whether the splats read as a coherent surface or as a cloud of regret.

About one third into your first test session, you will probably notice the same thing most teams do: the scene can look fine at rest, then fall apart during motion if sorting gets too infrequent. That is when you stop guessing and start dialing.

A side-by-side comparison of a 3D scene showing many colorful figures on a grid. The left side displays the graphics settings with Nanite ON, while the right side shows Nanite OFF. The frame rates and response times are displayed in the upper left corner.

Debug commands that make problems obvious

NanoGS includes console commands designed for inspection and stress testing. gs.ShowClusterBounds 1 enables a Nanite cluster preview, and setting it to 0 disables that preview. gs.DebugForceLODLevel can force rendering at a specific LOD cluster level for debugging, with values like 1, 2, 3, 4 and so on.

Then there is the one that will get used the most in anger: gs.MaxRenderBudget. It limits the maximum number of visible splats after culling to save memory. The default is no limit, using 0. You can set a maximum cap such as 3,000,000. When the cap is active, the culling starts from splats far from the camera.

If you are trying to ship anything on fixed hardware budgets, this kind of explicit cap is refreshing. It makes the failure mode predictable. It also makes it easier to have honest conversations with art and production, because the tool draws a hard line instead of pretending everything will fit if you just believe harder.

Best practice: do not feed it one giant splat brick

NanoGS calls out a best practice that will sound familiar to anyone who has ever fought streaming, culling, or draw lists. A single big chunk of gaussian splatting file does not help performance optimization. Splats outside the camera view cannot be culled effectively. And if everything stays in one chunk, all splats stay engaged in sorting all the time.

The recommended format is to slice a large splat file into smaller pieces. Examples given include individual props for cinematic scenes or tiles for geo-spatial data. The repository includes a simple tile slicer written in Python to support that workflow.

Proof of concept, not a miracle

NanoGS is described as a proof of concept, with a clear warning not to expect perfect results. Issues can be reported on the project page. That framing matters for production teams because it sets the correct expectation: you are evaluating a technique and an implementation, not adopting a finished commercial renderer. The good news is that the tool is built to be tested, with the kind of switches and debug views that make evaluation less mystical.

New tools and innovations should always be tested before use in production, especially when they touch core rendering paths and memory budgets.

Release, license, and what it costs

NanoGS is released under the MIT license.

The repository lists v1.0.1 as the latest release, dated March 20, 2026.

The plugin is free.


https://github.com/TimChen1383/NanoGaussianSplatting