+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
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.
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.
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.