Multiple-scattering BRDF

With rombo Reflect shaders, – we’re introducing microfacet multiple-scattering.

The microfaceting theory that is the fundation of the BRDF implementations out there is actually single-scattering. Microfacet models assume that the true physical surface is offset from a geometric surface in the form of a collection of microfacets called microsurface. Microfacet theory is a statistical model of the scattering properties of the microsurface. A microsurface model (BRDF) is described by a distribution of normals and a microsurface profile, the former describes how microfacets are oriented and the latter how they are organized.

Masking and shadowing functions are part of microfacet BRDFs. They give the probability that a microfacet is visible either in the outgoing direction (masking) or in the incident direction (shadowing). In other words, microfaceting is telling us the probability that a material surface has to reflect light into our view, aka how much light will come back to us once it is reflected on a rough surface.


Basically it means that when an incoming light ray is trying to reach the surface being evaluated it may be blocked by some other microfaces (shadowing) and its journey simply stops there, the same if it is lucky enough to reach the microsurface and bounce back but is then trapped by some other microface while is trying to get back to the viewer (masking).

It is simple to see that microfaceting theory is originally single-scattering. Only one bounce is taken into accout. But what if the ray can bounce multiple times before either reach the surface or get back into the view ? This is multiple-scattering.

Take care of a few things. A BRDF is called ‘physically based’ just if it’s based on microfaceting theory (that is considered to have a physical fundation) and if it’s energy conserving. So all BRDFs are still physically based even when they actually lose energy (as they all do) that also means that here ‘physically based’ does not mean that they can precisely predict measurements from a real physical surface.

So when a single-scatter BRDF begins to crack down under its own assumptions ? The more the material gets rough. In facts the more rough is the microsurface the more probabilities there’re that a ray can bounce against other microfaces. On the other hand as generally BRDFs do not consider multiple-scattering the more the surface is rough, the more a BRDF is losing energy. ie the more a material gets darker. For example if you simply google for ‘brdf roughness’ all images you find will exhibits this behaviour. This is the first I randomly got ..


This thing is so true that generally for years when modelling rough metals people always had to add a tiny bit of diffuse contribution to mantain the material enough bright and realistic. With rombo.metal there aint’ no more need for that. In facts, with rombo.metal one can actually specify how many bounces to take into account, default here is 10. First left image is GGX single-scattering, second right image is GGX multiple-scattering.

multiple-scattering BRDF

Here a full comparison over different roughness values between multiple-scattering and single-scattering.

So eventually, when to use multiple-scattering ? When one wants great-looking fully energy conserving rough metals.

multiple-scattering BRDF


Leave a Reply