I just would like to know what's the difference between the Matcap shaders used in ZBrush for example and the Bidirectional Radiance Distribution Function shader.

Are there two techniques the same ? Is Matcap done using BRDF or are they different ?

Assuming that you are referring to Bidirectional Reflectance Distribution Functions, a BRDF is nothing more than a fancy name for a broad class of lighting equations. These are Functions that compute the Distribution of Reflectance from a surface based on two directions (Bidirectional): the direction of the incident light and the direction of the viewer of the surface. The BRDF directions are both defined in terms of their relative direction with respect to the normal, so the normal is effectively an implicit parameter.

This is a very generalized category of lighting equations. Standard Lambert, Blinn, Phong, and so forth all qualify as Bidirectional Reflectance Distribution Functions. They can all be stated in terms of the direction towards the light and the direction towards the viewer.

However, since you're comparing it to Matcap, I assume you are referring to physically based BRDFs, not the general category of all BRDFs. That is, BRDFs generated from tables computed by using machines to detect the light interaction properties of real materials with a changing view and light direction.

Assuming the Matcap you are referring to is something like this, I would have to say, no. At least that particular implementation of Matcap is not.

If you want to be exceptionally generous, then it is a BRDF. But only in the loosest possible sense. Why? Because the reflectance computed does not change with either of the two directions. Just look at the shader; the only directional information it uses is the surface normal. And while it is a property that is used to compute the color, from the perspective of a BRDF, it's a constant.

If you want to be technical, Matcap uses a BRDF. Namely, the sphere texture. That is what the lighting equation actually is; that's the reflectance distribution, based on a specific view and light direction.

A proper physically-based BRDF is effectively a 4-dimensional lookup table, based on the angles of the two directions. Matcap uses a 2-dimensional lookup table, and the lookup is not really based on either the view or the light direction; just the normal. Matcap is basically cheating, using a single, static 2D slice of a proper 4D BRDF.

So no, Matcap is not a BRDF, much like your code that uses the result of a BRDF to color a particular pixel is not itself a BRDF.

• Thanks a lot for your very detailed answer ! So, BRDF is a way of calculating light on a surface. And yes I was talking of Tables generated BRDFs. – MaT Jul 15 '13 at 9:19
• And yes I was talking of Tables generated BRDFs. Matcap and BRDF are really not the same but uses the same technic which is the lookup table. Thanks again for you time. – MaT Jul 15 '13 at 9:31