A geometry in a SceneModel.

See !scene | @xeokit/sdk/model/scene for usage.

Properties

Axis-aligned, non-quantized 3D boundary of the geometry's vertex positions.

colorsCompressed?: IntArrayParam

Vertex RGBA colors, quantized as 8-bit integers.

destroyed: boolean = false

True if this SceneGeometry has been destroyed.

edgeIndices?: IntArrayParam

Edge indices.

This is either an array of 8-bit, 16-bit or 32-bit values.

Complete fixed-topology geometry frames, each carrying replacement positions and optional normals. These are complete vertex states, not deltas from the base geometry. The first frame can act as the geometry's current/base positions when the geometry was authored without top-level positions.

Renderers treat frames as immutable geometry-owned data. Meshes select an interpolation time through SceneMesh.frameTime; changing that time updates per-mesh animation state, not the shared geometry payload.

id: string

ID for the geometry.

lastUpdateFlags: number = 0

Bitmask describing the most recent fixed-count dynamic update. Renderers use this during SceneEvents.onSceneGeometryUpdated to choose a narrow in-place upload path when possible.

model: SceneModel

The SceneModel that contains this SceneGeometry.

Weighted morph target deltas relative to this geometry's base attributes.

numMeshes: number

The count of SceneMeshes that reference this SceneGeometry.

primitive: number
rotations?: FloatArrayParam

Per-splat rotation quaternions — 4 floats per splat, xyzw. Only present for GaussianSplatsPrimitive geometry.

Per-splat scales — 3 floats per splat. Only present for GaussianSplatsPrimitive geometry.

texCoordsCompressed?: Record<number, FloatArrayParam>

Indexed texture-coordinate channels, packed as 32-bit floats.

Channel 0 is equivalent to SceneGeometry.uvsCompressed.

uniqueId: string

The global ID of this SceneGeometry, unique among all SceneGeometrys within the Scene, which is the concatenation of the SceneModel's ID and this SceneGeometry's ID, separated by "__".

uvsCompressed?: FloatArrayParam

UV coordinates, packed as 32-bit floats (one Float32Array of length 2 × vertexCount). UVs ship to the GPU uncompressed so tiling values (UVs outside [0, 1]) survive intact — the shader applies a per-fragment fract() before transforming into the mesh's atlas sub-rect.

uvsDecompressMatrix?: Mat4

4x4 matrix to de-quantize the geometry's UV coordinates, when UVs are provided.

version: number = 0

Monotonically increases each time fixed-count dynamic geometry data is replaced through SceneGeometry.positionsCompressed or SceneGeometry.indices or SceneGeometry.normalsCompressed.

vertexStatesCompressed?: SceneGeometryVertexStateCompressedParams[]

Complete untimed fixed-topology replacement vertex states.

Accessors

Methods