Docs 3D and Particles
Particles2D_POP
A 2D particle simulation as a POP loop: a source image emits particles, curl noise and wind effectors steer them with lookup ranges, trails stretch them, and the loop rides out as points for your own render.
⁂ 3D and Particles ◆ Patreon:Base
This tool unlocks with Patreon. It installs through the same picker as everything else and unlocks with the Patreon Base tier or higher, connected from inside TouchDesigner. Everything else in the toolkit stays free and MIT, and the membership is what keeps that work moving.
What it is
Particles2D_POP is a particle simulation built on POPs, so it runs on the GPU and hands you points. A source image decides where particles are born; each one gets a life, a mass and a drag, and two effectors move it: a curl noise field with its own speed and a wind with variance, each read through an image lookup so a texture can steer the flow. Trails stretch the points along their motion. What comes out is the point cloud, ready for a Render TOP with your own material, or for any POP that takes points.
It is a member of the FNS operator family: pick it from the FNS tab of the OP Create dialog and it lands as one node.
Inputs and output
- in_loopin (POP): optional; points to carry into the loop.
- in_source (TOP): the image particles are born from.
- in_effector_curl (TOP), in_effector_wind (TOP): optional images that steer the curl and wind effectors through their lookups.
- out_loopout (POP): the simulated points.
Parameters
Custom
| Control | Type / default | What it does |
|---|---|---|
| Particles | ||
Start PulseStartpulse |
button | Start the simulation. |
Maximum ParticlesMaxparticles |
number921600 | How many particles can live at once. |
BirthrateBirthrate |
number50000 | How many particles are born per second. |
LifeLife |
number2 | How long a particle lives, in seconds. |
Life VarianceLifevariance |
number0.5 | Random variation of the life of each particle. |
Initial MassInitmass |
number2 | Mass of a new particle: heavier particles react less to forces. |
Initial DragInitdrag |
number1 | Drag of a new particle: how quickly it loses speed. |
Velocity DampingDamping |
number0.1 | Slows every particle down each frame. |
SpeedSpeed2 |
number1 | Overall speed of the simulation. |
| Trails | ||
LengthLength |
number0.037 | How far trails stretch the points along their motion. |
Reset PulseResetpulse |
button | Clear the simulation. |
Curl
| Control | Type / default | What it does |
|---|---|---|
CurlCurl |
xyzw0.5 | Strength of the curl noise field on each axis. |
SpeedSpeed |
xyzw0.04 | How fast the curl noise field moves. |
Open Curl NoiseOpennoise |
button | Open the curl noise generator to edit it. |
| Lookup | ||
RgbRgb |
menuLuminance | Which channel of the curl effector image is read. |
NormalizeNorm |
on / offoff | Normalize the curl effector image before it is remapped. |
FromrangeFromrange |
number0 | The input range of the curl effector image. |
TorangeTorange |
number0 | The range the curl effector image is mapped to. |
Exponent ValueExpval |
number1 | Exponent applied to the curl effector image: 1 is linear. |
UpdateUpdatecurl |
on / offon | Apply the curl effector. |
Wind
| Control | Type / default | What it does |
|---|---|---|
WindWind |
xyzw0 | Wind force on each axis. |
VarianceWindvariance |
xyzw0 | Random variation of the wind on each axis. |
Wind Variance SpeedWindvariancespeed |
xyzw0 | How fast the wind variation changes. |
Open VarianceOpennoise2 |
button | Open the wind variance noise generator to edit it. |
| Lookup | ||
RGBRgbwind |
menuRGBA Average | Which channel of the wind effector image is read. |
NormalizeNormwind |
on / offon | Normalize the wind effector image before it is remapped. |
From RangeFromrangewind |
number0 | The input range of the wind effector image. |
To RangeTorangewind |
number0 | The range the wind effector image is mapped to. |
Exponent ValueExpvalwind |
number1 | Exponent applied to the wind effector image: 1 is linear. |
UpdateUpdatewind |
on / offoff | Apply the wind effector. |