Properly scale SSR reflection based on metallic value for dielectric materials #65594
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes: #61930
The issue here was caused by scaling the impact of SSR by the metallic value alone. Dielectric materials (materials with a metallic value of 0.0) still exhibit specular reflections, even when their roughness is 1.0. This PR replaces the simple multiplication by the metallic value with a proper fresnel-schlick calculation. This scales the impact of SSR based on viewing angle (more reflection with a flatter viewing angle) and metallic.
In this PR I also remove the
metallic_mask
which was used to select the channel to read from to read the metallic texture. Since metallic is always in the.w
channel, it is more efficient to just read from the.w
channel directly.While this is technically the correct way to account for metallic, The results look off to me. I think there are issues in other parts of the SSR pipeline. I will continue investigating.
Old:
New:
More comparisons
With high roughness: Old:New: