Rough Glass Microfacet Model

Transmission models are a bit more involved than reflection models. The basic ideal dielectric refractive model seen in many renders all over the net is nice and all, but it just doesn't cut it when you want rough transmission, such as in frosted glass.

The one displayed here is based on microfacet theory, which means we assume that the surface is not in fact planar but has many microscopic imperfections - facets, facing in more or less random directions which all reflect and transmit light ideally. Of course, we don't actually model all those facets, instead we use statistical methods to evaluate them:

We can select ourselves the distribution of the facets, that is, the probability that any one facet is incident to the view vector, and find the surface normal of this microfacet. For this render, I chose the Beckmann distribution, but there are many more. The Beckmann distribution has a "roughness" parameter, which in simple terms defines the amount of variance in the facets' directions.

A roughness of zero means there are no facets - they are all pointing in the same direction, forming a uniform surface, so in this case the model degenerates into a long-winded form of ideal dielectric refraction. On the other hand, a very high roughness corresponds to diffuse transmission, where facets are all over the place, which looks rather odd (as evidenced by the lower-right sphere in the render).

The next step after having selected a normal vector for our facet, is to simply find the direction the new ray will go and its intensity. Easier said than done: the direction is straightforward, you calculate the Fresnel reflection/transmission coefficients and apply the law of reflection or Snell's Law accordingly to find the reflected/transmitted directions (remember to check for total internal reflection).

The actual intensity of the light ray is - of course - unchanged because there is no energy loss at the interface (well, there is, because light is a wave, but we are ignoring it here). But we're not talking about the intensity of individual rays, but of all of them on average, because we select the microfacet (and hence, the direction of reflection/transmission) probabilistically. This intensity is dependent on many things, but in particular we need to take into account self-shadowing: microfacets hiding each other. This is harder to take into account because we can't just go in there and test for intersection ourselves, so we must introduce a self-shadowing term, which is the probability of a microfacet being blocked from our view by another.

The exact specifics of the math are too elaborate to go into detail here, but the reference I used is "Microfacet Models For Refraction Through Rough Surfaces" (it's free!). These models are more difficult to use and understand than standard reflection BRDF's, but they are worth it!

Another cool thing is that if you use this model on a material that is incapable of refraction then you will only get Fresnel reflection, and the model will simplify down to Cook-Torrance. One material to rule them all! (almost, anyway, we're still missing scattering - more on that later).