Novum / vkQuake

Vulkan Quake port based on QuakeSpasm
GNU General Public License v2.0
1.8k stars 220 forks source link

Indirect sorting order problem #580

Closed Novum closed 1 year ago

Novum commented 1 year ago

@temx I saw at least one problem in ad_sepulcher if noclipping to the SOCK logo: image The transparency order isn't stable.

temx commented 1 year ago

Oh! I was hoping levels wouldn't overlap transparent water world polys since there's no control over what the BSP compiler does. Ironwail has the same problem (with r_oit 0), I never noticed.

Options are:

I can do the 2nd one if you think this should be fixed.

Novum commented 1 year ago

What OIT does Ironwail use? Linked lists per fragment? That's very slow as far as I know. I think just drawing water through the CPU path is the easiest way to fix this and shouldn't hurt perf much.

temx commented 1 year ago

5f2a4ee should take care of this, now anything transparent should be drawn in the same order as before (no exception for opaque water, sadly).

What OIT does Ironwail use? Linked lists per fragment?

No, it's weighted blending. It uses a single R16G16B16A16 buffer with ADD blending mode which contains the sum of all transparent fragments (weighted by a function of the alpha value itself and the distance), resolve is dividing by alpha (which contains the sum of weights). Another R8 buffer contains the total "revealage" to blend with the opaque pass. It does look a bit strange at times (off, on; off, on; off, on). I think it's based on https://jcgt.org/published/0002/02/09/ It's a recent addition, it's not in 0.6.0.

Novum commented 1 year ago

Thanks for the fix!