1. 3D & Motion Graphics
  2. 3D Studio Max

How to Create a Dancing Particle Effect using 3ds Max and Thinking Particles

Scroll to top
Read Time: 8 min

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.

Republished Tutorial

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


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.

Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new 3D & Motion Graphics tutorials. Never miss out on learning about the next big thing.
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.