Cheap half of Points node loading: build the spatial-index loader and
attach an empty placeholder mesh — no array fetch, no commit, and
crucially no registry registration. Splitting this from the
expensive half lets load-lod-group-node.ts attach a deferred Points
level's placeholder up front while deferring the costly geometry load
to loadPointsNodeExpensive (per-level lazy loading), exactly as the
gsplats loader does. Registering an unloaded lazy level would pull it
into the scene-wide updateView sweep and defeat the deferral, so the
caller owns registration: the combined loadPointsNode (eager path)
registers immediately; lod_group lazy levels are NEVER registered — the
LODGroupRegistry drives their (re)loads instead.
Cheap half of Points node loading: build the spatial-index loader and attach an empty placeholder mesh — no array fetch, no commit, and crucially no registry registration. Splitting this from the expensive half lets
load-lod-group-node.tsattach a deferred Points level's placeholder up front while deferring the costly geometry load toloadPointsNodeExpensive(per-level lazy loading), exactly as the gsplats loader does. Registering an unloaded lazy level would pull it into the scene-wideupdateViewsweep and defeat the deferral, so the caller owns registration: the combinedloadPointsNode(eager path) registers immediately; lod_group lazy levels are NEVER registered — theLODGroupRegistrydrives their (re)loads instead.