Introduction

Gaussian Splatting is a real-time technique for rendering scenes as semi-transparent ellipsoids.

Instead of traditional mesh geometry, the scene is decomposed into points containing:
• Position
• Scale
• Rotation
• Color
• Opacity

Each splat is a semi-transparent gaussian ellipsoid, depth-sorted, and blended to reconstruct the scene. For now, I’m rendering them as axially aligned billboards, oriented along the dominant axis of rotation.

Implementation

This implementation is a simplified version of the original 3D Gaussian Splatting method. It uses axially aligned billboards to approximate the projection of 3D Gaussians into screen space.

Each splat is rendered as a quad aligned to the dominant axis of the Gaussian’s rotation. To mimic the ellipsoid’s shape, the quad is scaled along its height to match the dominant axis, and along its width to strike a balance between the intermediate and minor axes—giving it a visually faithful silhouette with minimal math. This avoids the more complex calculations required to project the full covariance matrix into screen space, which are typically performed in the vertex shader.

Technically, this method still applies the full camera transform and uses the Gaussian’s covariance matrix to determine orientation and scale. However, it does not compute the precise screen-space ellipse shape as in the original method. Instead, it approximates the projection by rendering a billboard aligned to the dominant axis, which is sufficient for many use cases and significantly reduces shader complexity.

This trade-off allows for faster rendering and easier implementation, especially in environments like WebGPU or prototyping contexts. Future work may include implementing full screen-space projection in the vertex shader for improved fidelity.

Links

blk engine repo: www.github.com/bennywilson/blk

3D Gaussian Splatting for Real-Time Radiance Field Rendering, Kerbl et al: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/