Build a 3D landscape whose mountains rise and fall with the volume of the music while the terrain scrolls forward. The look shows up a lot in concert backdrops and music videos.
Operator Families in this Recipe
- SOPs (Surface Operators): Building the 3D terrain mesh.
- CHOPs (Channel Operators): Extracting audio amplitude.
- TOPs (Texture Operators): Post-processing the render.
Part 1: Build the Grid
- Add a Grid SOP.
- Rows →
50, Columns →50. - Size X →
4, Size Y →4.
- Rows →
- Add a Noise SOP directly after the Grid SOP.
- Amplitude →
0for now. We will drive this from audio. - Period →
0.8. - Right-click the Offset Z parameter → Expression → type
absTime.seconds * 0.5. This scrolls the noise field over time, making the terrain appear to move forward.
- Amplitude →
- Connect to a Null SOP named
OUT_TERRAIN.
Part 2: Extract Audio Amplitude
- Add an Audio Device In CHOP (microphone or system audio).
- Add an Analyze CHOP right after it.
- Function →
RMS Power. This converts the audio stream into one number representing loudness per frame (typically0to0.3for normal speaking).
- Function →
- Add a Math CHOP:
- Multiply →
5.0. Amplifies the small RMS value into a range that visibly moves the terrain.
- Multiply →
- Connect to a Null CHOP named
AUDIO_AMP.
Part 3: Link Audio to Terrain
- Select the Noise SOP. Look at its Amplitude parameter.
- Make
AUDIO_AMPactive (click the + icon on it). - Drag the
chan1channel from theAUDIO_AMPviewer onto the Amplitude parameter. - Select CHOP Reference.
The terrain’s height is now driven by volume. Loud bass = tall peaks, silence = flat ground.
Part 4: Render the Scene
- Create a Geo COMP. Inside it, connect the SOP chain ending with
OUT_TERRAINto theout1node.- Optional: add a Wire Frame SOP before
out1to show the mesh as clean wireframe lines.
- Optional: add a Wire Frame SOP before
- Back in the root network, add a Camera COMP:
- Translate Z →
3, Rotate X →-30. This looks down at the terrain from a front-low angle.
- Translate Z →
- Add a Light COMP and a Render TOP.
- Assign a Constant MAT (bright cyan or green) to the Geo COMP for a classic terrain wireframe look.
Part 5: Post-Processing
- Connect the Render TOP to an HSV Adjust TOP.
- Animate Hue → right-click → Expression →
absTime.seconds * 5. Slowly cycles color.
- Animate Hue → right-click → Expression →
- Add a Bloom TOP (Threshold:
0.3, Intensity:0.7) for glowing grid edges. - Finish with a Null TOP named
OUT.
Bonus: Frequency-Specific Terrain (Equalizer Effect)
Instead of overall volume driving uniform height, make each column of terrain respond to a different audio frequency:
- Replace the Analyze CHOP chain with: Audio Spectrum CHOP → Resample CHOP (set to
50samples, matching the Grid’s column count). - Connect the Resample CHOP to a CHOP to TOP. This creates a 50x1-pixel texture where each pixel’s brightness = one frequency band’s amplitude.
- Remove the Noise SOP. Replace it with a Displace SOP:
- SOP input → Grid SOP.
- Texture input → CHOP to TOP output.
- Direction →
Normal, Scale →0.5.
- Each of the 50 grid columns now rises to the height of its frequency band, so the terrain works as a 3D equalizer.
Troubleshooting
- “The terrain doesn’t react to music.” Check that
AUDIO_AMPis active and the CHOP Reference is properly set on the Noise SOP’s Amplitude parameter. Open the Noise SOP parameters and confirm the Amplitude field shows an expression rather than a plain number. - “Terrain moves but barely.” Increase the Multiply on the Math CHOP (try
10or20). - “Wireframe renders as a solid blob.” Make sure the Wire Frame SOP is inside the Geo COMP and is the last SOP connected to
out1. - “Noise pattern does not scroll.” Confirm the
absTime.seconds * 0.5expression is on Offset Z of the Noise SOP (not on the Grid SOP).
Next Steps
- Camera fly-through: Animate Translate Z on the Camera COMP with
absTime.seconds * -0.3to slowly fly through the terrain. - Multiple layers: Duplicate the Grid+Noise chain at different Noise Seeds and blend them in a Composite TOP for multi-depth terrain.
- Color by height: Use a GLSL TOP to colorize the render: low elevations in blue (water), high elevations in white (snow).
Parameter Tuning & Behavior
| Parameter | Behavior |
|---|---|
| Grid Rows/Columns | Higher = finer terrain detail (heavier); Lower = chunky, angular hills. |
| Noise Period | Higher = wide, rolling hills; Lower = tight, jagged spikes. |
| Noise Scroll Speed (expression) | Higher multiplier (e.g., * 2.0) = fast-moving terrain; Lower = slow, hypnotic drift. |
| Math Multiply (audio) | Higher = dramatic mountains on loud audio; Lower = subtle, gentle undulation. |
| Bloom Intensity | Higher = neon grid edges; Lower = clean wireframe. |
Network Architecture
[ AUDIO ] [ TERRAIN ]
Audio Device In Grid SOP (50x50)
│ │
▼ ▼
Analyze CHOP (RMS) Noise SOP ◀── Animate Offset Z
│ (Amplitude bound to AUDIO_AMP)
▼ │
Math CHOP (x5) Wire Frame SOP
│ │
▼ ▼
Null (AUDIO_AMP) ──────────────▶ Geo COMP ──▶ Render TOP
│
▼
HSV Adjust ──▶ Bloom TOP ──▶ OUT(y) Return to Recipes & Projects | (y) Return to TouchDesigner | (y) Return to Home