The physical bounding volume of the object.
32-bit collision layer bitmask this object belongs to (default: 1).
32-bit collision mask specifying which layers this object interacts with (default: 0xFFFFFFFF).
Objects to hide (alongside this node itself) while rendering the reflection -- typically the
visible mesh whose material samples renderTarget (e.g. a mirror floor's reflectionMap).
Unlike DynamicReflectionProbe, which can just hide its own parent (a probe is always a
child of the reflective object it orbits), a PlanarReflectionNode and the mesh that samples
its texture are typically unrelated siblings in the scene graph, so there's no structural
relationship to hide automatically. Leaving the reflective mesh visible during its own
reflection sub-render both looks wrong (it would show its own stale reflection recursively)
and is invalid on WebGPU: renderTarget's texture would be bound as a RenderAttachment
(this render) and a TextureBinding (this mesh's material) in the same pass.
Optional integer identifier for deterministic physics solver sorting and netcode lockstep.
Whether this object should generate bounds and participate in physics/raycasting. Defaults to true.
If true, this object acts as a trigger/sensor (fires trigger events without physical force).
OptionalonOptionalpendingSet by Scene on its hidden root object. Lets remove() notify the owning scene to queue
GPU-resource release for a discarded subtree even when called on a nested object directly
(someParent.remove(child)) instead of through Scene.remove() -- see remove()/add().
OptionalprefabName of the Maker prefab this node was instantiated from, if any -- provenance only, per
ADR 0010's Phase 2 "stamped copies" decision: no live link back to the source, just a record
of where this subtree came from. Round-tripped via the SW_prefab_instance glTF extension
(WorldWriter/GltfLoader).
OptionalquaternionOptionalrigidOptionaltagOptional app-defined category tag, for typed identification instead of matching on name.
Custom user-defined data storage dictionary.
ReadonlyuuidStatic ReadonlyinspectorBase schema every object exposes regardless of subclass -- see
collectInspectorSchema() in ./Inspectable.js, which merges this with whatever a
subclass (e.g. AbstractLight, AbstractMaterial) declares on top. Transform fields use
path since position/rotation/scale are nested Vector3D instances, not own properties.
Set only by WebGPU Hierarchical-Z occlusion culling (see docs/adr/0008-...), one frame
stale by design (mapAsync GPU->CPU readback is never synchronous). Unlike inFrustum,
NOT reset every frame -- only WebGPURenderer.applyPendingOcclusionResults() writes it, for
whichever objects it has a fresh readback for; everything else keeps its last known value.
Always false on WebGL1/WebGL2 (never written there), making Scene._collectVisible()'s
check a permanent no-op on those backends.
Returns an independent copy of this object's subtree -- own uuid, own transform, own
material (via AbstractMaterial.clone()), own behaviors (via Behavior.clone(), re-attached
so onAttach() runs against the new instance), and a recursive clone of every child. Used by
Maker's Duplicate command.
geometry and any texture references stay shared by reference -- immutable data, same as
every other "place another instance" workflow in the engine. parent/bounds reset (the
caller reparents and bounds recompute lazily); rigidBody is deliberately dropped rather
than shared, since two objects driven by the same live physics body would move together.
Known gap: skinned meshes aren't specially handled -- a cloned SkinnedMesh's skeleton
would still reference the original subtree's bones, not the freshly cloned ones alongside
it. Not a concern for Maker's realistic Duplicate targets (props, lights, prefab instances);
character rigs go through the Prefab/glTF pipeline instead.
Reads this object's position in world space, i.e. after resolving the full parent
chain -- unlike position, which is always local to its immediate parent. Requires
worldMatrix to be current (see updateMatrixWorld()).
Optional vector to write into, to avoid allocating one per call. If omitted, a shared module-level scratch is used and overwritten by the next call.
Traverses the object and all its descendants in depth-first order, executing the callback for each.
Static_StaticresetResets the global object ID generator (useful for deterministic tests).
A node that renders the scene from a mirrored perspective into a RenderTarget.