PBR specular BRDF

Started by
22 comments, last by Hodgman 8 years, 8 months ago

I have a quick question -- this page distinguishes between using Blinn-Phong and Blinn-Phong BRDF:

https://seblagarde.wordpress.com/2011/08/17/hello-world/

I assume the latter means you are plugging it into one of the microfacet BRDFs, like Cook-Torrence or whatever. Is that right?

Also, the (n+1)/(2pi) factor seems pretty different than the (n+8)/(8pi) factor I've seen in other blogs, is that just an approximation or is it hand-tuned for looks?

Advertisement

I have a quick question -- this page distinguishes between using Blinn-Phong and Blinn-Phong BRDF:

https://seblagarde.wordpress.com/2011/08/17/hello-world/

He uses the terminology:
"Blinn-Phong" = H•NspecPower*specMask
"Blinn-Phong BRDF" = H•NspecPower*specMask*N•L

So basically, the latter has N dot L included, which is required when turning any BRDF into a lighting shader (as NdotL is part of the lighting equation, not the BRDF).

He says the approx normalization factor for the latter is (specPower+8)/(8pi), but also says that if you're using Blinn-Phong as an NDF (normal distribution function), as you do when using the Cook-Torrance BRDF, then the normalization factor is (specPower+2)/(2pi).

So in my earlier post, I should've used the "8" version, not the "2" version.

There's a good article on these many different normalization factors here - http://www.thetenthplanet.de/archives/255

Wait, doesn't Blinn-Phong use the half-vector and the normal instead of V and L?

Also, I have to admit I don't understand at all why you would need to multiply 'classic' phong by NdotL... but I saw on the page you linked the reference for that article is "Real-Time Rendering 3rd". I'll will seek it out, I didn't think that book had chapters on physical/off-line-ey stuff.

Thanks for that second link, so many shading models so little time!

Wait, doesn't Blinn-Phong use the half-vector and the normal instead of V and L?

Ugh, stupid typo on my part :( edited!

Also, I have to admit I don't understand at all why you would need to multiply 'classic' phong by NdotL...

It doesn't matter which BRDF you use, N•L is part of the rendering equation.

The physical meaning of it is finding the projected area of the incoming light beam on your surface.
Imagine that the incoming beam of light is a thin cone or frustum. Now, slice that cone/frustum with a plane that's perpendicular to the light direction - at the intersection, you get a little perfect circle for the cone, or square for the.frustum.
Now slice it instead at a 45° angle -- the circle becomes an oval, or the square becomes a rectangle.

That is what N•L represents. If the surface is struck at an angle, then the surface area under the beam is larger. That means the beam's energy is spread over a larger area, which means each individual point on the surface receives less energy.

AFTER, you've figured out how much energy is landing on your pixel (via N•L), then you can calculate how much of that energy is reflected towards your camera (via your BRDF).

Yes, traditionally people didn't use an N•L multiplier on their specular function, but that's completely wrong if you're aiming for physically based rendering.

This topic is closed to new replies.

Advertisement