RemotionUI

Effector Field

Cinema 4D MoGraph cloner and effectors: clone any element into a grid, radial or linear arrangement and let animatable spherical, linear or noise falloff fields drive each clone. Install with npx remotion-ui@latest add effector-field.

PrimitiveMotion graphicsAdvanced

effector-field30fps · 960×540
Install
$ npx remotion-ui@latest add effector-field

A cloner lays out copies of any element — grid, honeycomb, radial or linear. Fields measure how far inside a region each clone sits, and effectors turn that value into a move toward the camera, a rotation about any axis, a scale, an opacity and a colour. Effectors run in order and sample their fields at each clone's rest position, so one effector pushing clones around never changes which clones the next one selects.

The preview is one grid and three effectors. Two spherical fields travel on expression-driven paths whose period is the clip length, lifting and tinting the floor where they pass; a slow noise field underneath dims and shrinks tiles so it never reads as a flat grid. The crest glow comes from renderClone, which receives each clone's field weight.

FieldParameters
sphericalcenter, radius, falloff (share of the radius that ramps)
linearcenter, angle, length — rises from 0 to 1 across a plane
noisescale, speed, seed, contrast

Thousands of clones. The default renderer="dom" makes each clone an element, so any React child can be cloned. renderer="canvas" draws cloneShape (square, rounded, circle) on one canvas with the same camera maths — the two match tile for tile — and glow adds a single bloom pass. 5,000 clones at 1080p render at ~80ms per frame on canvas, against ~710ms on the DOM path.

Every field takes invert, strength and a blend mode against the fields before it. Centres, radii and effector values are Animatable — static, keyframed with ae-motion, or an expression.

Usage

import { EffectorField } from "@/remotion/primitives/effector-field";

<EffectorField
  layout={{ mode: "grid", columns: 24, rows: 12, spacing: 26 }}
  effectors={[
    {
      fields: [{ shape: "spherical", center: ({ time }) => [Math.cos(time) * 200, 0], radius: 160 }],
      position: [0, 0, 120],
      rotation: [-60, 0, 0],
      scale: 1.5,
      color: "#e8b86d",
    },
  ]}
  tilt={50}
>
  {/* Anything: painted in currentColor */}
  <svg viewBox="0 0 10 10" width="100%" height="100%"><circle cx="5" cy="5" r="5" fill="currentColor" /></svg>
</EffectorField>
Fields: spherical (center, radius, falloff), linear (center, angle, length), noise (scale, speed, seed, contrast); each with invert, strength and blend. children/renderClone are DOM-only; use renderer="canvas" past ~1,000 clones (5,000 at 1080p render in ~80ms/frame).

Agent notes

Install first, then import the copied source component locally. AI guide →

Import
@/remotion/primitives/effector-field
  • Use when: After Effects-style motion graphics built from composable, keyframeable operators.
  • Customize: layout, effectors, width, height, plus copied source for timing, layout, colors, and typography.
  • Rule: do not import this component from the remotion-ui npm package; it is copied into your project.

Usage

Example
import { EffectorField } from "@/remotion/primitives/effector-field"; <EffectorField layout={{ mode: "grid", columns: 24, rows: 12, spacing: 26 }} effectors={[ { fields: [{ shape: "spherical", center: ({ time }) => [Math.cos(time) * 200, 0], radius: 160 }], position: [0, 0, 120], scale: 1.5, color: "#e8b86d", }, ]} tilt={50} />

API Reference

PropTypeDescription
layout*ClonerLayoutgrid, honeycomb, radial (count, radius, sweep, align) or linear (count, step, rotationStep, scaleStep).
effectorsEffector[]{ fields?, position [x,y,z], scale, rotation [x,y,z], opacity, color, strength }, run in order.
widthnumberStage width in px.
heightnumberStage height in px.
cloneSizenumberSize of each clone's box.
colorstringClone colour before tints; children can use currentColor.
childrenReactNodeElement to clone, painted in currentColor. Defaults to a rounded tile.
renderClone(clone: CloneRenderState) => ReactNodePer-clone renderer; receives weight, index, u/v and the tinted colour.
perspectivenumberCamera distance for z moves and x/y rotation.
tiltnumberTilts the cloner plane away from the camera, degrees.
renderer"dom" | "canvas"dom clones any React child; canvas draws cloneShape with the same camera, for thousands of clones.
cloneShape"square" | "rounded" | "circle"Canvas renderer only: the drawn shape.
glownumberCanvas renderer only: bloom radius in px at full field weight.
framenumberRender this frame instead of the current one.

On this page