Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added visibility bitmask as an alternative SSAO method #13454

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

dragostis
Copy link

@dragostis dragostis commented May 21, 2024

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

Copy link
Contributor

Welcome, new contributor!

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

@alice-i-cecile alice-i-cecile added C-Enhancement A new feature A-Rendering Drawing game state to the screen S-Waiting-on-Author The author needs to make changes or address concerns before this can be merged labels May 21, 2024
@dragostis dragostis changed the title Added visibility bitmass as an alternative SSAO method Added visibility bitmask as an alternative SSAO method May 21, 2024
@JMS55 JMS55 added this to the 0.15 milestone May 21, 2024
@JMS55 JMS55 requested a review from Elabajaba May 21, 2024 17:08
@JMS55
Copy link
Contributor

JMS55 commented May 21, 2024

@dragostis
Copy link
Author

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.

@JMS55
Copy link
Contributor

JMS55 commented Aug 9, 2024

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.

@dragostis
Copy link
Author

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

@JMS55
Copy link
Contributor

JMS55 commented Aug 12, 2024

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.

@IceSentry IceSentry self-requested a review August 14, 2024 01:00
@@ -347,13 +392,22 @@ impl FromWorld for SsaoPipelines {
address_mode_v: AddressMode::ClampToEdge,
..Default::default()
});
let linear_point_clamp_sampler = render_device.create_sampler(&SamplerDescriptor {
Copy link
Contributor

@DGriffin91 DGriffin91 Aug 22, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The other sampler is called point because it's a nearest sampler. I guess this is still using nearest for the mips.

@JMS55
Copy link
Contributor

JMS55 commented Aug 28, 2024

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 JMS55 self-requested a review August 28, 2024 03:09
@JMS55
Copy link
Contributor

JMS55 commented Aug 28, 2024

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Rendering Drawing game state to the screen C-Enhancement A new feature S-Waiting-on-Author The author needs to make changes or address concerns before this can be merged
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

None yet

4 participants