Reduce overdraw on background smoke effect in UE4

Hey, guys!

I’m not really a VFX artist, but I’m trying to help our team on a task of reducing overdraw issues of a background smoke effect on a VR game I’m working on. Right now, it’s a particle effect with a single plane and a single translucent material with a rendered billowy smoke from Houdini, playing on an 8x8 SubUV module. We are using a few of them in the background, and since it’s a big translucent plane, we are getting overdraw problems.
I’ve tried the particle cutout option, but it gave me this result, you can see the cuts and it doesn’t look that good.

Can you guys suggest anything else to help with this? I’m not particularly fluent in optimization stuff inside Unreal. Any help appreciated! Thanks! :slight_smile:

If it’s on a single card, you may get issues with the cutout feature. Try adjusting the Alpha Threshold value in the particle cutout section. I think it defaults to 0.1, so try nudging that down to .075 or .05 and see if that still cuts out some overdraw without cutting into the texture.

If that doesn’t work, you may want to try a custom mesh for the flipbook to play on so you don’t have those corners from a single plane. Just remember, if you’re in UE4 and you want to play a SubUV texture on a mesh using Cascade’s built in SubUV functionality, your material needs to use the SubUV texture sample node, not the standard one, or the Subimage Index node in Cascade won’t work.

1 Like

Hey, thanks, Travis! Messing with the alpha options made the cut less noticeable. I checked the material and it seems fine regarding the SubUV texture sample node too (it’s also a cheap material, not so many instructions). The game doesn’t have many environmental particles in the scene besides this smoke. I set up some LODs and the texture has mipmaps enabled too. Is that enough or is there anything else I can do to reduce overdraw?

Thanks for your help, man!

Hmmm, it may not look good for smoke, but something I’ve used in some effects was alternate translucent and masked materials in a stack. So you would have the same smoke texture playing on a masked unlit material behind your translucent smoke and you could use Dither with Opacity on the masked. The identical masked version would block any other translucent materials behind it, or it may be a cheaper material in terms of instruction count or complexity than your environment materials, so you’d get less overdraw at the core. I’ve only done that for flashy combat fx though, not softer realistic ones, so it may not work in this scenario

For a quick comparison, a basic Opaque/Default Lit material for something an environment would use is about 118 base shader instructions. A Masked/Unlit material with “Dither Opacity Mask” checked on and the “DitherTemporalAA” material function going into the opacity mask input is around 57 base shader instructions.

1 Like

That’s interesting, I’ll pass this over to the team to see if we can work with it. Thanks! :grinning: