Issue with shaders for bushes and foliage using alpha textures

Hello everyone,

I’m currently developing my first video game on UE5, but I’m still a beginner and have a long way to go. My game will have PS1-style graphics, so I created elements like bushes and foliage using simple crossed planes with alpha textures applied. However, when I import these assets into my scene, after setting the material to AlphaComposite and connecting the texture’s alpha channel, my models display strangely. The textures are transparent, but the rest of the planes are visible as well, almost like frosted glass.

I’ve attached a couple of screenshots to show what I’m talking about. I’ve been trying to fix this issue for days, so a HUGE THANK YOU in advance to anyone who can help!

Best regards,
Alberto


You need to be using the masked blend mode in your material, not translucent (or alpha composite, in your case)

It worked, THANK YOU!!!
Could you please explain the difference and/or why you did know it was this? I’ve searched a lot online but couldn’t find anyone importing this kind of transparent meshes in UE5 sigh.

It’s a near-universal limitation of translucency in realtime rendering

Masked only allows for binary transparency, meaning you can only have fully opaque (100% opacity) and fully transparent (0% opacity) pixels in your texture. The benefit of this is it doesn’t have arbitrary layer blending, you only need data for one surface per pixel.

Translucency gives you the ability to have pixels that are partially translucent, the problem with this is that the appearance for translucent surfaces depends on whether other translucent surfaces are in front of or behind them, which means they need to be depth sorted and there isn’t an easy performant way to do this, so most engines just do top level sorting of primitives which works okay in some cases, but it won’t work for complex shapes and intersecting geometry. In that case you need to depth sort per pixel to get accurate results.

This is worse in Unreal because it uses a deferred renderer so all translucency has to be rendered in a separate pass, which increases the costs/complexity.

There’s more information about this available on the internet, just search “translucency sorting”

1 Like

Thanks a lot for finding the time to answer my questions, you really made my day <3

1 Like