Hi all,
Over the past few months, I've been working on and off on DirectXSplat, a C++/Direct3D 12 library for rendering 3D Gaussian Splats. It can load PLY, SPZ, .splat, SOG, and lod-meta.json scenes and render them from a host D3D12 application.
Features:
- GPU-accelerated D3D12 rasterization
- Up to 2.4x the FPS of gsplat in matched-quality, resident-scene benchmarks on an NVIDIA GeForce RTX 4070 SUPER
- Native embeddable D3D12 renderer with a host-owned device, queue, command list, fences, and render targets
- Compact packed GPU scene buffers, persistent uploaded scenes, and reusable renderer resources
- No CUDA dependency for DirectXSplat rendering
- Support for trained 3DGS scenes in PLY, SPZ, .splat, and SOG formats, plus lod-meta.json scene manifests
- Whole-scene updates and uploaded scene/chunk mutation
- GPU resource interop for external work that references renderer-owned resources
- Optional approximate splat-depth output
- Convenience APIs including an interactive viewer through Show(...) and offscreen image capture through Draw(...)
Some of the performance work includes an adapted GPU OneSweep radix sort, GPU-side culling and compaction, and indirect dispatch and draw arguments based on the surviving splats. Scene data is stored in compact packed GPU buffers. Uploaded scenes and renderer-owned resources persist and are reused between frames. Large scenes are internally partitioned into chunks and support hierarchy-based visibility, screen-space LOD selection, configurable splat and residency budgets, and residency caching.
The project is MIT licensed and completely open source.
Over the past few months, I've been working on and off on DirectXSplat, a C++/Direct3D 12 library for rendering 3D Gaussian Splats. It can load PLY, SPZ, .splat, SOG, and lod-meta.json scenes and render them from a host D3D12 application.
Features:
- GPU-accelerated D3D12 rasterization
- Up to 2.4x the FPS of gsplat in matched-quality, resident-scene benchmarks on an NVIDIA GeForce RTX 4070 SUPER
- Native embeddable D3D12 renderer with a host-owned device, queue, command list, fences, and render targets
- Compact packed GPU scene buffers, persistent uploaded scenes, and reusable renderer resources
- No CUDA dependency for DirectXSplat rendering
- Support for trained 3DGS scenes in PLY, SPZ, .splat, and SOG formats, plus lod-meta.json scene manifests
- Whole-scene updates and uploaded scene/chunk mutation
- GPU resource interop for external work that references renderer-owned resources
- Optional approximate splat-depth output
- Convenience APIs including an interactive viewer through Show(...) and offscreen image capture through Draw(...)
Some of the performance work includes an adapted GPU OneSweep radix sort, GPU-side culling and compaction, and indirect dispatch and draw arguments based on the surviving splats. Scene data is stored in compact packed GPU buffers. Uploaded scenes and renderer-owned resources persist and are reused between frames. Large scenes are internally partitioned into chunks and support hierarchy-based visibility, screen-space LOD selection, configurable splat and residency budgets, and residency caching.
The project is MIT licensed and completely open source.