Through reading various sources online, I've become a bit confused. I'll briefly outline what I think I do understand:

My understanding is that microfacet-based BRDFs assume there is always a perfect reflection, but the true microscopic normal changes according to some Normal Distribution Function (NDF), resulting in a non-perfect macroscopic reflection. When ray tracing, you sample this NDF to generate a "true" normal, and then you can compute a bounce ray using your incident ray, and a specular reflection with your "true" normal.

My confusion comes from a few things:

  1. What is the reason that some microfacet-based BRDFs are diffuse only (such as Oren-Nayar) or specular only (such as Cook-Torrance)? My assumption would be that if a roughness value of 0 were used, all of the normals should align and thus you would get a purely specular reflection. Similarly, if a roughness value of 1 was used, the normals would be all scattered, and you'd obtain a more diffuse reflection. Yet, Wikipedia states for the Oren-Nayar model: "In the case of $\sigma = 0$ (i.e., all facets in the same plane), and thus the Oren-Nayar model simplifies to the Lambertian model" If all of the microfacets align to the same plane, how could the computed reflection still be diffuse? What happens when I sample a bounce ray, as surely if the normals are all aligned, the sampled ray should be specular?

  2. If Oren-Nayar is a BRDF, and Cook-Torrance is a BRDF, but you need both to fully represent a single material's diffuse and specular components, is the combination of them also a BRDF? Is combining simple BRDFs that capture only a single aspect of reflection how you create a full PBR BRDF? (Looking at the OpenPBR white-paper, it seems that a single material is defined as a mixing of multiple simpler BRDFs)

  3. If you require multiple BRDFs to describe a single material, do they share the same NDF? When path tracing, how do you sample a bounce ray? If you are always simply performing a specular reflection on some sampled normal, how would you importance sample a BRDF or a light source?

I think I am getting confused by the fundamental difference between a BRDF and an NDF, and the roles they play.


Someone has pointed out that microfacet-models don't all assume that reflections are specular, some (like Oren-Nayar) assume they are lambertian. But it still seems like a collection of misaligned specularly reflecting microfacets would produce a diffuse effect (where, as roughness increases, you'd slowly transition from a perfect mirror, through glossy "soft" reflections, to diffuse). So why is a separate diffuse component needed? What is the conceptual reason for the distinction?

I have seen it said many times, that in reality all reflections, at the smallest scale, are only specular. Is it that Cook-Torrance is modeling each microfacet as a perfectly smooth mirror, but Oren-Nayar is modeling each microfacet as itself being composed of much smaller microfacets exhibiting diffuse behavior?

I'm still struggling to understand why both components are needed separately, and how a bounce ray is actually to be sampled. What does a roughness value even mean then, if a perfectly smooth surface still has a diffuse component from the Oren-Nayar model?

Edit 2:

After reading some more on the fresnel effect, as well as this answer on another question, I believe I understand what is happening now.

The Fresnel equations describe the reflection and transmission of light when it is incident on an interface between two different mediums. It tells us how much of the light is transmitted into the new medium, and how much is reflected away. The reflection is always specular, but can appear more or less diffuse based on how well-aligned the microfacets are (e.g. how rough the surface is). The refracted ray that is transmitted into the material, if the material is opaque, quickly interacts with the internal structure and is reflected back out in a different direction, hence appearing diffuse. But this is separate from the diffuse nature caused by the microfacets on the surface. A colleague of mine included this diagram in his dissertation:


(It isn't 100% clear to me how it differs from subsurface scattering. Perhaps, the only difference is the depth the rays are able to penetrate?)

So when we write the BRDF like this:

$$ f(\omega) = \biggl((1 - F)f_{\text{Lambert}}(\omega) + Ff_{\text{C-T}}(\omega) \biggr)\cos\theta $$

we're using the Fresnel equations to tell us how much light is going to be reflected off the surface (specularly, off the microfacet structure). The remainder of the light ($1-F$) is transmitted into the structure but then quickly reflected back out diffusely.


1 Answer 1


Actually, the confusion of yours mainly results from:

My understanding is that microfacet-based BRDFs assume there is always a perfect reflection, but the true microscopic normal changes according to some Normal Distribution Function (NDF), resulting in a non-perfect macroscopic reflection.

, which is NOT the case. There are two types of microfacet BSDF mainly:

  • Physically-based glossy (specular) material: each microfacet represents a infinitesimal specular mirror and there is always a perfect reflection. For example, Cook-Torrance is one of the representative models of this category.
  • Physically-based diffuse material: instead of modeling every infinitesimal facet as mirrors, this material assumes that they all have Lambertian reflection. It is known that Lambertian BRDF is empirical, so when representing diffuse object, object parts where the normals face away from the viewing direction appears to be dimmer, which is not realistic enough. Models like Oren-Nayar model each microfacet as perfect Lambertian diffusers and achieved more photo-realistic renderings.

Therefore, I think all of your confusions can be resolved:

(1) when all the normals are aligned, the surface properties depend on whether each microfacet is modeled to be mirror-specular or diffuse.

(2) Yes, mixture BSDFs can be seen in various renderers such as Mitsuba. However, in terms of combining simple BSDFs... it depends on what simple means to you. Some appearance are extremely difficult to model, for example: substrate (coated) materials, which needs more than simple surface reflection/refraction model. You can refer to the mitsuba documentation for more examples.

(3) They can or can not share the same NDF. It is implementation-dependent. You already know that different microfacet models can be modeled entirely different, so we should make NDFs of theirs independent. Or, when you want to conserve memory (in a weird way), you can make them all-coupled. To sample a ray in these BSDF, you can simply sample the BSDF to use as a first step, then sample the sampled BSDF as the second step. So, different sampled BSDF will yield different normal for you to use.

  • $\begingroup$ I think this raises two more question then: If I had a BRDF which used Oren-Nayar for the diffuse component, and Cook-Torrance for the specular component, with the GGX NDF, how do I sample a bounce ray? Do I pick either a diffuse or specular ray to sample? Could I sample 2 rays, 1 for each? And does importance sampling (such as directly sampling a light) change? $\endgroup$
    – Chris Gnam
    Feb 18 at 3:49
  • $\begingroup$ Well, since you are mixing two BSDF then we assume that you have mixing weights for these two BSDFs. In this case, the weights can just be constants, say $\alpha$. Then you first sample from a Bernoulli distribution defined by $\alpha$ to determine what underlying BSDF to be used. You can of course, sample two rays, one for each. For other more complicated cases, for example, Fresnel effect is involved in this BSDF sampling process, you can refer to this post. $\endgroup$ Feb 18 at 4:04
  • $\begingroup$ "does importance sampling (such as directly sampling a light) change?" Somewhat. At first, you will still sample an emitter then a point is sampled from that emitter. This step is material-independent and is only related to the emitter in the scene. However, emitter importance sampling does involves evaluating the material reflectance. So since your BSDF is a mixture, your evaluation code should be modified to evaluate all the mixed BSDFs and you should mix the result by the exact same weights. Other parts are almost the same. $\endgroup$ Feb 18 at 4:11
  • $\begingroup$ About "why is a separate diffuse component needed": if you only have a specular representation, you will not be able to represent something that is smoother than Lambertian BRDF. I think the 'smoothness gradient' ranges from pure specular (roughness = 0, specular microfacet) to glossy (roughness in (0, 1), specular microfacet), to Lambertian (roughness = 1, specular microfacet, or roughness = 0, Lambertian microfacet), then to something looking even rougher (roughness in (0, 1], Lambertian microfacet). $\endgroup$ Feb 18 at 4:16
  • 1
    $\begingroup$ I can't say I agree with your understanding. You can read the wikipedia page of Oren-Nayar model about how each microfacet has diffuse reflection. About "why a PBR model was modeling diffuse and specular components separately", I think it is intuitive: C-T (or Torrance-Sparrow) model is initially based on mirror specular microfacets, while some other people tried to applied it to Lambertian microfacets, since fully diffuse (Lambertian) and mirror specular are just two extreme cases of surface light transport. $\endgroup$ Feb 19 at 2:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.