Subemitters - Unity vs Unreal functionality [Solved]

Hi All,

Back again with another question. this time to do with sub-emitters.

TLDR: Can you have non-ribbon emitters follow the paths of individual particles in Unreal like you can in Unity?

In Unity you can create events to spawn particle emitters on spawn, collision and death, but you can have these emitters follow the individual particles of an effect. For example, if you have debris flying out of an explosion, you can have smoke trails follow each individual bit of debris.

In Unreal, you can also spawn events to spawn emitters in the same way, however unlike Unity, it seems you cannot spawn an emitter to follow individual particles as described above.

Having been working alot on Unreal lately, I know it is possible to use init emit location + emit direct location to create things like smoke trails that follow emitters, but not individual particles. The only thing I can find to follow individual particles are ribbon data types, and that may not be what you want to achieve.

So to sum up, is this just functionality that Unity has and Unreal doesn’t? or have I missed something on my pretty in depth journey on all the Unreal Cascade modules?

Thanks all :slight_smile:

1 Like

Some minor clarification: Unity has “Birth”, “Death”, and “Collision” subemitters. The “Birth” type isn’t actual “on spawn”, even though the documentation makes it sound like it is, rather “Birth”. That subemitter spawns particles from the position of the parent particle with the time of the subemitter synced to the lifetime of the particle (not normalized, so one second is one second). The clarification here is important because there’s not actually an “event” on birth, so you’re not guaranteed the subemitter will spawn anything if your particles have very low lifetimes unlike death and collision.

Unreal instead actually treats those as events and instead uses an “emitter location” module that lets you link particles to other particles.

Edit: Maybe I’m misunderstanding what you’re trying to do, but the Emitter Init Loc module should do what you want, just increase the spawn rate as it’s shared across all parent particles. Last time I used Unreal I think I modified it to multiply the subemitter particle emission rate by the parent emitter particle count.

A burst emission event at 0 time on the subemitter would act like a guaranteed event, right?

If your particle lifetime is 0.05 (lowest allowed by Unity) and your framerate is < 20 fps it’s possible for particles to spawn and die in one update, and in that case it doesn’t appear to spawn anything from birth subemitters even with bursts. Though I’ve had cases where even at > 60fps and longer lifetimes I’ve seen bursts at 0.0 not spawn, but I haven’t seen it consistently enough to make sure it wasn’t user error (ie max particle count too low).

Ah, yes, i think we have an issue logged for that :slight_smile:

Thanks for jumping in on this, the clarification for unity is useful, but I’ll give a clearer explanation of the kind of thing I am trying to do in Unreal as well as what I have done in unity.

This tutorial for unity has subemitters spawn on the debris flying out of the explosion.

Now because it is a burst, where the particles spawn and where they go is random every time it bursts. In unreal though, if I was to create a burst like this, it seems I could not have trails following the particles unless they were ribbon types (which isn’t what I am trying to achieve).

From what you are saying, I would have to create multiple emitters each spawning a piece of debris and creating their paths using the init loc modules, and then have the smoke trails follow them using the DirectLoc module.

Does that sound right?

My point being, the downside of Unreal on this side of things, seems to be that creating and randomising this effect would be a lot more difficult than it would be to create it in unity. I was hoping that due to me being fairly new to Unreal and VFX in general, that I may have missed something in Unreal to do this in an easier way (considering it seems like such a useful feature in unity)

Doesn’t this also mean that in Unreal, if I were to move particles using orbit and attractor modules that I wouldn’t be able to have particles follow them either because those modules move the particles and not the emitter?

That should be what the Emitter Init Location module is for.

Make an emitter with an emission burst, give it a name like “Debris”.
Make a second emitter with a high emission rate, add an Emitter Init Location module and set the “emitter name” property of that module to “Debris”.

That should be it.

1 Like

Perfect! that’s exactly what I was looking for!

I knew it was just going to be something that I had missed… thanks for your help bgolus :slight_smile:

The bit of functionality that Unity has that I think UE4 is still missing is an option to sync the subemitter time to the parent particle time (normalized or otherwise). Unreal’s event system kind of handles this, but I don’t know of a way to make this work nicely with an effect that’s not using a single burst parent. That’s one advantage Unity’s system retains. You can of course just make N pairs of emitters with the timings offset, but that’s a huge pain. Again, I think I spent the time to add all this to a custom UE3 codebase at some point, but that was 8+ projects ago, so I might be miss-remembering. :wink: I definitely added it to the PA engine. It’s super useful, but perhaps not worth adding to UE4 if Niagra is close.