Does Arnold's microfacets model use multiple scattering to avoid energy loss when using high roughness values?
here is a Siggraph paper on the subject:
nope. heitz does a stochastic random-walk that generally means you get some other noise to deal with. arnold uses a tabulated energy compensation term. there's no energy loss for high roughness if that's what doesn't make you sleep well 🙂
Thanks Max for the clarification.
Yes! I was more interested if there is a energy compensation when using high roughness values not so much what exact method is used for the compensation but it's good to know.
I did a test with a sphere and a AIstandardSurface with different roughness values which confirmed visually there is no energy loss but when I have transmission set to 1 (for example I want to achieve a frosted glass look with a higher roughness value) it looks like there is a energy loss because there is a visible darkening of the sphere.
Can you confirm that there is a energy compensation for refraction like there is for reflections?
We had a Netflix vendor test (one part of the test was the render engine) where we could not match the look of their test spheres when the sphere has transmission 1 and roughness 1. Our sphere did look darker (all other render tests we where pretty on spot).
We passed the test but I'm curious which one was physically more correct. The reference provided by Netflix (they didn't specify which render they did use) but it looked like it could be more correct or our sphere which had some darkening on high roughness values.
Thanks,
Marko
I can't confirm anything because I don't work for autodesk but that's what I read from tech papers.
however on a 'white furnace test' I just did right now .. incredibly not the reflection nor the refraction have got a chance to pass it.
Here tests with reflection roughness at 1, 0.5, 0.2 .. everything should be pure white .. instead it approaches proper energy conservation only below 0.2 roughness.
Eventually a test material in arnold that does proper multiple-scattering with roughness fixed at _1_ .. only multiple scatter bounces change here .. respectively 5, 10 and 20 bounces. at 20 almost no energy leak.. just some slight darkening artifacts at edges (that's a different problem than energy leak).
Also sampling gets weird with rough materials. A basic comparison between a fully energy conserving material (left) and aistandardsurface.
Hey Max,
I did a 'white furnace test' with the aistandardsurface (base weight set to 1) and I didn't see any energy loss. I get pure white in the 0 to 1 roughness range. Only when I have transmission turned on it shows energy loss, same as in your example in the previous post. Also when I use some HDRI it does not show noticeable energy loss (see attached picture).
My conclusion was that aistandardsurface is energy conserving with high roughness values except when using transmission but your test shows that my conclusion was wrong. How did you do this test?
here we're talking about microfacet reflections, right ? so you have to set metalness to 1 with also base=1 and specular=1 .. ie full reflections with no fresnel (or another setup.. diffuse to fully black and ior to 500). attach a default skydome light (with full white color) to your scene then start increasing roughness on your material ... you'll begin to see energy leaking from 0.2 and up.
# copy&paste it into energyleak.ass then .. # $ kick energyleak.ass
options { AA_samples 4 outputs "RGBA RGBA filterg driverx" camera "perspShape" xres 960 yres 540 frame 1 } gaussian_filter { name filterg } driver_exr { name driverx filename "microfacet_energyleak.exr" } persp_camera { name perspShape position 0 0 10 fov 40 } skydome_light { name aiSkyDomeLightShape1 color 1 1 1 } sphere { name mysphere1 radius 2 shader aiStandardSurface1 } standard_surface { name aiStandardSurface1 base 1 specular_roughness 1 metalness 1 }
output :
eventually things gonna be worst as soon as we add normal/bump mapping .. that beside producing other kind of artifacts, it also sucks energy! here compared to proper normal mapping based on micro-faceting (right).
Hey Max,
I made a mistake and didn't set metalness to 1. Now I get same results as you.
Thank you very much for the explanations.
It's good to know that aiStandardSurface is not 100% energy conserving on high roughness values.