CustomWGSLPointConstraint

← prev index next →

Displaces every point of a host with a GPU kernel you write inline in WGSL — the escape hatch for any per-point deformation the built-in point-constraints don't cover.

Remarks

This is the fully-programmable member of the PointConstraint family: like every point-constraint it runs a GPU kernel over all of a host's points at once (a mesh, a spline, or a sk-cloner). What is unique here is that you supply the kernel body: the engine owns the scaffold (world-space sampling, the field-weight range, per-target buffer I/O) and calls your computeDisplacement() for each point, plus an optional computeGradient() when the result should also recompute normals.

Key attributes. wgsl holds the kernel source — at minimum a computeDisplacement(worldXZ) function returning a world-space offset. Its tunable parameters come from sk-wgsl-uniform elements attached to it, read inside the kernel through generated skUniform_<name>() accessors, so each is independently animatable. affects-normals turns on the computeGradient() path so shading and cloner orientation follow the deformed surface. max-displacement reports the kernel's worst-case travel so bounds stay correct. It is the per-point cousin of sk-compute-node, which produces whole output buffers that compute-buffer sources consume by reference.

Related. For a ready-made wave there is sk-ocean-displacement-point-constraint; for field-weighted translate/scale/rotate there is sk-simple-point-constraint. Its single-node CPU analogue is sk-field-constraint.

Constructor

constructor(config?: { wgsl?: string; src?: string; affectsNormals?: boolean; maxDisplacement?: number; timeDependent?: boolean; show?: boolean; fieldWeightRange?: readonly [number, number] })

Properties

Config Properties

PropertyTypeDefaultDescriptionDeclared by
wgsl string "" Inline WGSL shader code. Ignored while src is set. CustomWGSLPointConstraint
src string External WGSL source URL (the src attribute), or null if none. CustomWGSLPointConstraint
affectsNormalsread-only boolean false Whether the kernel recomputes normals / cloner orientation from the CustomWGSLPointConstraint
maxDisplacement number 0 Analytic upper-bound displacement magnitude (world units), used to CustomWGSLPointConstraint
timeDependent boolean false Whether the kernel must be re-dispatched every frame. CustomWGSLPointConstraint
show boolean true Whether the constraint is active. CustomWGSLPointConstraint
fieldWeightRangeanimatable readonly [number, number] The [lo, hi] range the normalized field weight maps onto. PointConstraint

Other Properties

PropertyTypeDefaultDescriptionDeclared by
hasEffectiveWGSLread-only boolean Whether usable effective WGSL is available. false while a src is set CustomWGSLPointConstraint
targetread-only ConstrainablePointsHost | null The target host this modifier applies to, or null before PointConstraint
fieldread-only Field | null The field used by this point constraint, if any. PointConstraint
sceneread-only any Gets the Scene this animatable belongs to, if any. SkenraAnimatable
animationsread-only SkenraAnimation[] Public getter for the animations affecting this target. SkenraAnimatable

Methods

MethodDescriptionDeclared by
configure(config: CustomWGSLPointConstraintConfig): void Declarative configuration API — sets the WGSL + params after the CustomWGSLPointConstraint
addUniform(name: string, value: number): WGSLUniform Imperative twin of authoring a <sk-wgsl-uniform> child. CustomWGSLPointConstraint
addF32ArrayUniform(name: string, values: readonly number[]): WGSLF32ArrayUniform Imperative twin of authoring a <sk-wgsl-f32-array-uniform> child. CustomWGSLPointConstraint
addVec2Uniform(name: string, x: number, y: number): WGSLVec2Uniform Imperative twin of authoring a <sk-wgsl-vec2-uniform> child. CustomWGSLPointConstraint
addVec3Uniform(name: string, x: number, y: number, z: number): WGSLVec3Uniform Imperative twin of authoring a <sk-wgsl-vec3-uniform> child. CustomWGSLPointConstraint
addVec4Uniform(name: string, x: number, y: number, z: number, w: number): WGSLVec4Uniform Imperative twin of authoring a <sk-wgsl-vec4-uniform> child. CustomWGSLPointConstraint
addColorUniform(name: string, color: ColorInput): WGSLColorUniform Imperative twin of authoring a <sk-wgsl-color-uniform> child. CustomWGSLPointConstraint
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

const sine = new CustomWGSLPointConstraint({
    wgsl: SINE_WAVE_WGSL,           // reads skUniform_amplitude() etc.
    maxDisplacement: 50,
    affectsNormals: true,
});
plane.addPointConstraint(sine);