Page MenuHome

Ambient Occlusion: Add thickness heuristic
Open, NormalPublic

Description

Add thickness heuristic to reduce the AO from very thin objects as described in "Practical Realtime Strategies for Accurate Indirect Occlusion"

Details

Type
To Do

Event Timeline

Clément Foucault (fclem) triaged this task as Normal priority.

Hi. I recently reported that thin objects cause AO flickering: T60522. I guess it's related?

Yes, I was experiencing this same issue. Thanks for posting the videos, Marcin; that clearly shows the AO pulsing I was having. I assume the only workaround at present is to reduce the AO distance?

@Clément Foucault (fclem) Clément, would adding the ability to bake the AO for static (non-animated) objects as part of the Bake Indirect Lighting feature be a possible way to solve the flickering during animation, even without needing a thickness heuristic? I reduced the AO distance much further than what it should be for my architectural fly-through animation, and the AO still flickers badly. Merci de votre aide...

@Adam Janz (Copperplate) AO we're talking about here is a screen space effect so I don't think you can bake it.

I see; thanks Marcin. I'm going to investigate if there's any kind of workaround for this flickering issue while we wait for a fix to be implemented.

I haven't found a workaround yet. I tried making a larger proxy object with a transparent material to sit over top of the smaller object to hopefully fix the AO flickering on thin objects. Unfortunately, it did not help at all. This issue makes EEVEE unusable for animation... I'm considering moving this project to Unreal Engine, unless someone has any ideas on how to fix this.

Victory!!! Regarding fixing the AO flickering, I thank God for showing me two solutions:

Option 1. If you want to maintain the thickness of the current object, then you'll need to break out that object into its own Scene Layer which has AO bypassed. Use the new holdout material in EEVEE applied to copies of any objects that should cover, shade, or otherwise interact with the target object. Plug the renderlayer for this separate scene into it's own composite output node, and do the same for your main layer. Then composite BOTH Scene Layers together in a 3rd Scene Layer using an Alpha Over node. Set your desired frame range and color management settings from this 3rd layer and hit render. :-)

Option 2. If you're okay with it, just make your object thicker. From my observation, I believe this pulsing AO is directly related to any objects that are so thin, their anti-aliased presence on screen bleeds over about 3 pixels, meaning you only have 1 pixel thickness of solid colour. During animation, that thin line of pixels creates aliasing artifacts (viewable as a shimmer) which causes the AO to also shimmer badly. Making the object thicker so its bleed covers about 5 pixels, with 3 pixel thickness of solid colour, fixes the aliasing issue, and thus fixes the pulsing ambient occlusion. :-)

Super excited that there is a workaround for this!!

I hope this helps. :-)

-Adam