Mech VFX - Dynamic VFX for a Flying Tank


I wanted to make VFX that are tied to the player's actions, similar to how Armored Core had done their mech system. I collaborated with my animator Tristan, where he provided me with a fully animated character as well as an initial character controller made in blueprints. With this base I implemented my VFX. For this project I gave myself 4 weeks.

Link to Tristan's portfolio: https://tristanmartinez.crd.co/

Jet Orientation Logic

The orientation of the jets are linked to the mech's movment. I updated their orientation in a joint socket based on the inverse of the mech's normalized direction, eg: player moves left -> point jet right. The scale/intensity of the jets are driven by current speed and whether the mech is flying up or down.

Jet Dash

The Dash effect is a separate event driven emitter system that activates when the user dashes. The emitters share their orientation with the jets mentioned above. When dashing, I also made it so that the camera jerks in the same direction the mech moves and added a radial blur to give the dash more punch. This made the dash feel more like a "controlled explosion" instead of just a push.

Radial Blur post effect

Missile Launch & Explosion VFX

I wanted the missiles to have target seeking behaviour, where there is the initial launch -> find target -> accelerate and attack. The missile uses a spring force based steering system to achieve this effect, where the origin of the force was at the target's location and the strength of the force increases over time based on the missile normalized lifetime. Then when the missile collides with a surface, it sends a death event to the explosion particle system and activates it. I also added camera shake the scales in strength depending on the mech's distance to the explosion.

Bullet Impact & Muzzle Flash

I wanted the bullet impact to match the weight of the animation. The mech is supposed to be quite large as well so it probably uses large caliber rounds. In the existing bullet system made by Tristan, I got the data for the mesh it collides with, on collision it spawns either a dirt impact emitter or a metal impact emitter based on the collision mesh's physics material, and orientates the emitter based on the surface normals.

Ground Interaction Effects

Hover effect with scaling intensity from distance to surface and variations based on surface type.

Landing effect also with variation based on surface type.

Breakdowns

Dirt impact VFX breakdown

Explosion VFX breakdown

Jet flame VFX breakdown

Ground dust VFX breakdown

Technical Challenges

  • Creating a global set of parameters that can control particle emitters.
  • Conditional activation of effects without unintentional overlaps/overrides.
  • Developing particle systems that adjust dynamically with the user's inputs at runtime.
  • Testing and iterating different techniques and solutions so that the VFX are optimized for real-time.

Takeaways

This project was a fun challenge where I not only had to think about what effects would be needed but also how to compliment the animations and build upon them. I also enjoyed adding smaller details to the VFX, like the jet's light gettting stronger and flickering faster, or splashing the dirt impact in the direction the mech is shooting.


My workflow was more efficient this project because I would only do very basic blockout vfx to start with to see if they felt viable for the Mech as to not waste time. The process involved me finding footage as reference and then recreating it with simple shapes and trying to get the timing right. Although the process worked well for me, it would have been more efficient if I had made previsualizers, like a sketch of important frames or even just screenshots of important keys from refrences. 

Limitations and Future Plans


The biggest limitation was the missile effect, where the entire missle launch systems and explosion VFX was in one large particle system. One issue I encountered was that the collision of the missile particle was inconsistent at times, which caused the explosion effect to spawn too late or not at all. I later discovered that it was due to an issue with the emitter's loop duration and fixed it, but it felt like having the entire explosion effect spawing by relying on the missle's death event made it more difficult to iterate on it. In the future I would seperate the missle component from the explosion effects in order to have more control over activation conditions.


I would also add more detailed complemetary effects, such as the gun turing red hot after firing for a certain amount of time by using a shader that samples vertex colors, or the jets emitting steam/hot gas after turning off to show that they are cooling down after use. I feel like these effects would really sell how powerful the mech is and the amount of energy it takes to pilot.