Cloner

← prev index next →

Stamps copies of its content across a set of points — the way to place many instances (a grid of spheres, particles over a mesh's surface) without authoring each one by hand.

Remarks

The cloner is a SceneNode that instances geometry on the GPU: it takes what to clone from its content children (any clonable node — a mesh, a spline) and where to place them from a points-source. One points-source and one small template become thousands of positioned copies, and when the points-source changes the clones follow automatically.

Key attributes. mode chooses how clones are drawn: object renders each as a full instance (its own transform, pickable), vertex merges them into one particle-like batch that is cheaper at high counts. clone-scale uniformly resizes every clone. align-to-normal orients clones to the source surface's normal (with alignment-axis selecting which local axis points along it) — useful for studding a surface. illumination-min-scale / illumination-max-scale size clones by how much light they receive.

Related. The points-source child decides the layout: sk-grid-points-source for a lattice, sk-mesh-vertex-points-source to sit on a mesh's vertices, and the other *-points-source shapes. To drive each clone individually on the GPU (push them from a point, weight them by a field) add a sk-simple-point-constraint — the per-clone counterpart to the single-node constraints.

Constructor

constructor(config?: { pointsSource?: PointsSource; mode?: ClonerMode; alignToNormal?: boolean; applyScale?: boolean; alignmentAxis?: AlignmentAxis | AxisOrientation; cloneScale?: number; illuminationEnabled?: boolean; illuminationMinScale?: number; illuminationMaxScale?: number; illuminationUseShadows?: boolean; reportBounds?: boolean; overlay?: boolean; overlayOccludedOpacity?: number; id?: string; x?: number; y?: number; z?: number; h?: number; p?: number; b?: number; quaternion?: Quaternion; sx?: number; sy?: number; sz?: number; s?: number; class?: string; style?: string })

Properties

Config Properties

PropertyTypeDefaultDescriptionDeclared by
pointsSource PointsSource — The source providing points for clone placement. Cloner
mode ClonerMode — The current cloning mode. Cloner
alignToNormal boolean — Whether clones are oriented to align with point normals. Cloner
applyScale boolean — Whether each point's per-clone scale (from the source localMatrix) is Cloner
alignmentAxis AlignmentAxis | AxisOrientation — The local axis that aligns with the normal direction. Cloner
cloneScaleanimatable number — The uniform scale factor applied to each clone. Cloner
illuminationEnabled boolean false Gets whether illumination-based scaling is enabled. Cloner
illuminationMinScaleanimatable number — Gets the minimum scale for illumination-based scaling. Cloner
illuminationMaxScaleanimatable number — Gets the maximum scale for illumination-based scaling. Cloner
illuminationUseShadows boolean false Gets whether shadow maps are used for illumination visibility. Cloner
reportBoundsconfig-only boolean — Whether this cloner reports bounds for auto-clipping. ClonerConfig
overlay boolean false Whether this cloner renders as an overlay with depth-aware translucency. Cloner
overlayOccludedOpacity number 0.3 Alpha multiplier for overlay fragments occluded by scene geometry. Cloner
idconfig-only string — Unique identifier for the node, reflected to the host id attribute. SceneNodeConfig
xanimatable number 0 Gets the X position component. SceneNode
yanimatable number 0 Gets the Y position component. SceneNode
zanimatable number 0 Gets the Z position component. SceneNode
hanimatable number 0 Gets the heading (Y-axis) rotation in radians. SceneNode
panimatable number 0 Gets the pitch (X-axis) rotation in radians. SceneNode
banimatable number 0 Gets the bank (Z-axis) rotation in radians. SceneNode
quaternionanimatable Quaternion — Gets the rotation as a quaternion. SceneNode
sxanimatable number 1 Gets the X-axis scale factor. SceneNode
syanimatable number 1 Gets the Y-axis scale factor. SceneNode
szanimatable number 1 Gets the Z-axis scale factor. SceneNode
sconfig-only number — Uniform scale factor for all axes (overrides sx, sy, sz if provided) SceneNodeConfig
classconfig-only string — Standard HTML class applied to the node host at construction SceneNodeConfig
styleconfig-only string — Standard inline style applied to the node host at construction SceneNodeConfig

Other Properties

PropertyTypeDefaultDescriptionDeclared by
castShadow boolean true Gets whether this cloner's instances cast shadows. Cloner
cloneCountread-only number — The number of clones that will be created. Cloner
templateCountread-only number — The number of template units for instancing. Cloner
hRad number 0 Gets the heading (Y-axis) rotation in radians. SceneNode
pRad number 0 Gets the pitch (X-axis) rotation in radians. SceneNode
bRad number 0 Gets the bank (Z-axis) rotation in radians. SceneNode
hDeg number 0 Gets the heading (Y-axis) rotation in degrees. SceneNode
pDeg number 0 Gets the pitch (X-axis) rotation in degrees. SceneNode
bDeg number 0 Gets the bank (Z-axis) rotation in degrees. SceneNode
xBasebase value number — Gets the base (non-animated) value of X position. SceneNode
yBasebase value number — Gets the base (non-animated) value of Y position. SceneNode
zBasebase value number — Gets the base (non-animated) value of Z position. SceneNode
hBasebase value number 0 Gets the base (non-animated) value of heading (Y-axis rotation). SceneNode
pBasebase value number 0 Gets the base (non-animated) value of pitch (X-axis rotation). SceneNode
bBasebase value number 0 Gets the base (non-animated) value of bank (Z-axis rotation). SceneNode
quaternionBasebase value Quaternion — Gets the base (non-animated) quaternion rotation. SceneNode
sxBasebase value number — Gets the base (non-animated) value of X-axis scale. SceneNode
syBasebase value number — Gets the base (non-animated) value of Y-axis scale. SceneNode
szBasebase value number — Gets the base (non-animated) value of Z-axis scale. SceneNode
draggable boolean false Gets whether this node can be dragged. SceneNode
parentread-only SceneNode | null — The parent node in the scene graph, or null at the root. SceneNode
sceneread-only any — Gets the Scene this node belongs to, if any. SceneNode
posread-only Point3D — Gets the world-space position of this node. SceneNode
matrixread-only Float32Array<ArrayBufferLike> — Gets the computed 4x4 transformation matrix. SceneNode
animationsread-only SkenraAnimation[] — Public getter for the animations affecting this target. SkenraAnimatable

Methods

MethodDescriptionDeclared by
addPointConstraint(modifier: PointConstraint): void Adds a PointConstraint to this cloner. Cloner
removePointConstraint(modifier: PointConstraint): boolean Removes a PointConstraint from this cloner. Cloner
getBoundsInSpace(targetSpaceMatrix: Float32Array): { minX: number; maxX: number; minY: number; maxY: number; minZ: number; maxZ: number; } | null Returns the world-space AABB for this cloner's instances. Cloner
getTemplateRadius(): number Computes the bounding sphere radius of the cloned content children. Cloner
addMaterialPaint(material: Material, paintTarget: PaintTarget, options?: any): Paint Applies a material to this node for a specific paint target. SceneNode
getPaints(): ReadonlyMap<PaintTarget, Paint> — SceneNode
getOwnPaints(): readonly Paint[] Gets only the paints directly applied to this node (not inherited). SceneNode
removePaint(paint: Paint): void Removes a paint from this node. SceneNode
getWorldPosition(): number[] Returns this node’s origin in world space. SceneNode
getWorldMatrix(): Float32Array<ArrayBufferLike> Returns this node’s world transform — its local transform composed with all ancestor transforms. SceneNode
setViewportPosition(camera: AbstractCamera, x: number, y: number, z: number = 0.5): boolean Sets the node's local translation so that it appears at the specified viewport position. SceneNode
getViewportPosition(camera?: AbstractCamera): [number, number, number] | null Returns the node's current world position projected to viewport CSS pixel coordinates. SceneNode
setNDCPosition(camera: AbstractCamera, ndcX: number, ndcY: number, ndcZ: number = 0.5): boolean Sets the node's local translation so that it appears at the specified NDC position in the viewport. SceneNode
animate(firstArg: TypedKeyframe<this>[] | TypedPropertyIndexedKeyframes<this> | Record<string, any> | globalThis.Keyframe[] | globalThis.PropertyIndexedKeyframes | null, secondArg?: number | KeyframeAnimationOptions | globalThis.KeyframeAnimationOptions): SkenraAnimation & Animation Creates a new SkenraAnimation for this target per Web Animations API. SkenraAnimatable
removeAnimation(animation: SkenraAnimation): boolean Removes a specific animation from this object. SkenraAnimatable
constrain(type: K, config: ConstraintConfigMap[K]): ConstraintReturnMap[K] Creates a constraint on this Animatable using a fluent API. SkenraAnimatable

Example

// Place small spheres at each vertex of a larger sphere
const baseSphere = new Sphere({ id: 'base', radius: 2, segments: 2 });
const pointsSource = new MeshVertexPointsSource({ mesh: baseSphere });

const cloner = new Cloner({ id: 'cloner',
    pointsSource,
    alignToNormal: true,
    cloneScale: 1
});

// Add the content to clone as a child
const dotSphere = new Sphere({ id: 'dot', radius: 0.1 });
cloner.appendChild(dotSphere);

scene.appendChild(cloner);