Based on: Touch Designer Dreamscape Particle Cloud Tutorial by söla
This recipe details the implementation of a GPU-accelerated particle system utilizing TouchDesigner’s Point Operators (POPs) for efficient particle simulation, coupled with a recursive feedback topology to generate persistent visual trails. The technique produces a characteristic volumetric aesthetic through strategic combination of noise-driven particle motion, point sprite rendering, and multi-stage post-processing.
What You’ll Build
A real-time particle system where thousands of points:
- Are seeded from a 3D mesh or noise field
- Drift and swirl driven by a Noise force
- Render as glowing soft points
- Pass through a feedback + blur chain for the dreamy trail effect
Operators used: SOP to POP, Noise POP, Force POP, Limit POP, POP SOP, Sprite SOP, Point Sprite MAT, Render TOP, Feedback TOP, Blur TOP, Level TOP, Composite TOP
1. Create the Source Geometry
This defines the initial positions of the particles.
- Drop a
Sphere SOP(or any mesh you like —Grid,Torus, etc.). - Set its resolution high enough to give you a dense point cloud (e.g., rows/columns = 50).
- Optionally add a
Noise SOPafter it to scatter points off the surface. - End the chain with a
Null SOP— name itGEO_SOURCE.
2. Convert Geometry to POPs
- Drop a
SOP to POPnode. - Set its SOP parameter to
op('GEO_SOURCE'). - This seeds one particle per point of the geometry, inheriting its XYZ position.
Tip: In the
SOP to POPparameters, set Attribute Scope toP Nto bring in position and normal data which you can use later for directional forces.
3. Add Movement with Noise
- Connect a
Noise POPafter theSOP to POP. - Set Type to
AlligatororSimplexfor smooth organic motion. - Increase Amplitude to around
0.005–0.02— small per-frame nudges add up to fluid movement. - Animate the Offset parameter over time to make the noise field move:
- Right-click Offset Z → Expression → type
absTime.seconds * 0.1
- Right-click Offset Z → Expression → type
4. Add a Gravity / Attractor Force (Optional)
- Drop a
Force POP. - Set Type to
Point Attractor. - Set the Center to
0, 0, 0(or animate it). - Keep the Strength low (
0.001–0.005) so particles drift toward center without collapsing.
This keeps the cloud from drifting off screen over time.
5. Contain the Points (Limit POP)
- Add a
Limit POPat the end of the chain. - Set Type to
Loopand define a bounding box slightly larger than your geometry. - This wraps particles that escape back to the other side, keeping the cloud perpetual.
6. Render the Particles
To render POP points, bring them back into SOP space and use a standard Geo COMP + Render TOP setup.
- Add a
POP SOPat the end of your POP chain — this outputs the particle positions as SOP points each frame. - Connect the POP SOP output to a
Sprite SOP, then toout1. - Create a
Geo COMPand set its SOP to the POP SOP chain. - On the Geo COMP, assign a
Point Sprite MATin the material slot.- Point Size:
2–5pixels
- Point Size:
- Add a
Camera COMP,Light COMP, andRender TOP:- Resolution:
1920 × 1080(or your output resolution) - Background Color: pure black (
0, 0, 0, 1)
- Resolution:
The result is white/grey dots on black — the glow comes in the next step.
7. Colorize the Points
Insert a Level TOP after the Render TOP:
- Opacity: 1
- Brightness: slight boost
Then add a HSV Adjust TOP (or use a Color Correct TOP) to shift particle color into the hue you want — soft blues, magentas, or warm yellows work well for the dreamscape look.
8. The Dreamscape Glow — Feedback Loop
This is the key step that creates the soft trails and bloom.
Render TOP
→ Composite TOP ←──────────────────┐
↓ │
Level TOP (darken: ~0.95) │
↓ │
Blur TOP (size: 3–6px) │
↓ │
Feedback TOP ────────────────────-┘
↓
(composite new frame onto faded trail)
Step by step:
- Drop a
Feedback TOP. Set its Target TOP to itself (or aNull TOPat the end of the chain — see Quartz’s Feedback Loops page for details). - After the Feedback TOP, add a
Level TOPand set Opacity to0.93–0.97. This dims the old frame slightly each tick. - Add a
Blur TOP(size 3–8px) to soften the fading trail. - Feed this blurred+dimmed output into a
Composite TOP:- Input 0: Current
Render TOPoutput (new frame) - Input 1: Feedback output (old trails)
- Operation:
AddorScreen
- Input 0: Current
9. Final Post-Processing
After the Composite:
| Node | Settings | Purpose |
|---|---|---|
Blur TOP | Size: 8–20px | Adds soft bloom around bright points |
Level TOP | Brightness +10%, Contrast +5% | Punches up the image |
HSV Adjust TOP | Hue rotate over time | Slowly shifts color over time |
Null TOP | Name: OUT | Output handle |
To animate the color shift:
- Right-click Hue on the
HSV Adjust TOP→ Expression →absTime.seconds * 2
10. Camera (Optional 3D Version)
For a fully 3D version with a moving camera, replace the Point Sprite MAT with a proper 3D material and add a moving camera:
- On the Geo COMP, swap the Point Sprite MAT for a Phong MAT or Constant MAT.
- Animate the
Camera COMP’srz(roll/orbit) withabsTime.seconds * 5.
Parameter Cheat Sheet
| Parameter | Value to Start |
|---|---|
| Noise Amplitude | 0.01 |
| Noise Offset Z expression | absTime.seconds * 0.1 |
| Force Strength | 0.002 |
| Point Size | 3 |
| Feedback Level Opacity | 0.95 |
| Blur Size | 5 |
| HSV Hue expression | absTime.seconds * 2 |
Variations to Try
- Audio reactive: Feed an
Audio Spectrum CHOPinto the Noise POP’s Amplitude parameter - Mouse interaction: Use
monitorInfo('mousex')as the Force POP’s center X - Multiple clouds: Duplicate the entire POP chain with different noise seeds and composite them together
- Color palettes: Try
Addmode in the Composite for an additive neon look, orScreenfor softer pastels
Parameter Tuning & Behavior
| Parameter | Behavior |
|---|---|
| Noise Amplitude | Higher = more “wild” drifting of particles; Lower = tight, structured cloud. |
| Force Strength | Higher = particles are pulled more strongly to the center; Lower = particles drift freely. |
| Feedback Opacity | Higher = longer, more persistent dreamy trails; Lower = shorter, faster-fading glow. |
| Blur Size | Higher = softer, more “bloomy” dreamscape look; Lower = sharper, more distinct points. |
| Point Size | Higher = large, soft “orbs” of light; Lower = tiny, sharp digital stars. |
Network Architecture
To visualize how the data flows, here is a map of the final network:
[ SIMULATION SOURCE ] [ POP NETWORK ]
Sphere SOP (50x50) ────────▶ SOP to POP (Seed Position)
│
▼
[ FORCES ] │
Noise POP (Alligator) ───────────▶ │
Force POP (Point Attractor) ─────▶ │
▼
[ SIMULATION OUTPUT ] Limit POP (Bounding Box)
│
▼
[ RENDERING ] POP SOP (Points to SOP) ──▶ Sprite SOP
│ │
▼ ▼
[ Render TOP ] ◀─────────── [ Geo COMP ] ◀───────── [ Point Sprite MAT ]
│
▼
[ FEEDBACK TOP CHAIN ] ◀───────────────────┐
│ │ (Feedback)
▼ │
Composite TOP (Add/Screen) ──▶ Level TOP ──▶ Blur TOP
│
▼
[ OUT ]Data Flow Explanation
- Sourcing: The
Sphere SOPdefines the points where particles begin. - GPU Simulation: All motion happens in the POP Network (Point Operators). The
Noise POPmoves particles randomly, while theForce POPpulls them back to the center. - Containment: The
Limit POPprevents particles from flying off to infinity by “looping” them back to the other side. - Point Splitting: The
Sprite SOPandPoint Sprite MATturn simple points into glowing, camera-facing dots. - Dreamy Trails: The Feedback TOP Chain is where the magic happens. Every frame, the previous frame is blurred, dimmed, and added back to the current frame, creating persistent visual trails.
(y) Return to Recipes & Projects | (y) Return to TouchDesigner | (y) Return to Home