A point cloud renderer using splatting method.
The renderer uses a deferred shading pipeline. Instead of computing lighting directly while rasterizing each splat, the geometry pass writes per-pixel surface attributes into a set of off-screen textures called the G-buffer (geometry buffer). A second full-screen pass then reads those textures and computes lighting once per pixel.
This decouples geometry complexity from lighting cost — overlapping splats no longer pay the lighting price multiple times — and makes it straightforward to add screen-space effects (SSAO, shadows, etc.) that need access to position and normal information.
The G-buffer in this renderer stores three attributes, which are then composited into the final image:
| Albedo | Normals | Depth | Final |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Albedo — per-splat base color.
- Normals — view-space surface normals reconstructed from the splat's oriented disk.
- Depth — linearized depth, used for reconstructing view-space position during the lighting pass.
- Final — composited result after the lighting pass.
All C++ dependencies are vendored as git submodules under external/. You only need a C++17 compiler and CMake (3.20+).
- Clone with submodules:
git clone --recurse-submodules <repo-url>If you already cloned without --recurse-submodules, run:
git submodule update --init --recursive- Configure and build:
cmake -S . -B build
cmake --build build -j



