There are a few features I’d love to see added to Cascade to give us FX artists more creative freedom.
-Align to initial velocity
Right now we can align a particle to it’s velocity to make it look like it’s stretching in the direction it’s moving. Typically used for things like sparks or other trailing objects. What I’d like to see though is an option to have the particle only align to it’s initial velocity on spawn, and retain that alignment throughout it’s lifetime. You can see this effect in games like Company of Heroes or Just Cause 3.
For example, if I wanted to have a jet of debris fly away from an explosion then fall to the ground, I could do it with a single textured plane, rather than hundreds of particles.
-Rotational velocity alignment
Traditionally when a particle aligns to velocity, the geo plane of the particle aligns it’s Z axis to the direction of the velocity. The problem with this is that if you are looking at the particle from the direction that it’s moving, you’ll see the flat geometry of the particle plane. Other engines such as Cryengine solve this by instead rotating the particle in the direction of it’s movement, while keeping it camera facing. The particle plane will stretch longer as you view it perpendicular to it’s movement, and squish to be square when looking parallel to it’s movement.
-Remap variable values to each other
Source engine’s particle editor allows variables to define other variables by mapping them to each other based off a range. This would allow you to do things like allow a particle’s size to be defined by it’s initial speed, if you want slower particles to be smaller and faster particles to be bigger. Source allowed you to remap any vector value (color, position, velocity) or any scalar value (alpha, lifetime, speed) to each other by defining the min/max range of values for both variables. If I wanted to create my previous example (slower particles are smaller) the range would be something like:
Remap Initial Speed to Radius
Initial speed min: 0
Initial speed max: 100
Radius min: 10
Radius max: 100