Order Independent Transparency

Unreal really needs an option for OIT integrated into the engine.

These guys implemented it in their build 2 years ago : https://www.slideshare.net/KiHyunwoo…-of-project-a1

AWS lumberyard even has the option! https://docs.aws.amazon.com/lumberya…nsparency.html

I’m sure this will fall on deaf ears but its 2018 and high end hardware can support it now when used carefully.

You could use the shortcut method that tressFX uses.

Please do something about transparency. Dither opacity mask on masked materials really just doesn’t hold up anymore.

I agree! Even though it’s costly we should at least have the option.

+1
By now using the custom depth hack is more or less widely accepted, but let’s not forget it involves re-rendering the meshes (including potentially tessellation for things like complex water, and without occlusion) - so by now the performance argument doesnt really hold up either

I dont think it ever did :rolleyes:

Cmon. Per-pixel linked lists 16 layers deep and depth pre-pass for overly dense mesh performance on a full screen scene at 1080 is separated by at least an order of magnitude.

Current OIT solutions are not a miracle, and can be used for specific purposes, not generally. Still, would be nice to have it as a part of the engine.

I agree with you there! The custom depth hack just doesnt hold up on complex geometry though unfortunately.

I wish epic would let us know whether they are even considering working on it in the next year (or ever). If not, im going to look into implementing it myself, but its certainly not trivial.
this guy implemented it for his WIP tressFX build, but its specific to tressFX.
https://forums.unrealengine.com/comm…hair-rendering

Yes deep PPL would be terrible for performance, but the shortcut method used by TressFX is the more viable option.

Still not a miracle, i just really want the option for specific cases.

Would be really nice to have this as an option, I’ve always wanted this at least for hair rendering. Unity also has this feature through plugin.

Lumberyard added Raster Order Views, a hardware dependent feature that is never the less very neat, if only useful if you’re working on “next gen” games.

Otherwise OIT is too finicky, and costs way too much, to totally deal with. There are other things to do: Alpha Distribution is a nice hack that’s basically an improved dithered transparency/translucency. Can easily see it as an improvement for hair/grass/etc.

There was also a very nice blog post about “depth proxies” that I can’t find for the life of me. I know it was a blog, done by I believe a programmer from Eidos Montreal, that had previously done a blog about deferred textures, and yet I can’t for the life of me find it again. It was one step below OIT, about using a point (or was it a plane) stored depth per object instead of per pixel to approximate depth, allowing for better translucency/volumetric fog interaction, among other things. If anyone knows it they could link it.

Everything is a trade-off in performance and requires moderated usage, it’s not a reason to have nothing at all. Binary transparency and dithering don’t look very good on things like hair.

Like I said, take a look at alpha distribution, not super complicated and a fair improvement in dithering. Adding another OIT, when a separate hardware implementation works with good performance, just so people can use it for backwards compatibility, just doesn’t seem productive. Even the good solutions can be so costly you’d not really want to use them on systems that don’t have Raster Ordered Views as it is, or even use them on those systems regardless.

When I say “expensive” I mean “we rendered it on a 1080 ti and it still took up 12ms on a resolution equal to half 1080p” expensive. Again, that’s a good, very recent OIT implementation: KIT - Computer Graphics - Publications . It’s just not useable.

I did look through it, I’m not actually sure what improvement it would be over what is already being done with dithering/TAA. It’s still dithering, which is the complaint.

12ms in a tech demo. Yes, if you want to make your entire scene into overdraw hell and want every layer to be perfectly sorted, you will have problems. There’s a reason they are tech demos and not games. This is what I was talking about with moderated usage, most of them have layer settings to prevent it from getting out of hand as well. Black Ops 3 and 4 are already using it. Tomb Raider’s Definitive Edition is using TressFX on consoles.

Restricting any kind of undithered alpha sorting to ROV capable hardware is overkill.

It’s hard to find how Black Ops does OIT, other than the fact that it seems to cost a good amount of performance as well.

As for Alpha distribution, it’s just dithering with a better representation of thickness based on distance than naive dithering. Point is, it’s an improvement for nigh zero performance cost.

As for other OIT, I guess I just don’t personally see the benefit of a bunch of complex, costly code for making translucency (which is costly itself) look nicer. Especially when particle sorting and depth proxies can eliminate a lot of the artifacts already present with such for much less rendering cost. Sure, it doesn’t help with hair, self intersection, or grass. But looking at titles like FFXV, which use translucent grass, I just don’t see the benefit of the translucent grass having nicer AA than alpha test grass when the far more obvious and glaring omission is that it vanishes entirely not far from the player.

But hell that’s just my opinion. I’m sure for someone at least there’s a good case for OIT.

If anyone is interested, i made an initial OIT implement here: https://forums.unrealengine.com/development-discussion/rendering/1551217-wip-order-independent-transparency-implementation-better-hair

Yes, I am still interested. But for some reason the link you gave isn’t working anymore.

I’m getting the message

"Sorry, you are not authorized to view this page

  • The link may have been moved to a private section that you do not have permission to access
  • The link may have been deleted by a moderator
  • The link may no longer exists"

Can you please let me know if you still found a way for order independent transparency or please post/message links?

I deleted the post because i no longer want to support it, but the code is here:

https://github.com/kostenickj/UnrealEngine/tree/420_3_OIT_Main

Its for 4.20

OK, thanks! I will look at it.

One more thing, how exactly do I use it/enable it? (specifically the order independent transparency with that version of the engine)

In the material editor under the translucency section should have everything you need. There are also a couple of console vars. Type in r.oit and they should come up.

Oit is grayed out, what must I do to activate it?

I’d like to know this, too. Why is greyed out?

Hello,
The link you gave isn’t working. I need to implement OIT for my project. May I have your code?
Thank you.