Particle Animation with Anim8or v0.7


Designing Particle Animation for smoke

 

Let’s do now a true PA. We’ll make a smoke trail (cigar smoke), using small, partly transparent spheres as smoke particles. The smoke will come from a limited volume of the space (a cube), will have an ascending movement on a curly path and will vanish progressively. The particles will be released randomly on random paths following a main smoke stream and disappear after a time interval (lifetime). The effective length of the smoke animation will be 144 frames.
How to shape the paths? First of all, you have to design the main smoke stream: just animate with a few key frames an imaginary smoke particle, like in the image on the right. Save the file, open it in a text editor and write down the position controller parameters, something like this:

 

controller { "position"

      track {

        pointkey { 0 (0 0 0) (0 35.343 0) (0 -35.343 0) "?" }

        pointkey { 17 (0 70.686 0) (-1.6632 30.561 1.4553) (1.6632 -30.561 -1.4553) "?" }

        pointkey { 35 (-6.6528 122.25 5.8212) (2.079 23.908 -2.9106)

          (-2.079 -23.908 2.9106) "?" }

        pointkey { 53 (8.316 166.32 -11.642) (2.9106 23.493 -4.3659)

          (-2.9106 -23.493 4.3659) "?" }

        pointkey { 71 (4.9896 216.22 -11.642) (-1.6632 24.948 0) (1.6632 -24.948 0) "?" }

      }

    }

 

Each particle will have a path obtained from the main stream’s path altering x and z key positions for each key frame with a random value, as follows:

- first key frame            - no alteration

- second key frame    - max. 10 % alteration

- third key frame    - max. 15 % alteration

- fourth key frame    - max. 20 % alteration, and so on

That will ensure a consistent shape for the smoke and an increasing cross-section in the upper part, resembling dissipation.

The objectelement section of the project file should look like this:

 

objectelement { "eobject1" "object01"

……

 

objectelement { "eobject294" "object01"

    loc { (0.78708 82.17 0.32259) }

    controller { "position"

      track {

        pointkey { 101 (0.82672 0.83303 0.36470) (0 35.343 0) (0 -35.343 0) "?"

        }

        pointkey { 136 (1.9677 71.519 -0.81164) (-1.6632 30.561 1.4553)

          (1.6632 -30.561 -1.4553) "?" }

        pointkey { 172 (-9.814 123.08 10.513) (2.079 23.908 -2.9106)

          (-2.079 -23.908 2.9106) "?" }

        pointkey { 208 (10.298 167.15 -17.888) (2.9106 23.493 -4.3659)

          (-2.9106 -23.493 4.3659) "?" }

        pointkey { 244 (3.9795 217.05 -15.636) (-1.6632 24.948 0)

          (1.6632 -24.948 0) "?" }

      }

    }

    controller { "visibility"

      track {

        booleankey { 0 0 "?" }

        booleankey { 98 0 "?" }

        booleankey { 101 1 "?" }

        booleankey { 199 1 "?" }

        booleankey { 244 0 "?" }

      }

    }

  }

 

…….

objectelement { "eobject2000" "object01"

…….

 

To avoid Anim8or v 0.7’s phantom-key problem, the distance between two consecutive key frames must be less than 100. The awk script which generates the animation is the following:

 

back               next