How to Create a Dancing Particle Effect using 3ds Max and Thinking Particles
In this intermediate level tutorial you will learn how to create an interesting "dancing" particle effect using 3ds Max and Thinking Particles. You also will be able to choreograph the animation to your audio track by creating an animated map using AfterEffects.
Every few weeks, we revisit some of our reader's favorite posts from throughout the history of the site. This tutorial was first published in November of 2009.
Final Effect Preview
Project Files
Download
Step 1
Open AfterEffects and create a new composition. Set the "Width" and the "Height" to '400'. Change the "Pixel Aspect Ratio" to "Square Pixels", the "Frame Rate" to '30', and set the "Duration" to 20 seconds.



Step 2
Download the project files, and import them in AE.



Step 3
Drag "Metric_Bass.wav" into the composition's timeline. Right click on it, go to "Keyframe Assistant" > "Convert Audio to Keyframes". This process converts the audio waveform into keyframes, and stores them in a new layer called "Audio Amplitude".



Step 4
Change the new "Audio Amplitude" layer's name to "Bass Amplitude". Delete the "Metric_Bass.wav" layer, because the new layer contains all the audio data you will need. To expand or collapse a property group, click the triangle to the left of the layer name or property group name. Expand "Bass Amplitude" > "Effects" > "Both Channels".



Step 5
Drag "Bass_map.png" in the composition's timeline. Expand "Bass_map" > "Transform".



Step 6
Next, you will connect the "Bass_map" layer's "Opacity" value to the "Bass Amplitude" layer's audio data. Press the "Alt" key and click the on the Bass_map's "Opacity" stopwatch icon, to add an expression to this property.



Step 7
Click the "Expressions Pick Whip" icon, and drag a wire to the Both Channel's "Slider". This action will connect the "Opacity" value to the audio data.



Step 8
Do the same for the "Normal" and "Treble" files.



Step 9
Render the animation as a .jpeg sequence.



Step 10
Open 3ds Max and set the "Animation Length" to '600' frames (20 seconds) in the "Time Configuration" dialog.



Step 11
Create a plane, and change the name to "Emitter Plane". Set the plane's length and width to '140', and move it to the coordinates: x = 0, y = 0, and z = 0.



Step 12
Add a "UVW Map" modifier to the plane and disable "Real-World Map Size".



Step 13
Go to the "Command panel > Create > Particle Systems > Thinking" menu, and place a "ThinkingParticles 3" icon in the Viewport.



Step 14
Go to the "Modify" panel, and click "Properties" in the "Thinking" rollout (you can also use 'Alt + Shift + P' to open, and 'Alt + Shift + C' to close the "ThinkingParticles 3" user interface). In the "DynamicSet Tree" view, select "Master Dynamic". Disable "Edit on the fly" to see the changes in real time and enable "Show Mesh" to see the particle shape.



Step 15
In the "Particle Group Tree" view, click the "Create" button, under "Master System". Name the group "Box Particles", by clicking on the name "Group" twice (slowly).



Step 16
To dictate what the particles do, you need to create a "Dynamic Set". In the "DynamicSet Tree" view, click the "Create" button, under "Master Dynamic", and name the new Dynamic Set "Generate".



Step 17
Highlight the "Generate" DynamicSet, and then go to the right-hand side of the dialog, where you will see a new set of "Create" rollouts.



Step 18
Click the "Operators" icon, and then choose "Generator" from the drop down list. Select the "MatterWaves" node to highlight it, then click in the schematic portion of the "Wire Setup" view, and add this node to your "DynamicSet".



Step 19
In the "MatterWaves" rollout, on the right portion that appears, click the "Pick Object Based Emitter" button, and select the "Emitter Plane" in the viewport. Select "Box Particles" as your "Group" (from the drop down menu). Change the particles creation type to "Pistol Shot", and set the particle amount to '3000'. Change the "Life Span" value to '300', the "Speed" value to '0', and the "Size" value to '2'.



Step 20
In the "Emitter" rollout, set the "U/V Emitter" to '50'.



Step 21
In the "Write to Channel" rollout, set the second spinner of the "UVW" parameter to '0'. This spinner defines the Data Channel number that should be written (-1 means no Data Channel is written).



Step 22
In the "Particle Group Tree" view, highlight the "Box Particles" group. In the "Box Particles" group rollout, on the right portion that appears, you need to create a "Data Channel". In the editbox, write 'UVW Data', then select "Point3" from the drop down list. Press the "Add" button. Now the "UVW Coordinate" data from "MatterWaves" is written to "Data Channel 0".



Step 23
Create a new "DynamicSet" and change the the name to "Effect". In the "Create" panel, click the "Groups" icon. Add the "Box Particles" group to your Dynamic Set.



Step 24
In the "Create" panel, click the "Helpers" icon and add a "TexmapColor" helper. This helper is used to get the current surface color of a map.



Step 25
Select the "Box Particles" group and move your cursor over the light green box in the upper right corner of the operator. It will display a tooltip that says "Outputs". Click on the "Outputs" box which will reveal a complete list of output data streams for the "Box Particles" group.



Step 26
Choose "*Position" and "*CH: UVW Data". Now these outputs are visible on the "Box Particles" group.



Step 27
Connect the "*CH: UVW Data" output of the "Box Particles" group to the "UVW" input of the "TexmapColor" helper. From "*CH: UVW Data" the "TexmapColor" helper gets the UVW coordinates information.



Step 28
In the "TexmapColor" helper rollout, add the image sequence created in AE.



Step 29
Now, you need to change the particles position on the 'z' axis, based on the map. In the "Create" panel, select "Standard" from the drop down list. Add a "Position" operator, and connect the "Particle" input to the "Particle" output, of the "Box Particles" group.



Step 30
Because the 'x', 'y' and 'z' position is set to '0', all the particles will be moved to the same position. You need to get the original particle position on the 'x' and 'y' axis, and to leave them unchanged. Click the "Helpers" icon and add two "Point3" helpers.



Step 31
Connect the "Position" output of the group to the "Vector" input of the first "Point3" helper. Now this helper gets the original particle position. Connect the "X-Value" and "Y-Value" outputs of the first "Point3" helper to the "X-Value" and "Y-Value" inputs of the second "Point3" helper, then connect the "Vector" output of the second "Point3" helper to the "Position" input of the "Position" operator.



Step 32
As you can see, the particles go back thier original positions on the 'x' and 'y' axis. Next, you need to define the position on the 'z' axis. Add an "Add&Multiply" helper and change the operation type to "A*B".



Step 33
Add a "Random" helper, and change "Value 1" to '55' and "Value 2" to '60'.



Step 34
Connect the "Value A" input of the "Add&Multiply" helper to the "Value" output of the "Random" helper, and "Value B" input to the "Color" output of the "TexmapColor" helper. Now, connect the "Value" output of the "Add&Multiply" helper to the "Z-Value" input of the second "Point3" helper.



Step 35
The "Color" output of the "TexmapColor" helper sends out a value between '0' and '1' ('0' for black and '1' for white). The "Add&Multiply" helper multiplies the value from the "Color" output with a random number between '55' and '60', then sends out the result to the "Z-Value" input of the second "Point3" helper, which in turn affects the 'z' position of the particles. As you can see, the particles are now moving on the 'z' axis based on the information from the animated map.



Step 36
Next, you will assign a cube shape to these particles. Go to the "Create" panel, and from the drop down list select "Shape". Add a "Std Shape" operator. Select "Cube" from the drop down list, then connect the operator to the "Box Particles" group.



Step 37
To apply a modifier to a group, select "Master Dynamic", in the TP3 user interface, and enable "Groups as Objects". Now you can select the group, as an object in the viewport.



Step 38
Create a "Standard" material and add a "Gradient Ramp" map in the "Diffuse" slot. Open the "Gradient Ramp" map and disable "Use Real-World Scale", then set the "Tiling" to '1'.



Step 39
Create a gradient (as shown), then assign this material to the "Box Particles" in the viewport.



Step 40
Select the "Box Particles" and add a "UVW Map" modifier. Disable "Real-World Map Size".



Step 41
Click on the "UVW Map" modifier, then rotate the modifier's "Gizmo" by '90' degrees on the 'y' axis.



Step 42
Scale down the "Gizmo" on the "z" axis and move it up (as shown). Now render the animation.



Final Effect
I hope you enjoyed this tutorial. Below you can see my final results.


