bevy icon indicating copy to clipboard operation
bevy copied to clipboard

Added visibility bitmask as an alternative SSAO method

Open dragostis opened this issue 1 year ago • 6 comments

Early implementation. I still have to fix the documentation and consider writing a small migration guide.

Questions left to answer:

  • [ ] should thickness be an overridable constant?
  • [ ] is there a better way to implement Eq/Hash for SSAOMethod?
  • [ ] do we want to keep the linear sampler for the depth texture?
  • [ ] is there a better way to separate the logic than preprocessor macros?

vbao

dragostis avatar May 21 '24 14:05 dragostis

Welcome, new contributor!

Please make sure you've read our contributing guide and we look forward to reviewing your pull request shortly ✨

github-actions[bot] avatar May 21 '24 14:05 github-actions[bot]

References for reviewers:

  • https://ar5iv.labs.arxiv.org/html/2301.11376
  • https://cdrinmatane.github.io/posts/ssaovb-code

JMS55 avatar May 21 '24 17:05 JMS55

I added a few questions to answer before merging this and also added a linear sampler for the depth texture since I noticed it slightly improves some of the ghosting noticeable in small objects that happens due to the low resolution mip that gets selected for far-away samples.

dragostis avatar May 22 '24 14:05 dragostis

Another good reference: https://cybereality.com/screen-space-indirect-lighting-with-visibility-bitmask-improvement-to-gtao-ssao-real-time-ambient-occlusion-algorithm-glsl-shader-implementation/

@dragostis to give you an update, I'd still like to get this merged for Bevy 0.15 if you're interested. It's just going to be a very slow process, as reviewer bandwidth is very limited, and we have a large backlog of rendering PRs. I'll try to test this out in a few weeks when I'll have more free time, and help push it forward.

JMS55 avatar Aug 09 '24 18:08 JMS55

@JMS55, I'm happy to get this merged for 0.15!

In it's current form, it only handles AO. Adding GI as well is quite straightforward algorithm-wise, but would require extra textures and a separate denoise pass to look good.

dragostis avatar Aug 12 '24 13:08 dragostis

Yeah lets not do GI in this PR. Feel free to open another after if you're interested though.

To get this PR merged, I want to test this on some more realistic scenes and check how the perf/quality compares. If it's always better than the existing method, then imo we should remove the existing method and maintain just this one. That's basically the only blocker. Unfortunately I don't have a desktop for the next week or two to be able to run Sponza and other scenes.

There's also the opportunity here to change the denoiser/downscale depth/noise patterns that I copied from XeGTAO, and try what the newer vismask impls are using. Up to you on that, we can also leave the existing ones as-is.

JMS55 avatar Aug 12 '24 15:08 JMS55

The code behind the vismask paper was open sourced (NOTE: Parts, including the denoiser, are from Unity and are not open-source licensed, be careful which files you reference): https://github.com/cdrinmatane/SSRT3

JMS55 avatar Aug 28 '24 03:08 JMS55

I'm still quite busy with meshlets, but I need to find some time sometime soon to try this PR out and see how it compares to GTAO.

JMS55 avatar Aug 28 '24 03:08 JMS55

@JMS55, sorry the late reply. This month has been a bit busy, but I expect o have a bit more time to push this through in September.

A good scene to test this IMO is Blender's Classroom since it has a lot of thin geometry that showcases VBAO's strengths quite well.

dragostis avatar Aug 30 '24 08:08 dragostis

No worries, like I said I haven't had much time lately either.

Thanks, will try.

JMS55 avatar Aug 30 '24 17:08 JMS55

I loaded a textureless classroom into bevy and took a bunch of screenshots with varying thickness levels:

GTAO Screenshot from 2024-09-17 20-58-43

VBAO 0.5 Screenshot from 2024-09-17 20-58-29

GTAO Screenshot from 2024-09-17 21-00-52

VBAO 0.5 Screenshot from 2024-09-17 21-00-27

VBAO 1 Screenshot from 2024-09-17 21-00-40

GTAO Screenshot from 2024-09-17 21-03-03

VBAO 0.25 Screenshot from 2024-09-17 21-02-29

VBAO 1 Screenshot from 2024-09-17 21-02-48

dragostis avatar Sep 17 '24 18:09 dragostis

Very nice! I'd be happy to remove GTAO and merge VBAO personally. I don't see a need for both.

JMS55 avatar Sep 17 '24 18:09 JMS55

@dragostis is this ready to be reviewed now? If so, please take it out of draft :)

alice-i-cecile avatar Sep 23 '24 18:09 alice-i-cecile

@dragostis the release candidate for bevy 0.15 is in about a week. I'd like to get this in before then. Code is mostly done, I think we just need to remove GTAO, and some other smaller stuff. If you're busy, I'd be happy to finish this PR out for you. Let me know if you have time, otherwise I'll probably do this myself to ensure it makes the release in time.

JMS55 avatar Sep 29 '24 18:09 JMS55

@JMS55, I'll try to address the feedback and un-draft the PR tomorrow morning. Thanks for the heads up!

dragostis avatar Sep 30 '24 16:09 dragostis

Awesome, thanks! Excited to finally get this in!

Summary of needed changes (iirc, might be missing some):

  • Remove GTAO
  • Use a uniform/push constant for visbuffer config, not shaderdef
  • Test on DX12 (should work), remove the docs about SSAO not being supported on DX12
  • Write migration guide + changelog

JMS55 avatar Sep 30 '24 19:09 JMS55

I've crossed everything off the list apart from the changelog. Since Bevy doesn't keep a changelog file, does this mean doing a writeup in the release blog post or is it something completely different?

dragostis avatar Oct 01 '24 10:10 dragostis

Nvm looks like we removed the changelog from our PR template in favor of just the migration guide.

JMS55 avatar Oct 01 '24 16:10 JMS55

I think the conflicts are just caused by the required components PR. Should be trivial to resolve.

IceSentry avatar Oct 02 '24 05:10 IceSentry

I've crossed everything off the list apart from the changelog. Since Bevy doesn't keep a changelog file, does this mean doing a writeup in the release blog post or is it something completely different?

Yep, this will get a writeup in the blog post. I'll be pinging you over in the bevy-website repo to get your advice on how to write it :)

alice-i-cecile avatar Oct 02 '24 13:10 alice-i-cecile