Shared line working-set admission for this SceneLoader session.
OptionallodPer-scene LOD-group registry. Optional — when absent, lod_group nodes still load (default level renders) but the per-frame selector is a no-op. Set by SceneLoader when the scene supports LOD-group selection.
THREE.js node factory for placeholder construction.
Snapshot of the orchestrator's viewState at the time the leaf is
invoked. Captured by value so a concurrent updateView mutating the
orchestrator's field doesn't corrupt the initial-load query region.
NOTE: for a DEFERRED reload (a lazy lod_group level re-fired after the user
scrubbed) this snapshot is stale — the reload paths re-run
deriveNodeViewState() (from the orchestrator's live view state) to load
for the CURRENT slice.
Optionalregistertrue ⇒ each leaf attaches its placeholder and registers its loader but
does NOT load its first data. Set for a partition part activated by the LOD
registry (B4): the loader pass that activated it sweeps the new loaders
itself, with that pass's directives (playback budget, pinned rungs), and
commits them with the rest of the pass — one commit, no initial-load
lookahead, and nothing loaded for a view the pass is not showing. A
kind=lod group clears it for its subtree (its lazy levels load outside
any pass). Absent ⇒ the leaf loads eagerly.
Factory-deps snapshot for createX*Loader helpers.
OptionalgetThe orchestrator's LIVE view state (not the snapshot above). The partition
loader gates its parts on the current hidden-dim slice with it (B4); a
nested partition can be loaded long after this ctx was built (a deferred
part's activation), when viewState is stale. Optional: absent ⇒ the
snapshot is used.
OptionalpathWhether path's world nd_transform chain (root → node) is non-empty. A
transformed part's bounds do not live in the space of the world slice, so
the partition loader never slice-gates it. Optional: absent ⇒ false.
The orchestrator's CURRENT view-update version (live, not the snapshot). A deferred / registry-driven reload captures this at derive-time and stamps the committed geometry with it (see the commit callbacks below) so the LOD registry's freshness check reflects the slice actually loaded.
Compose effective rendering attrs along the scene-graph ancestry.
Any additional attributes
Optionaltransform?: readonly number[]Transformation matrix (16 elements for a column-major 4x4 matrix).
Typed as readonly number[] because zarr metadata is parsed
dynamically; see import('../types/zarr').Matrix4x4 for the
narrowed 16-tuple shape.
Optionalnd_transform?: NdTransformMapPer-dimension transforms for non-displayed dimensions
Optionalopacity?: numberRendering attributes
Optionalabsorption?: numberOptionalgamma?: numberOptionalintensity?: numberOptionaloffset?: numberOptionalblending_mode?: stringOptionaljoin?: stringLines-only join style at degree-2 polyline joints: 'none' | 'miter' (#790).
Optionalmax_radius?: numberOptionaln_points?: numberOptionallayer?: booleanWhether this node is exposed as a layer in the Layers panel
Optionalvisible?: booleanInitial visibility when the scene loads (default: true). Authoring-time only.
Optionalcolor_data_range?: [number, number]Min/max of color data, computed at encoding time
Optionalamplitude_data_range?: [number, number]Min/max of amplitude data (GSplats), computed at encoding time
Optionalscalar_data_range?: [number, number]Min/max of scalar data (Points/Lines), computed at encoding time
Optionalcolormap?: stringColormap name for scalar-to-color mapping (e.g., "viridis", "green", "custom")
Optionalhas_scalars?: booleanWhether this node has scalar values for colormap lookup
Optionalextend_to_all?: string[]Dimensions to extend visibility across (points visible at all values)
OptionalonCalled by each leaf loader right after it attaches its placeholder — before any data is loaded into it, so before it can be drawn. The factory styles that placeholder from AUTHORED attrs; a leaf built after the Layers panel initialised (a registry-activated partition part, a lazy level) needs the panel's LIVE layer state instead, and this is where the app hands it over. Optional: absent ⇒ nobody is listening.
Derive the per-node view state (same single source of truth used by retry/update).
Wire a loader to the data-loading monitor when one is connected.
Kick the progressive refinement orchestrator if no update holds the
serialization lock (re-checks next frame when one does). Called after a
deferred lod_group SUBTREE activation registers new sweep loaders —
refinement is otherwise only scheduled at update-view tails, so without
this the freshly-activated branch would sit at its first additive chunk
per part until the next slice change. See
SceneLoader.kickRefinementIfIdle.
Latch and surface an archive fault episode for this scene loader.
True while the dataset that created this ctx is still the live one.
Returns false once that dataset has been aborted/disposed or
replaced by a later loadScene. Deferred loads (e.g. lazily-loaded
lod_group levels triggered after initial load returns) MUST check
this before committing geometry, so a load in flight when the user
switches datasets never writes into a disposed/replaced scene.
Release a lazily-loaded gsplats level's GPU geometry back to the
evictable buffer pool (its loader is never registered: lazy levels stay
out of the sweep, and the lod_group's ensureLoaded keeps it). Called when the
lod_group selector swaps away from a substitutive level, so resident
geometry stays bounded to ≈ the visible set rather than accumulating
every level ever shown. The raw chunks remain in the decompressed
cache, so re-selection re-projects cheaply (no network).
Release a lazily-loaded points level's GPU geometry back to the evictable
buffer pool. Peer of :meth:releaseLazyGSplats
for points lod-group children (the finest level of a points-substitutive
ladder). Raw chunks remain in the decompressed cache, so re-selection
re-projects cheaply.
Release a lazily-loaded lines level's GPU geometry back to the evictable
buffer pool. Peer of :meth:releaseLazyPoints /
:meth:releaseLazyGSplats for lines lod-group children (the finest level of
a lines-substitutive ladder).
Release a lazily-loaded mesh level's committed geometry and restore its empty placeholder. Mesh buffers are counted in the resident total but are not pooled. Also release depth-sort state and worker-side centroids so a demoted level retains neither GPU geometry nor sorting data.
Optionalsession: UpdateSessionOptionalloadedViewVersion: numberOptionalsession: UpdateSessionOptionalsignal: AbortSignalOptionalsession: UpdateSessionOptionalloadedViewVersion: numberOptionalsession: UpdateSessionOptionalsignal: AbortSignalOptionalsession: UpdateSessionOptionalloadedViewVersion: numberProject + stage a loaded mesh. Async only because backend selection is; there
is no worker RPC to decline, so unlike the lines/gsplats processors this one
never resolves to null and callers need no staged null-check.
Optionalsession: UpdateSessionOptionalloadedViewVersion: number
Shared loader bookkeeping (registration + failure recording).