3D Gaussian Splatting
Points as Primitives
In 3DGS, we use a set of points and the corresponding features as primitives:
where
In 3DGS, each point has a splat ellipsoid centered at it. Each ellipsoid is defined using a Gaussian and a color
where
is the covariance matrix defining the shape of the Gaussian, is the opacity, is the RGB color.
Rendering
- Transform splats into camera coordinate system using camera parameters
. - Sort splats according to depth.
- Transform the 3D Gaussian splat distributions into 2D Gaussians in the image space.
- Compute final pixel value by accumulating all the splat color values, weighted according to their opacity, visibility and the influence defined by the 2D Gaussian.
Splat Projection
The centroid of each splat is projected onto the image plane:
We also calculate the 2D projection of the covariance matrix:
where
and
We can finally obtain 2D Gaussian distribution for each splat:
Accumulation
Given the contribution of each splat on pixel
which is quite similar to NeRF, but we replace the opacity with
Summary
- Optimal combination between volume rendering and rasterization pipelines. Real-time performance thanks to heavy optimization of the splatting scheme.
- Expressive: no limits on surface and scene complexity. Ability to render semi-transparent surfaces.
- Intuitive editing supported by modern computer graphics pipelines.