Opacity problems when layering FX

Anyone know why when I put all my FX together I get a different kind of opacity. For example the image on the left is one part of the effect and yet its opacity obscures the car which is good. But when I add the particle FX on top of my mesh effects I can see the car through all FX, as in the image on the right. .

Translucent sort ordering problems like this are super common - basically the engine has multiple layers of translucency to blend with the opaque frame but doesn’t know what order to do it in so you get problems with floating and flickering.

There’s a number of things you can do to try and fix it:
Physically move the emitters - generally engines will use distance to emitter as part of their sorting, this is pretty heavy handed though and only works for certain viewing angles.

Combine all the effects into one emitter in Cascade, then emitters on the right draw in front of emitters on the left - this does mean you can’t reuse the smoke in multiple places with and without the fire (easily).

Use a different blending mode - masked, modulate and additive dont have this problem due to how they’re added to the frame but obviously they affect how things look.

Translucent Sort Order Priority - actors in unreal have this option to allow you to manually force things into a certain order for rendering - probably safer than just moving the emitters to be closer but has the same issues with things like viewing angle.

Note there is also blend mode setting for each emitter in cascade that controls how each sprite is drawn with itself (oldest first, closest to camera etc.) - super useful for things like smoke columns viewed from above etc. but not actually what you need to fix this problem.

https://blogs.msdn.microsoft.com/shawnhar/2009/02/18/depth-sorting-alpha-blended-objects/
this post hopefully explains the problem a little better than i have :slight_smile:

8 Likes

Which engine you use ?

1 Like

Although I haven’t encountered this exact issue myself, I have had sorting issues. Have you tried a camera offset for some of your emitters?

@ChezStephaneNepton I am using Unreal Engine 4.12

@Travis Yes I am using Camera offset on almost all the emitters. And I have tweaked them numerous times to find the best compromise. I will look into @tharlevfx for the solution.

Thanks for all this great info @tharlevfx
If I come up with a good result I will report back how I did it.

A combination of these two usually fixes my sorting issues quite well :+1:

1 Like

My preferred method of avoiding sorting issues is to use as few unique particle shaders as possible. I know it’s a very un-Unreal approach, but in the long run it’ll save you some headaches to have one very capable shader instead of 10 small ones.

does that help? i’m not 100% on how unreal renders the frame - if i have two smoke emitters, using the same material, are they added in one pass even though they’re in separate emitters?

ah, wait - do you mean doing something like having a sprite that starts out as fire and then becomes smoke over it’s lifetime? that’d definitely help with sorting issues. thats actually a very unreal approach imo since you get all the advantages of a custom shader and the dynamic parameters node.

Trying to keep everything similar in this thread for easy searching, but is there a clean way to sort the order of two or more translucent mesh particles when you rotate around them? I have a fireball that is using multiple layers of meshes to give it volume, but when you rotate around the fireball the piece at the front of the emitter chain in cascade just covers everything physically behind it. Looks good when it’s coming at you, but if it flies past, or there are other players that see it from a different angle, it just looks awful with that one element overpowering everything else :frowning:

Adjusting anything in the material or post process for the project is a no-go.

If you use soft particles you will get issues like this. Try making the soft particle border harder.

I’m not using any soft particles :frowning: