Zarr path (e.g. "group/channel_gfp") — used as unique key
Display name (last segment of path)
Geometry type the user sees this layer as. For specialized groups
(kind=lod / kind=partition), this is the resolved display_type attr
from disk — not 'group'.
OptionalkindSpecialized-group kind, if the underlying scene-graph node is a
kind=lod or kind=partition Group. Drives the layer-header badge and
the inline LOD-level dropdown.
Whether the layer is visible in the scene
Opacity (0–1)
Absorption coefficient κ (≥ 0; only meaningful in volumetric mode)
Gsplats display gain — the panel's Brightness (display_gain; > 0,
identity 1). Brightness relative to the stored amplitudes, which a
luxar gsplat convert scene keeps in source data units; multiplies every
amplitude-linear term of the draw and never the colormap window. RAW (this
node's own attr), like opacity: composeEffective multiplies the ancestry.
The AUTHORED display gain (the node's own display_gain at load; 1 when
absent) — the opening exposure. The Brightness control shows and edits
brightness / authoredBrightness (×1 = as opened), double-click returns to
it, and a bookmark omits a brightness that still equals it.
OptionalamplitudeThe unit of the stored splat amplitudes (amplitude_unit, e.g.
"counts above background"; "a.u." when the producer could not say), or
undefined when the scene does not label them. Read off the node, else its
first gsplats descendant (a kind=partition / kind=lod wrapper's leaves).
OptionalamplitudeThe subtracted background level in that unit (amplitude_offset), display-only.
OptionalsourceThe SOURCE's intensity span above that level (source_data_range), listed in
the window's tooltip ("Data range: 0 – 1,597 (floor 405)"). Splat amplitudes
are per-Gaussian PEAKS — overlapping Gaussians sum to a voxel's value — so
the amplitude window sits well below this range.
Mesh shade floor (0–1) — the §6.2 wrapped-diffuse ambient. Only meaningful on a
mesh layer, where it is what keeps a silhouette readable rather than black; 1.0
removes the diffuse gradient; specular remains independently controlled.
Mesh wrapped-diffuse falloff exponent (> 0) — the §6.2 shade_exponent. 1.0 is the
plain linear wrap. Mesh-only, like the three around it.
Mesh additive specular strength (0–1).
Mesh specular highlight exponent (> 0).
Mesh shading capability for the layer controls. Only none is authoritative;
smooth versus flat ignores the material's view-dependent normal-frame check.
OptionalmaterialWhich material family a mesh layer renders with. 'luxar' (the house shader,
and what every non-mesh layer carries) shows the shading sliders;
'physical' hides them and shows the physicalKnobs sliders instead.
OptionalphysicalThe LIVE physical knobs in material space, seeded from the authored attrs and knob defaults. Slider mapping is presentation-only, so values beyond a finite track remain intact. Absent for every non-physical layer.
Mesh opaque-mode cutout threshold (0–1) — the §6.2 alpha_cutoff.
Only meaningful in opaque, which is a NARROWER condition than the other four
(they apply in every blending mode when shading is lit), so the panel gates its
slider on the mode as well as the type — the same shape as absorption's
volumetric gate.
Current display-range minimum (maps to intensity+offset in shader)
Current display-range maximum
Slider lower bound. Wide enough to reach every window the layer can
usefully take: the mode's default (scalar range / identity), the authored
intensity/offset window, and — for a direct-colour layer — its
color_data_range, so "stretch these colours" stays one drag away.
Slider upper bound (see LayerInfo.dataMin).
Gamma correction value
Blending mode
Whether this layer OWNS a blend mode — authored on the node ITSELF on disk,
or chosen by the user via the panel. When false, blendingMode is merely the
inherited/defaulted value shown in the dropdown, and the layer must not act
as a blending_mode SETTER: liveLayerAttrs emits the attr only when this
is true (a plain group layer would otherwise push its additive placeholder
onto a mesh leaf and bury the mesh's own opaque default — #1272), and
composeEffective's subtree-drop fires only when this is true (a wrapper
owning no mode has no control value to impose, so it must not suppress a
descendant's authored mode — #1275).
Deliberately the node's OWN attr, not the composed ancestry: a layer that merely INHERITS an ancestor's mode must not re-emit it as its own setter — the panel snapshot would go stale the moment the ancestor layer's live pick diverges from disk, and the re-emitted copy (being nearer the leaf) would shadow the ancestor's newer choice.
OptionallayerEffective cross-layer draw order (LAYER_ORDER_SPEC.md), including an
inherited value, or undefined when the ancestry states none. Higher =
nearer the camera = drawn later.
OptionalinheritedEffective order inherited from ancestors when this layer owns none.
Whether the level is EXPLICIT — the node's OWN attr, or a user pick in the
panel — as opposed to inherited or absent. Same reasoning as
blendingModeExplicit: re-emitting an inherited level as this layer's own
would change which node owns the setter and make clearing the ancestor no
longer restore auto here.
Whether this layer is selected in the list
OptionalsoundPresent on type === 'sound' layers only.
OptionalcolormapActive colormap name (undefined = direct RGB colors)
OptionalcustomThe authored LUT (colormap_lut bytes, 256 × RGB or RGBA) when the layer's
AUTHORED palette is 'custom' — how the compiler stores every non-builtin
palette. Lets the dropdown, the row menu and the legend name and draw it;
undefined for a builtin or no authored palette.
Whether a colormap can render on this layer: always for gsplats (the amplitude is the scalar), for points / lines / mesh only with scalars, for a group when a data descendant can — or whenever a palette is authored.
OptionallabelExact categorical vocabulary exposed by gsplat label_ids.
Render deterministic categorical colours instead of authored RGB.
OptionallabelExact class id selection; undefined shows all classes.
OptionalscalarScalar data range for colormap normalization
OptionalcolorAuthored RGB spread (color_data_range). Never the starting window — see
LayerInfo.dataMin — but kept so a colormap toggle can restore the
direct-colour slider bounds, symmetric with LayerInfo.scalarDataRange.
Whether the current display window is a SCALAR window (a colormap is in
play for the layer — on the node or a descendant) rather than an
authored-RGB one. LayerApplyEngine.applyComposed routes on this per
leaf: a leaf the C1 guard keeps on direct colour must NOT receive the
scalar window as a colour gain (a mixed group layer contains both kinds).
Follows the colormap toggle via LayerStateManager.setColormapWindow.
OptionallodFor kind === 'lod' layers: number of child levels. Drives the
"Active level" dropdown's option count and the "N LODs" badge.
Absent for non-LOD layers.
OptionalpartFor kind === 'partition' layers: number of BSP child parts. Drives
the "N parts" badge on the layer header. Absent for non-Partition
layers.
OptionalnestedFor kind === 'partition' layers that wrap kind=lod descendants:
absolute paths of every nested lod_group in the subtree. The
"Active level" dropdown on the wrapper broadcasts to every path
(clamped per-group by LODGroupRegistry.setSelectorMode on
ragged ladders). Absent for non-Partition layers and for Partition layers
with no nested LODs.
Also used to compute the [N parts × M LODs] combined badge:
when this list is non-empty, M is the maximum child count across
nested groups (matches the dropdown's "highest level offered"
affordance).
OptionalnestedMaximum LOD child count across the layer's nested lod_groups.
Used by the dropdown to size its option list and by the combined
badge. Absent unless nestedLodGroupPaths is non-empty.
Information about a single layer in the Layers panel