Displace
Displace geometry or image pixels by a texture or field.
What it does
Displace pushes pixels or geometry using a texture, a field, or a procedural noise. An image input shifts pixels. A shape, distance field or mesh moves anchors or vertices, along a direction, radially from a point, twisted around an axis, or swirled with a divergence-free curl flow. Wire a second input into Displacement to drive the push from another image or field; left unwired, the node's own procedural source drives it.
An image source stays flat by default. Set Output to 3D and it tessellates into a heightfield mesh, with Grid Density setting how fine that mesh is. A shape or geometry source needs no switch: it promotes to 3D as soon as displacement pushes it off the flat plane.
When to use it
Pushing pixels with a noise or texture: ripple, ruffle, glitch.
Turning a flat image into a bumpy heightfield mesh.
Wobbling, twisting or radially bulging a shape or path.
An area-preserving swirl, Curl mode, instead of a flow that bunches pixels or points together.
Per-shape variation: wire Instance Attribute to a gradient attribute such as
@uso displacement strength varies across a group of shapes.Displacing a captured sequence over time: Temporal mode rolls a live buffer of past frames and blends between them.
| Parameter | Type | Default | What it does |
|---|---|---|---|
source | Raster or Volume or Collection or Frame Sequence or Volume Sequence or Collection Sequence | — | Source to displace - Images, Shapes, SDF, or a captured sequence (Temporal mode) |
displacement | Color Field or Field | — | Displacement map (2D) or scalar field (SDF) |
displacement_channel | String | "" | For a multi-channel displacement field (a captured record): which named channel to sample. |
mode | String | "Directional" | Directional/Radial/Warp/Curl (Curl = divergence-free swirl, area-preserving). 3D adds Normal. |
amount | Number | 10 | Displacement amount in pixels (negative inverts direction) |
output_dimension | String | "2D" | 2D: flat image displacement (raster). 3D: tessellated mesh displaced in space. One of: 2D, 3D. |
grid_density | Number | 256 | Heightfield resolution: vertex count along the longer side. Higher = finer mesh. |
midpoint | Number | 0.500 | Displacement map value treated as no displacement (typically 0.5 for centered maps) |
wrap_mode | String | "Clamp" | Pixels displaced outside the source: Transparent (alpha 0) or wrap the source to fill the output (Clamp / Repeat / Mirror). One of: Transparent, Clamp, Repeat, Mirror. |
channel | String | "Luminance" | Which channel(s) to use for displacement (RG = Red→X, Green→Y). One of: Luminance, Red, Green, Blue, RG. |
direction | Vec3 | (1, 0, 0) | Direction (Directional mode) or center point (Radial/Warp mode) |
anchors_per_segment | Number | 32 | Target anchors per Bezier segment. Higher = more displacement detail (e.g. 32 turns a 4-anchor Circle into ~128 anchors). |
projection | String | "Triplanar" | How to project 2D texture onto 3D surface: Triplanar blends all axes, Spherical wraps around, World pins the pattern to the scene via the texture's placement. One of: Planar X, Planar Y, Planar Z, Triplanar, Spherical, Cylindrical, World. |
projection_scale | Number | 1 | Scale of texture projection (higher = smaller texture pattern) |
instance_attribute | String | "None" | Attribute to read per shape for varying displacement. @u = smooth gradient, @index = stepped. |
time_offset | Number | 0.500 | Temporal: base time position in the captured sequence (0.5 = middle) |
interpolation | String | "Linear" | Temporal: Nearest snaps to the closest frame, Linear blends between frames. One of: Nearest, Linear. |
displacement_attribute | String | "id" | Temporal: attribute driving per-element time offset (e.g. id, pscale, or a custom float) |
buffer_size | Number | 64 | Temporal: live frames kept in the rolling buffer (live raster or collection source) |
strength | Number | 1 | Effect strength / wet-dry (0 = no effect, 1 = full). Editable, wirable, keyframable. |
Gotchas
Midpoint, Channel and Wrap Mode apply only when a raster image drives the displacement, either because the Displacement input carries an image or because the source is an image and nothing is wired to Displacement. Wire a scalar or vector field into Displacement on a shape source and these controls disappear, because the field is sampled directly rather than read as pixel values.
Output appears only for a raster source. On an image, 2D keeps the result a flat picture even when Direction has a non-zero Z, and that axis is ignored until Output is 3D. A shape or mesh source has no toggle and goes 3D on its own once anchors leave the flat plane.
Curl mode ignores Direction entirely. The whole flow comes from the source, so a centre or direction dialled in for Directional, Radial or Warp mode has no effect once Curl is selected.
When a path translates instead of visibly wobbling, raise Anchors Per Segment. A Circle starts with four anchors, and low anchor counts under-sample the displacement so the whole outline moves as one.
Worked example
Add a Displace node and wire an image into Source.
Add a Noise node, or any field, and wire it into Displacement.
Raise Amount to push pixels further. Try Radial mode and drag the centre in Direction to bulge outward from a point instead of sliding sideways.
Switch Output to 3D to turn the rippled image into a heightfield mesh, and raise Grid Density for a finer surface.
See also
Warp · Lens Distort · Panoramic · Fields