• Create Account

## Good rim lighting with Blinn-Phong

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

4 replies to this topic

### #1CDProp  Members

1268
Like
0Likes
Like

Posted 03 April 2014 - 09:36 PM

So, let's say I'm using a normalized Blinn-Phong BRDF. Here is the one from Real-Time Rendering, Third Edition, p. 257, Eq. 7.49:

Where:

cdiff is the diffuse reflectance

RF is the Fresnel term (Schlick's approximation)

αh is the angle between the view vector and the half vector

m is the specular exponent

θh is the angle between the normal and the half vector.

Now, this entire thing gets multiplied by the irradiance to get the final radiance:

It seems from this that it's quite difficult to get a nice Fresnel sheen, particularly on rough materials like asphalt. This is because, in order to maximize the specular term of the BRDF, both the view vector and the light vector have to be at grazing angles with the surface being rendered. Unfortunately, when the light vector is at a grazing angle with the surface, the irradiance factor is near zero, and so you don't get much light at all.

The situation can be somewhat improved by using a large m. Then, the normalization factor is large and this results in some light. However, it also results in a very sharp highlight, which is not helpful if the material is supposed to be rough.

In fact, it's difficult for me to envision a scenario where you can get strong Fresnel, strong n_dot_h, and strong irradiance.

I could divide the specular term by the clamped n_dot_l, but I'll have to add a small epsilon to avoid a singularity when n_dot_l is zero. Also, that seems to be sort of a hack without any physical basis and it doesn't conserve energy.

Is my thinking wrong?

### #2Ashaman73  Members

13649
Like
0Likes
Like

Posted 04 April 2014 - 12:20 AM

You have two choices , either go for a more physical correct BRDF or modify the formula.

Eg you could leave the  energy preservation (m+8/8pi) out of the formula. Rim light is a stage lighting setup to highlight the silhouette of the actor often used in movies and games, so it is an artificial light setup. Therefor there's no real reason to make it perfect

Ashaman

### #3Hodgman  Moderators

49387
Like
0Likes
Like

Posted 04 April 2014 - 12:28 AM

It seems from this that it's quite difficult to get a nice Fresnel sheen, particularly on rough materials like asphalt. This is because, in order to maximize the specular term of the BRDF, both the view vector and the light vector have to be at grazing angles with the surface being rendered. Unfortunately, when the light vector is at a grazing angle with the surface, the irradiance factor is near zero, and so you don't get much light at all.

Maybe you've got everything correct, but asphalt is actually just smoother than you think it is?

I've usually actually got the opposite problem - that the Fresnel ends up making rough objects too shiny/bright when under a "rim light" situation! Usually I have to hack the Fresnel function to make it artificially return lower values for rougher surfaces, to avoid them becoming 100% reflective at grazing angles.

### #4CDProp  Members

1268
Like
0Likes
Like

Posted 04 April 2014 - 11:19 AM

You have two choices , either go for a more physical correct BRDF or modify the formula.

Eg you could leave the  energy preservation (m+8/8pi) out of the formula. Rim light is a stage lighting setup to highlight the silhouette of the actor often used in movies and games, so it is an artificial light setup. Therefor there's no real reason to make it perfect

Fair enough, although even if the lighting setup is artificial, the physics is real. Objects really do appear to create a bright sheen at glancing angles, even if they're somewhat rough. I certainly don't mind including unrealistic approximations in my equations (I'm already doing that), but it bothers me if I am doing something cartoonishly unrealistic (like using a non-energy-conserving BRDF that has infinite reflectance in certain directions).

It seems from this that it's quite difficult to get a nice Fresnel sheen, particularly on rough materials like asphalt. This is because, in order to maximize the specular term of the BRDF, both the view vector and the light vector have to be at grazing angles with the surface being rendered. Unfortunately, when the light vector is at a grazing angle with the surface, the irradiance factor is near zero, and so you don't get much light at all.

Maybe you've got everything correct, but asphalt is actually just smoother than you think it is?

I've usually actually got the opposite problem - that the Fresnel ends up making rough objects too shiny/bright when under a "rim light" situation! Usually I have to hack the Fresnel function to make it artificially return lower values for rougher surfaces, to avoid them becoming 100% reflective at grazing angles.

I suppose it's possible that asphalt is smoother than I think it is. Even at fairly sharp exponents, the glare I get is hardly blinding. At m=256, the asphalt looks wet but the highlight is still quite dim (the normalization term is about 10.5, which becomes smaller once the BRDF is multiplied by the n_dot_l term). You say that your Fresnel term is 100% reflective at grazing angles -- this makes sense, but are you multiplying this term by n_dot_l? That should dim things quite a bit. Do you by chance have any code samples on your blog that I can look at, to see your lighting equation?

### #5Hodgman  Moderators

49387
Like
0Likes
Like

Posted 04 April 2014 - 05:41 PM

Yeah I use nDotL, but I've moved over to GGX. If you download BRDF explorer, I think it's got some examples of normalized Blinn phong.

How bright is your diffuse value - if it's unrealisticly high, it will hide your spec somewhat. Also, the fresnel effect should cause the diffuse lighting to become black/zero at glancing angles (if 100% is being reflected, then 0% is being diffused due to energy conservation) -- this phenomenon will make the "rim specular" more obvious, whereas without this phenomenon, the diffuse lighting may be overpowering and hiding the specular.

What's your spec-mask/F0/fresnel at incidence zero value?
Fresnel should have the effect of taking the asphalt from about 3% reflectivity up to 100%, which is a huge increase by itself, even with nDotL.

Edited by Hodgman, 05 April 2014 - 07:11 AM.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.