SpatialField

← prev index next →

The base concept for a field: a scalar weight defined over space that other elements read to vary an effect from place to place.

Remarks

A field turns "where" into "how much." A spatial field gives every point in the scene a weight based on its position — a radial fade, a linear gradient, coherent noise — normally in the 0–1 range (a remap-curve can reshape or extend it), and consumers use that weight to modulate what they do: a material fades its coverage, a tonemap masks its shading, a constraint scales its effect, a color-source drives a color-map.

By-id resource model. A field is a place-anywhere scene resource: give it an id and consumers reference it with field="#id". One field can drive many consumers at once, and animating the shared field updates all of them together. A spatial field is also a scene-graph node, so its position, rotation, and scale move where its weight lands; setting visualize draws its extents.

Member elements. The spatial fields shape weight by distance or noise: sk-spherical-gradient-field, sk-linear-gradient-field, sk-cube-gradient-field, sk-cylinder-gradient-field, sk-capsule-gradient-field, sk-torus-gradient-field, sk-spline-progress-gradient-field, sk-spline-distance-gradient-field, sk-noise-spatial-field, sk-random-spatial-field, and sk-voronoi-spatial-field. Related field kinds share the same field="#id" model: the stroke fields sk-cross-stroke-field, sk-dash-array-stroke-field, and sk-progress-stroke-field weight along a stroke; sk-composite-field blends several fields into one. Consumers include sk-field-constraint and sk-color-source-field.

The example is a medley: four different field types each drive a different effect, laid out as labeled stations on a ground plane, so the one idea — a weight over space steering a consumer — is visible across the family. A stroke field ramps color along a stroke; a noise field drives a radial push that deforms a sphere's vertices; a spherical field masks a tonemap over a surface; and a linear field drives a color-source, painting the base color by position rather than by light.

Abstract base class — not instantiated directly. Construct one of its concrete subclasses; this class contributes the members below to them.

Properties

Config Properties

PropertyTypeDefaultDescriptionDeclared by
remapCurveanimatable SampledCurve Optional curve that reshapes this field's raw [0, 1] output. SpatialField
visualize boolean false Whether the visualization is visible (wireframe splines + center marker). VisualizableSceneNode
interactiveControlsconfig-only boolean Whether to show interactive controls (draggable markers). Requires visualize. Default: false VisualizableSceneNodeConfig
visualizationMarkerSizeconfig-only number Size of visualization markers in pixels. Default: 20 VisualizableSceneNodeConfig
visualizationColorconfig-only string Color for visualization geometry and markers (CSS color string). Default: VISUALIZATION_HIGHLIGHT_COLOR ('#FF8C00'). VisualizableSceneNodeConfig
visualizationZeroWeightColorconfig-only string Color for zero-weight boundary geometry (outer radius, origin plane, etc.). Default: VISUALIZATION_ZERO_WEIGHT_COLOR ('#888888'). VisualizableSceneNodeConfig
visualizationSplineThicknessconfig-only number Spline stroke thickness in pixels. Default varies by subclass. VisualizableSceneNodeConfig
visualizationSplineOccludedOpacityconfig-only number Opacity of visualization splines when occluded. Default: 0.5 VisualizableSceneNodeConfig
visualizationMarkerOpacityconfig-only number Opacity of visualization markers. Default: 0.9 VisualizableSceneNodeConfig
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
remapPhaseanimatable number 0 Horizontal remap phase — an animatable scalar that translates a present SpatialField
enabled boolean true Whether this field is enabled. When disabled, evaluate() returns 0. SpatialField
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
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
getBoundsInSpace(targetSpaceMatrix: Float32Array): { minX: number; maxX: number; minY: number; maxY: number; minZ: number; maxZ: number; } | null Computes the axis-aligned bounding box (AABB) of this node and its descendants 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

Serve these docs to run the live example. WebGPU needs a secure context — open this page via grunt serve rather than double-clicking the file. The Markup tab works from disk.