Skip to content

Speed up SOGS rendering #7789

@slimbuck

Description

@slimbuck

SOGS runtime performance is currently worse than compressed.ply when spherical harmonics are included. On slower devices scenes can run 50% slower.

The reason for this is that SOGS stores spherical harmonics coefficients in a limited size palette and each gaussian references into this palette. During rendering, the palette is accessed in practically random order thereby killing the GPU memory cache.

We have two alternatives to address this:
a. de-palletize the coefficients at load time and store coefficients per splat (matching uncompressed.ply)
b. update spherical harmonics independently from rendering and cache the evaluation to a "work buffer"

The downside of a. is that we lose much of the runtime memory savings that we currently enjoy, especially on mobile/ios. The upside is it's very simple to implement.

The downside of b. is that this is a more complex solution. However the upsides are numerous:

  • this solution should be faster than compressed.ply, since we can evaluate a small number of the closest gaussians per frame (instead of all of them)
  • we expect to require a "work buffer" solution for positions and covariances anyway, in order to solve global sorting and LOD/streaming

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions