FUSION · NODE REFERENCE
pCustomForce
Programmable particle force and torque
A programmable particle-force processor: expressions calculate Force X/Y/Z and Torque X/Y/Z while Number/Position controls, two image inputs, Conditions and Region provide art-directable data and filtering.
pCustomForce
Overview
What pCustomForce does
pCustomForce belongs inside a particle chain between pEmitter/pImageEmitter and pRender. It does not create particles and it does not output a finished image: an existing particle stream enters the node, expressions calculate an influence, and the result remains particle data until pRender.
The critical distinction from pCustom is how the change is applied. pCustom directly rewrites particle properties such as Position or Velocity. pCustomForce calculates Force and Torque that participate in the simulation of motion and rotation. When the task is fundamentally a physical influence or field, pCustomForce is usually cleaner than repeatedly rewriting state with pCustom.
pCustomForce has three permanent inputs: orange Particles, green Image 1 and magenta Image 2. Image 1/2 are dedicated to custom image calculations and pixel-read functions. They are real 2D image inputs, not masks and not particle streams.
The current Resolve 21 prose contains an editorial inconsistency: the pCustomForce introduction mentions 'three image inputs', but its Inputs section immediately describes three inputs total as Particles plus Image 1 and Image 2. This article follows the concrete Inputs inventory: one particle input and two image inputs.
A fourth input is conditional. Selecting Region = Bitmap or Mesh exposes a dynamic Region socket. Bitmap accepts a 2D image/selectable channel and Mesh accepts a 3D mesh. The reference describes this socket as teal or white depending on how and when it appears.
The pCustomForce Inspector follows the same overall structure as pCustom: Numbers, Positions, Setup, Intermediate and a dedicated Force layer, followed by the common Conditions and Region controls. It is useful to treat the node as a small program with input controls, staged calculations and final force/torque expressions.
Numbers expose eight animatable Number In 1–8 controls available to expressions as n1…n8. They are the preferred place for amplitude, frequency, falloff, attraction strength or torque coefficients that should remain adjustable without editing the expression text.
Positions expose four point controls, Position 1–4, for targets, attractors, axes and other reference points. The pCustomForce introduction calls these four XY position values while the related pCustom control family documents XYZ components, so production rigs that depend on Z should be verified once in the exact target Resolve build.
Setup 1–8 are intended for shared preparation before per-particle force math. Intermediate 1–8 provide a second staging layer so long formulas can be decomposed into reusable steps before Force/Torque expressions are evaluated.
Resolve 21 is internally inconsistent about the complete range of Setup/Intermediate result variables: the UI is described as eight Setup and eight Intermediate fields, while different passages enumerate s# and i# ranges differently. Use the clearly documented lower indices as the safe baseline and live-test higher result variables before shipping a dependent template.
The Force layer contains independent expressions for Force X, Force Y and Force Z. These values are not a new Position and they do not directly replace Velocity. They describe a force contribution, so even a small constant value can produce a progressively larger trajectory change across playback.
Torque X/Y/Z are the rotational counterpart of custom force. Torque affects rotational motion and is easiest to evaluate with a particle style whose orientation is visibly asymmetric; a symmetric point can make real torque appear visually absent.
Because pCustomForce uses the Custom-style expression model, force expressions can read the current particle state and utility variables used by the shared system: position/velocity/rotation/spin, time, age/lifespan, Number/Position controls, image coordinates and Region variables. Reading those values is not the same as directly writing them; pCustomForce returns force/torque values.
Image 1/2 support image-driven fields. Aspect-aware coordinates pxi1/pyi1 and pxi2/pyi2 let expressions sample the attached images at a particle's position, while w1/h1 and w2/h2 expose input dimensions. Custom-family pixel-read functions can therefore convert map brightness or color into force.
Region variables provide spatial context to the expression: rgnhit represents contact, rgndist represents distance, condscale represents region-condition strength, rgnix/rgniy/rgniz describe the intersection position, and rgnnx/rgnny/rgnnz describe the surface normal. These signals support custom falloff, repulsion and surface-relative force logic.
Conditions filter which particles receive the custom force. Probability is evaluated for each particle on each frame; Start/End Age define a normalized fraction of particle lifespan; Set Mode and Set 1–32 filter Sets assigned by upstream particle tools.
Region Mode adds a spatial gate. Built-in All, Bezier, Cube, Line, Rectangle and Sphere regions are configured inside the Inspector and require no external cable. Only Bitmap/Mesh expose the dynamic Region input, which must not be confused with permanent Image 1/Image 2.
For debugging, begin with pEmitter → pCustomForce → pRender, Probability = 1 and one very small Force component. Add a second axis, Torque, image sampling, Conditions and Region one at a time. This makes expression errors easier to distinguish from particle-topology problems.
Evaluate force across time rather than from one still frame. An early frame can look almost identical to baseline because force changes subsequent motion. Compare several playback frames against a branch without pCustomForce, and avoid large unbounded values that can destabilize the simulation.
Image 1/Image 2 and Region can be used simultaneously but solve different problems: image inputs feed data into expressions while Region limits where or when the node applies. Even with all inputs connected, pCustomForce output remains a particle stream and visible RGBA appears only after pRender.
When to use it
Create a physically integrated force field that built-in particle forces do not provide
Build custom attraction or repulsion around Position 1–4
Create procedural oscillation or wind from time, age and Number In controls
Control rotational motion with Torque X/Y/Z
Drive force magnitude or direction from Image 1/Image 2 pixel samples
Build Region-aware force from distance, intersection or surface normal
Expose expression coefficients through Number In 1–8 for animation
Restrict force by Probability, age, Sets or spatial Region
pCustomForce in context
Screenshots referenced by this article. Open an image to inspect it at full size.
Example for pCustomForce.
Original imageExample for pCustomForce.
Original imageExample for pCustomForce.
Original imageExample for pCustomForce.
Original imageExample for pCustomForce.
Original imageExample for pCustomForce.
Original imageExample for pCustomForce.
Original image