Exposing multiple particle system color parameters on a blueprint

Hi! I’m new to Unreal and hope there’s an easier way to do this.

I need to expose 2 (or more) color parameters at the blueprint level that lerp in a cascade particle system. Either of those colors can be changed to create blueprint variants.

Here’s what I’ve tried and the drawbacks I’ve found.

1. Scale Color/Life. If this is set up as a particle parameter, it only exposes a constant on the blueprint, but I need a constant curve.

2. Dynamic Parameter. Used a dynamic parameter in the material to drive the color values. These all got exposed at the blueprint level and would have been a great solution if I could have more than 1 dynamic parameter per emitter.

3. Color Lerp in Material. Adding a ParticleRelativeTime color lerp in the material will expose colors on the material instance. Every time a new BP variant is created, all the material instances that need different colors need to be duplicated. This isn’t great when a single particle system can have 10+ material instances. Since it also isn’t at the blueprint level, I created a blueprint to run through a particle system, find all materials, and replace the color values, but the logic gets expensive, especially for every effect on a mobile game. It seems like there’s a better way of doing this.

Are there any other ways of achieving this within cascade/materials/blueprints?

How many different colours/combinations could you potentially have?
You could create a curve library, in the particle, lerp between 0-1, then in blueprint set which curve to sample on, then in the material, you just take the curve and sample at your particle 0-1 range to decide the colour?

This is a cool idea, but if we allow players to choose colors, even from a limited palette, it could be hundreds or thousands of combinations. Definitely need color parameters exposed to change these on the fly.

Ended up using your suggested curves as well as simplifying the blueprints! Didn’t know you could sample curves in the material like that! Thanks @Niels

1 Like

For anyone who comes across this, I basically set up what’s explained here: