ReconWorldLab Adds Relighting to Godot Gaussian Splats in GDGS 3.3.0

Michael Rubloff

ReconWorldLab has released GDGS 3.3.0, which lets Godot's Light3D nodes shade gaussian splats using geometry baked in the editor.
GDGS 3.1.0 added editor side collision generation, voxelizing the Gaussian data and contouring it into a StaticBody3D with a ConcavePolygonShape3D. Version 3.3.0 reuses that same voxel field as a lighting proxy. A splat stores radiance and not material, carrying no normal, no albedo and no occlusion for a light to interact with, so the bake gives every splat an outward surface normal, an ambient occlusion term and a confidence value borrowed from the proxy. At runtime the colour is scaled by unlit_level plus light_gain times irradiance, so switching relighting on darkens the scene to a floor and lets only lit regions climb back up.
The bake artifact is a GaussianLightingResource holding 4 bytes per splat, an octahedral normal, an AO term and a confidence, plus the contoured proxy mesh with vertex normals. It saves as a .res and is assigned to the node's new lighting property, and the imported GaussianResource is never modified. Relighting is off by default at relight_enabled, with relight_unlit_level at 0.25 and relight_light_gain at 1.0.
Directional, omni and spot lights all work with Godot's own range and cone falloff, the eight strongest affect the splats, directional first and then by reach, and lights may move freely at runtime. Relighting reached offline and real time renderers earlier this year, with Arnold 7.5.2 adding 3DGS rendering and relighting and Nuke 17.1 adding basic relighting through SplatRender.
GDGS evaluates lighting once per splat in the vertex and projection stage, because a splat cloud carries 10 to 50x overdraw. Measured at 271,123 splats at 1280x720 with a close in high overdraw camera and vsync off, one light costs 4.851 ms against a 4.636 ms unlit baseline, an increase of 4.7%, and eight lights cost 5.375 ms, or 16.0%.
The relight_cast_shadows property is on by default and mounts the baked proxy as a SHADOWS_ONLY MeshInstance3D, so a scene casts real shadows onto ordinary Godot geometry under both rendering backends, independent of whether the splats are relit. Splats cast shadows but do not receive them. Letting Godot light the Raster backend's splats natively would deliver received shadows, and ReconWorldLab implemented and measured that path at 2.5 to 3.9x frame time before dropping it. The bundled demo scene is now an interactive relighting sandbox that bakes its own proxy on first run.
Relighting is a modulation, so it cannot change hue or remove a shadow baked in at capture, lighting detail stops at the proxy's voxel resolution so thin structures and foliage get a hull, and floaters and interior splats detected at confidence near zero fall back to flat ambient.
GDGS 3.3.0 is MIT licensed and available now on GitHub.
New to Gaussian Splatting? Start here





