3

Is there a way to obtain a parametrized BRDF that smoothly interpolates between diffuse, glossy and mirror? For example, $\lambda = 0$ would be perfectly diffuse, $\lambda=0.5$ glossy and $\lambda = 1$ a perfect mirror. Linear interpolation seems very wrong here.

enter image description here

vuoriov4
  • 67
  • 5
  • This is what you should read: http://www.eugenedeon.com/project/importance-sampling-microfacet-based-bsdfs-using-the-distribution-of-visible-normals/ – ali Jun 22 '20 at 19:52
  • And this. https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html – ali Jun 22 '20 at 21:51

2 Answers2

5

Any microfacet BRDF with a roughness parameter will do something like this—for example using the GGX or Beckmann NDFs. When the roughness goes to zero it becomes a mirror; as roughness increases the reflection will be wider, and in the high-roughness limit should be essentially Lambert I think. Roughness is not necessarily limited to [0, 1] as roughness values higher than 1 are possible, but typically roughness = 1 will be very close to Lambert already.

One thing to note about the roughness = 0 limit is that the NDF will become singular (a delta function), so will very likely break the shader code by producing infinite values or NaNs and such. So as a practical matter it might be necessary to special-case that, or clamp the roughness to some low minimum value like 0.0001.

Nathan Reed
  • 25,002
  • 2
  • 68
  • 107
3

Although microfacet bxdfs do this to some degree, a roughness of 1 is not really the same as a diffuse.

I don't know of any single lobe which can properly blend between them. You would probably have to gradually ignore the reflection direction or include rays farther from it at a faster rate, which may make your glossy useless.

Production renderer materials layer various lobes including a diffuse/specular so they can blend between them or combine them together.

You can see how the arnolds blends thier lobes here: https://autodesk.github.io/standard-surface/

Peter
  • 529
  • 2
  • 5