Performance#

This page shows where a frame's time goes and which settings change it. The numbers here come from benchmarks of Radix alone and of Radix against SparkJS and PlayCanvas on the same scenes, both measured on an Apple M3 Max in Chrome at 1920x1080. Treat them as relative: GPU times drift by up to 1.5x from run to run.

Where the time goes#

GPU milliseconds per frame on WebGPU (ewa, 24-bit keys, turning):

SceneSplatsProjectCompactRadix sortDrawTotal
butterfly0.5M0.090.060.282.362.8
ceramic (inside)2M0.330.160.274.295.0
sutro2M0.300.150.311.272.0
bicycle6.1M0.940.460.804.536.7
grace (inside)10M1.550.780.964.868.2

Settings that change it#

SettingEffectTrade-off
methodewa is the cheapest; raygs within 10%; 3dgut and htgs within 25% from outside an object but 4-25x slower inside a scene, where splats around the camera cover the screenthe ray methods are exact for large and close splats
objectParams.minContribution (ewa) and minPixelRadiuscull faint and tiny splats before the sort; minContribution: 0.75 and minPixelRadius: 1, with params.minAlpha: 1/255, blurAmount: 0, and preBlurAmount: 0.075 (PlayCanvas's defaults), made Radix 1.26x as fast over the benchmark scenes (1.07-1.30x; 1.85x on the 6M-splat bicycle, drawn by default with preBlurAmount: 0.3)faint splats are dropped: a slight loss of soft detail
params.minAlphaculls splats and fragments below an alphaas above
sortBits16 bits saves 35-55% of either sort; 32 bits costs about 5% of the frame on WebGPU16 bits ties splats within 0.1% of their distance
objectParams.sortGuard (CPU sort)0.5 cut the WebGL2 draw by 24-68% on full turnsre-sort on turns as well as moves (autoSort does)
layoutpackedSplats halves memory and projects about 30% faster8-bit colors, scales, and rotations within its encoding's ranges
spherical harmonicsSH3 adds 0.28 (packed) to 0.46 ms (ext) per 2M splats to WebGPU's projection, 0.12-0.41 ms through a palette; a lower objectParams.maxShDegree reduces it without recompiling; sh: false skips SH on load (Spherical harmonics)view-dependent color; 48 to 64 bytes per splat
pixel ratiothe draw is fill-bound inside scenes: ratio 1 instead of 2 draws a quarter of the pixelsresolution
params.maxStdDevsmaller quadsslightly harder edges

Against SparkJS and PlayCanvas#

From the comparison of Oct 9, 2026: five scenes from 0.5M to 10M splats, timed one frame at a time (5 rounds) and in a vsync loop on a 120 Hz display (3 rounds). In the two interiors the camera moves while it turns, so distance sorts must re-sort. The bicycle is drawn with blurAmount: 0, preBlurAmount: 0.3, as it was trained. Results: the benchmarks page and the full report.

Large scenes#

Measuring#

Source: docs/performance.md