Minnaert is a modification of Lambert that works by attenuating the intensity by the view angle and light direction. This means that the surface will be brightest when the light and view directions are parallel and areas facing away from the light will become darker more quickly when compared to Lambert, although the darkest point will never become darker than an equivalent Lambert surface.This is useful for things like cloth. Velvet is a common use case and the results are pretty convincing. Here are 2 shaders with essentially the same settings: 100% Red, no Rim light, no Specular, using a water normal map. On the Left is Minnaert with a darkening factor of 4, while on the right is Lambert. You could get equivalent effects to Lambert by simply setting the darkening factor to 0.

It is also a shader that I find benefits a lot from a Rim Light, although it’s not so physically accurate (It’s can’t be attenuated like real lights and so will appear brighter than your real lights. Therefore its a good idea to use lower brightness values). Here is the same shader with a 50% intensity rim light on the left and with no rim light on the right.
For ease of demonstration, I stripped specularity completely. You can add whatever specular model you wish back in if you need it.

Maya CGFX File:

minnaert.cgfx
File Size: 7 kb
File Type: cgfx

Download File


Unity SHADER File:

minnaert.shader
File Size: 8 kb
File Type: shader

Download File


Leave a Reply

Your email address will not be published. Required fields are marked *