Dielectric BRDFs

 Posts: 29
 Joined: Sun Jul 28, 2013 6:53 pm
 Contact:
Dielectric BRDFs
Hi,
I'm trying to get a general BRDF for dielectrics. As I see it, there are three major ways light scatters: diffuse reflection, specular reflection, and transmission (the first two modeled with Phong). What I'm having trouble figuring out is how to weight the probability of each. I can create a BRDF that is purely specular, purely diffuse or purely transmissive, all conserving energy. The problem is trying to combine them in a reasonable way.
I tried a few things, but nothing really seemed to be realistic. The Fresnel equations describe how much energy is reflected versus transmitted, but what about, for example, opaque plastic? I tried, for example, using Fresnel reflectance to weight the specular and Fresnel transmittance to weight the diffuse, but this doesn't seem to really work for reasonable refractive indices.
Thanks,
G
I'm trying to get a general BRDF for dielectrics. As I see it, there are three major ways light scatters: diffuse reflection, specular reflection, and transmission (the first two modeled with Phong). What I'm having trouble figuring out is how to weight the probability of each. I can create a BRDF that is purely specular, purely diffuse or purely transmissive, all conserving energy. The problem is trying to combine them in a reasonable way.
I tried a few things, but nothing really seemed to be realistic. The Fresnel equations describe how much energy is reflected versus transmitted, but what about, for example, opaque plastic? I tried, for example, using Fresnel reflectance to weight the specular and Fresnel transmittance to weight the diffuse, but this doesn't seem to really work for reasonable refractive indices.
Thanks,
G
Re: Dielectric BRDFs
How exactly is it "not working"? The method you describe is what's usually done. How have you implemented it exactly?
Re: Dielectric BRDFs
First of all, are you using the common form of the Fresnel equations that assumes lossless media, or are you using complex numbers for refractive index? If you are only using real numbers, then you cannot model anything that absorbs light, such as opaque plastic.
Second, the appropriate way to combine transmission, reflection and scattering is to first calculate the reflected, transmitted and absorbed components based on the complex Fresnel equations and then use your scattering function to send each ray in the appropriate direction. As long as R + T + A = 1, you will conserve energy. (R, T and A are the fractions of the incident light that are reflected, transmitted and absorbed, respectively.)
Second, the appropriate way to combine transmission, reflection and scattering is to first calculate the reflected, transmitted and absorbed components based on the complex Fresnel equations and then use your scattering function to send each ray in the appropriate direction. As long as R + T + A = 1, you will conserve energy. (R, T and A are the fractions of the incident light that are reflected, transmitted and absorbed, respectively.)

 Posts: 29
 Joined: Sun Jul 28, 2013 6:53 pm
 Contact:
Re: Dielectric BRDFs
It just doesn't look right. The specular coefficient is very small for almost everything except glancing angles. To be fair, I haven't tried rendering real scenes with itjust the BRDF's specular looks too small.How exactly is it "not working"?
I'm using the common form for now. Let's assume the plastic reflects all light that falls on it though.First of all, are you using the common form of the Fresnel equations that assumes lossless media, or are you using complex numbers for refractive index? If you are only using real numbers, then you cannot model anything that absorbs light, such as opaque plastic.
Second, the appropriate way to combine transmission, reflection and scattering is to first calculate the reflected, transmitted and absorbed components based on the complex Fresnel equations and then use your scattering function to send each ray in the appropriate direction. As long as R + T + A = 1, you will conserve energy. (R, T and A are the fractions of the incident light that are reflected, transmitted and absorbed, respectively.)
I should clarify; the problem isn't energy conservation. It's finding a balance between specular and diffuse reflection. I realize that the Phong model isn't exactly physically based, but what's a good balance between them? Isn't it angledependent? Also, I'm trying to premultiply any Fresnel coefficients into the scattering function.The method you describe is what's usually done. How have you implemented it exactly?

 Posts: 167
 Joined: Mon Nov 28, 2011 7:28 pm
Re: Dielectric BRDFs
Look into the AshikhminShirley model, the Ward model, or the CookTorrence model.
Re: Dielectric BRDFs
The particular problem of (Schlick)Fresnellayering a specular on top of diffuse BRDF is nicely executed in Shirley et al "A Practicioner's Assessment...": http://www.cs.utah.edu/~hhh/papers/pg97.pdf. See "a coupled model". In fact it's the only reference that I am aware of that treats the problem nicely, AshikhminShirley uses something similar (but more energy losing and with no derivation whatsoever), and many others just do plainly wrong 1  Fresnel(half). Of course, once your Fresnel term gets more complicated or the specular BRDF gets glossy you need to use something more conservative and accept some amount of energy loss.I should clarify; the problem isn't energy conservation. It's finding a balance between specular and diffuse reflection. I realize that the Phong model isn't exactly physically based, but what's a good balance between them? Isn't it angledependent? Also, I'm trying to premultiply any Fresnel coefficients into the scattering function.
Re: Dielectric BRDFs
Ahhh I see. Just use a microfacet BRDF like Walter:Geometrian wrote:It just doesn't look right. The specular coefficient is very small for almost everything except glancing angles. To be fair, I haven't tried rendering real scenes with itjust the BRDF's specular looks too small.How exactly is it "not working"?
http://www.graphics.cornell.edu/~bjw/microfacetbsdf.pdf
https://github.com/imageworks/OpenShadi ... ofacet.cpp
Then use the angle between the halfvector and the incident light direction to calculate fresnel instead of the angle between the surface normal and the view direction.