PlayCanvas has released Engine v2.23.0, which makes gaussian splat level of detail purely distance based again. Engine v2.22.0 introduced an LOD mode driven by measured error a month ago, spending the splat budget on whichever upgrades removed the most quality loss per splat added. That mode is gone in v2.23.0, and error metadata in lod-meta.json is ignored.
Each GSplat again picks its level from distance bands set by GSplatComponent#lodBaseDistance, default 5, and #lodMultiplier, default 3, both restored from Engine v2.21.0. The scene budget now follows GSplatParams#splatBudgetMode. GSPLAT_BUDGET_TARGET, the default, raises detail to fill the budget as before. GSPLAT_BUDGET_LIMIT only lowers detail, so a distant GSplat uses no more than its distance calls for. A splatBudget of 0 now means no budget instead of the 1M default. The lodMode and lodFalloff properties no longer have any effect, and the GSPLAT_LODMODE constants are deprecated.
Large or sparse nodes such as sky and distant background are now judged closer to their middle, removing patches of extra detail in the mid distance. The LOD allocator was rewritten around a histogram of the distances at which nodes switch level, so its cost no longer grows with the budget. PlayCanvas measures it at 1.3 to 2.5x faster at typical budgets.
Streamed LOD, which SuperSplat began generating automatically alongside Engine v2.19.0, now loads files by priority. Data that makes nodes visible comes first, then pending LOD switches, then refinement, with the nodes nearest the camera first in each group. Queued requests the camera no longer needs are dropped, while at most two files still download at once. Default lodBehindPenalty rises from 1 to 1.5 and lodUpdateAngle from 0 to 90, so LOD now updates as the camera rotates. Streaming bookkeeping per LOD update fell from 16.3 to 4.5 ms at 30K nodes while files load, in PlayCanvas measurements.
Engine v2.23.0 also adds an optional stochastic mode to the WebGPU GPU sort renderer, set with app.scene.gsplat.stochastic = true. Splats are drawn unsorted with dithered coverage, opaque blending and depth writes, which removes the radix sort from the frame entirely. Picking keeps sorted depth, and the CPU sort renderer ignores the setting. The release publishes no performance figure for the mode.
A per axis focal length now sizes each splat footprint, fixing squashed and cracked splats when a viewport's pixel aspect does not match its projection, as in side by side stereo. Cached splat shadows now skip compute work, streaming loaders honor withCredentials, and spherical harmonics render correctly under orthographic cameras.
Engine v2.23.0 is available now on npm under the MIT license.



