Animated Fireworks

Isabelle Rhoads - CSCE 450 Fall 2022

For my final project, I used Linear Blend Skinning and Physics-Based Animation to create a firework simulation that explodes into an animated character.

Loading the Mesh

To achieve the shape of the firework, I extracted character and animation data from Mixamo using fbx-extract to use as the shape of the firework. I initialized a particle for every vertex position in the mesh and set the initial position of the particle to a very scaled down vertex position to make it look like a sphere. I also set the initial velocity to the vertex position in order to maintain the shape of the character as the system expands outwards.

Adding the Animation

I incorporated the animation data into the system by retrieving the updated vertex positions at a given animation frame and using it to compute a force that pushes the particles in their corresponding directions. As you can see I used simple vector subtraction to get this force value and plugged it into the velocity equation.

Setting the Scene

To simulate the firework shooting up into the air, I simply set the initial velocity of each particle system to a vector in the y direction, and maintained this velocity for an arbitrary amount of time before “exploding” into the animated firework. As you can see I set the scene as a nice grassy area in the dark to get the full effect of the fireworks. I also implemented a free-look camera for a more realistic experience.

Difficulties

During the implementation of the animation frames, I ran into an issue where the character would not complete the full animation even though the positions were being correctly computed. I realized that I needed to increase the intensity of the animation force as the particle system expanded. Since the velocity steadily increased but the force stayed the same, The character’s range of motion diminished over time. It also took me a long time to refactor the lab 8 code to support multiple particle systems, since it was implemented to only maintain one at a time. I did this so that I could have multiple fireworks going at once. I also found mapping the animation frames to the simulation steps to be challenging, since they are both based on their own time value due to the initial part where the firework shoots up.

Demo

Full Presentation