Benchmarks

Radix, SparkJS 2.3.1, and PlayCanvas 2.23.1 drawing the same 5 scans (546k to 10.0M splats) along the same camera path. Set to cull the same splats, Radix and PlayCanvas run at about the same speed on WebGPU.

Oct 9, 2026; Apple M3 Max, Google Chrome 154.0.8037.98, 1920x1080. All results and the method: the full report.

01 · Speed

Frame times with the same culling

Radix and Spark set to cull and blur splats as PlayCanvas does by default (section 03), so all three draw the same splats. Speed relative to Radix on WebGPU: the geometric mean over the scenes of the ratio of mean frame times; longer is faster.

Radix · WebGPU
1.00×
Radix · WebGL2
0.57×
Spark · WebGL2
0.62×
PlayCanvas · WebGPU
1.03×
PlayCanvas · WebGL2
0.78×
SceneSplatsRadix · WebGPURadix · WebGL2Spark · WebGL2PlayCanvas · WebGPUPlayCanvas · WebGL2
Butterfly546k3.44.53.73.53.5
Ceramic (cave)2.0M5.88.77.85.56.2
Sutro2.0M3.46.05.43.44.1
Bicycle6.1M4.812.512.14.59.4
Grace interior10.0M8.115.116.17.611.3
Mean frame time over the path in milliseconds, the median of 5 rounds, culling matched. Green: the fastest.
02 · With vsync

Frame rate in a vsync loop

The frame times above measure each frame alone. Here the same path runs in a requestAnimationFrame loop on a 120 Hz display with vsync on, as in an app, culling matched.

SceneSplatsRadix · WebGPURadix · WebGL2Spark · WebGL2PlayCanvas · WebGPUPlayCanvas · WebGL2
Butterfly546k120120120120120
Ceramic (cave)2.0M120119120120120
Sutro2.0M120120120120120
Bicycle6.1M120102 (9% late)96 (12% late)120120
Grace interior10.0M118 (2% late)81 (23% late)73 (27% late)120116 (3% late)
Frames per second, the median of 3 rounds; late: frames that missed a vsync. Green: full rate.

See also: Vsync results for every setting

03 · Culling

Why the defaults are not like for like

By default PlayCanvas skips splats drawn under a 1-pixel radius and, on WebGPU, splats whose opacity × area is under 0.75 px². Radix and Spark draw them, as the reference 3DGS rasterizer does. The culls are aggressive: on WebGPU they remove most of the bicycle's wheel spokes (section 04). PlayCanvas's dilation is also fixed at 0.075 px², a quarter of the 0.3 px² of standard 3DGS training, so its splats are drawn smaller than trained. So at defaults PlayCanvas does less work per frame, and on WebGPU Radix is 1.30× slower than it. With no culling in any renderer, Radix on WebGPU is 1.05× slower than PlayCanvas.

CullingRadix · WebGPURadix · WebGL2Spark · WebGL2PlayCanvas · WebGPUPlayCanvas · WebGL2
Defaults1.00×0.67×0.73×1.30×0.98×
No culling1.00×0.67×0.72×1.05×0.92×
Matched culling1.00×0.57×0.62×1.03×0.78×
Speed relative to Radix on WebGPU with the same setting. Matched: Radix and Spark with PlayCanvas's default culling and blur. No culling: every renderer draws every splat above alpha 1/255.

The same culling makes Radix on WebGPU 1.26× as fast as its defaults, through objectParams.minContribution, minPixelRadius, and params.minAlpha. PlayCanvas's thresholds are set in half pixels (it measures splats with twice the focal length), so its minContribution: 3 is 0.75 here.

See also: Params Performance

04 · The image

The same view in each renderer

The bicycle scan (6.1M splats) from the benchmark's start view, with each renderer's defaults; Radix and Spark use blurAmount: 0, preBlurAmount: 0.3, as the scan was trained without anti-aliasing. PlayCanvas on WebGPU culls faint splats by default, which removes most of the wheel spokes.

The bicycle scan drawn by Radix · WebGPU
Radix · WebGPU · 8.9 ms
The bicycle scan drawn by Radix · WebGL2
Radix · WebGL2 · 13.5 ms
The bicycle scan drawn by Spark · WebGL2
Spark · WebGL2 · 12.9 ms
The bicycle scan drawn by PlayCanvas · WebGPU
PlayCanvas · WebGPU · 4.5 ms
The bicycle scan drawn by PlayCanvas · WebGL2
PlayCanvas · WebGL2 · 9.4 ms

Click an image to enlarge it; ← and → step between them, Esc closes.

05 · Known gaps

Where Radix is behind

06 · Method

How it was measured

See also: The full report Radix and SparkJS Performance