Master's thesis · Electronic Visualization Laboratory, UIC · 2026
Gaussian Splatting in the CAVE2
A real-time 3D Gaussian Splatting renderer for head-tracked, tiled stereoscopic displays like the CAVE2. Every display renders on its own GPU, yet all of them agree on what they draw, without any synchronization between them.
The CAVE2 at UIC’s Electronic Visualization Laboratory is a room-sized immersive display: a cylinder of passive-stereo LCD panels wrapping roughly 320° around the people inside it, driven by a cluster in which every display has its own GPU. My Master’s thesis is a renderer that brings 3D Gaussian Splatting (3DGS), the representation that turns photo captures into millions of anisotropic Gaussians, to this kind of facility.
The problem
A standard 3DGS renderer treats every eye of every display as an independent camera: each one sorts the Gaussians, evaluates their view-dependent color and rasterizes them on its own. On a tiled stereo wall that repeats the same work dozens of times per frame, and because every display sorts along its own viewing axis, two neighbouring screens can composite the same Gaussians in different orders, and turning the view while navigating reorders everything at once.
What I built
- A head-centered pipeline. The draw order and the spherical-harmonic color of every Gaussian are computed once per display, from the tracked head position, and shared by both eyes. Projection and rasterization stay per eye, so the stereo geometry is exact.
- A radial sort key. Gaussians are ordered by their distance from the head rather than by depth along each display’s axis, so every display gives the same order to the Gaussians they share, with no synchronization between nodes, and turning in place reorders nothing.
- Bounded color sharing. A per-Gaussian error bound, computed from its spherical-harmonic coefficients, decides where sharing color between the eyes is safe, keeping every pixel within one 8-bit level of rendering each eye separately.
- Amortized GPU sorting. A radix sort runs only when needed; small head motions reuse or locally repair the previous order.
- An out-of-core working set. Scenes are split into chunks streamed to each GPU on demand, so a node can render scenes larger than its memory.
Results
On a 22-display cylindrical facility (44 stereo views and 92 million pixels per frame) and on a flat two-panel stereo wall, the renderer handles scenes of up to 106 million Gaussians and runs 1.3–2.8× faster than the reference 3DGS Unity plugin at the same resolution. In strongly off-axis views, close to a screen, it also stays measurably closer to path-traced ground truth.
Stack
Unity 6 (URP, Render Graph) · C# · HLSL compute shaders · UniCAVE
This is ongoing research. Source code and a full technical write-up will be published here soon.
Scenes in the photos: the Mandelbulb fractal by Harry Chen (Spirula Studio, CC BY) and the Zero-Day scene by Mike Winkelmann (Beeple), from NVIDIA’s Open Research Content Archive.