Unified Splat Rendering
Unified Splat Rendering is the recommended rendering mode for Gaussian splats in PlayCanvas. It enables global sorting across multiple splat components and provides access to advanced features like procedural splats, LOD streaming, and GPU-based splat processing.
Unified Splat Rendering is currently in beta. If you encounter any issues, please report them on the PlayCanvas Engine GitHub repository.
The Problem
Without unified rendering, multiple GSplat components are rendered independently. Each component's splats are sorted separately, and the components themselves are rendered based on their bounding boxes. This approach can lead to:
- Visibility artifacts when splat components overlap
- Popping effects as the camera moves and component render order changes
- Incorrect depth sorting between splats from different components
The Solution: Unified Rendering
Unified rendering solves these issues by using a shared rendering pipeline with work buffers. All splats from all components are sorted together in a single unified sort, ensuring correct rendering order across the entire scene.
Architecture Overview
The unified rendering pipeline consists of data storage and operations:
GSplat Resources
GSplat resources are the source data for splats. They come in two forms:
- Loaded splats: Imported from files (
.ply,.sog) or streamed via LOD streaming - Procedural splats: Created programmatically using GSplatContainer
Each resource stores splat data in GPU textures according to a data format.
Work Buffers
Work buffers are automatically created for each camera/layer combination that renders GSplat components in unified mode. They serve as an intermediate storage where:
- All splat data from visible components is copied into the work buffer
- Splats are globally sorted by depth relative to the camera
- The sorted data is ready for rendering
This architecture enables features that require access to all splats together, such as global sorting and cross-component effects.
Camera Render
When a camera renders a layer containing unified GSplat components, it draws the sorted splats from the work buffer. This ensures correct depth ordering regardless of how many splat components exist or how they overlap.
Live Example
Check out the Global Sorting example which demonstrates the difference between unified and non-unified rendering. The example allows you to toggle unified mode on and off to observe how it eliminates artifacts when rendering multiple overlapping splat components.
Benefits
- Improved Visual Quality: Eliminates artifacts when rendering multiple overlapping splat components
- Consistent Rendering: Maintains correct depth sorting regardless of camera position
- Better Scene Composition: Enables complex scenes with many splat components
- Advanced Features: Unlocks procedural splats, LOD streaming, and GPU processing
Unified Rendering Features
The following features are available when using unified mode:
- Splat Data Format - Custom texture formats for splat data
- Procedural Splats - Create splats programmatically
- LOD Streaming - Dynamic level-of-detail loading
- Splat Processing - GPU-based splat manipulation