Dielectric BRDFs back

Board: Home Board index Raytracing General Development

(L) [2013/08/22] [ost by Geometrian] [Dielectric BRDFs] Wayback!

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
(L) [2013/08/22] [ost by andersll] [Dielectric BRDFs] Wayback!

How exactly is it "not working"? The method you describe is what's usually done. How have you implemented it exactly?
(L) [2013/08/22] [ost by dr_eck] [Dielectric BRDFs] Wayback!

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.)
(L) [2013/08/22] [ost by Geometrian] [Dielectric BRDFs] Wayback!

>> How exactly is it "not working"?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 it--just the BRDF's specular looks too small.
 >> 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.I'm using the common form for now. Let's assume the plastic reflects all light that falls on it though.
 >> 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.) >> The method you describe is what's usually done. How have you implemented it exactly?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 angle-dependent? Also, I'm trying to premultiply any Fresnel coefficients into the scattering function.
(L) [2013/08/23] [ost by graphicsMan] [Dielectric BRDFs] Wayback!

Look into the Ashikhmin-Shirley model, the Ward model, or the Cook-Torrence model.
(L) [2013/08/23] [ost by necro] [Dielectric BRDFs] Wayback!

>> 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 angle-dependent? Also, I'm trying to premultiply any Fresnel coefficients into the scattering function.
The particular problem of (Schlick-)Fresnel-layering a specular on top of diffuse BRDF is nicely executed in Shirley et al "A Practicioner's Assessment...": [LINK 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, Ashikhmin-Shirley 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.
(L) [2013/08/23] [ost by andersll] [Dielectric BRDFs] Wayback!

>> Geometrian wrote:How exactly is it "not working"?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 it--just the BRDF's specular looks too small.
Ahhh I see. Just use a microfacet BRDF like Walter:
[LINK http://www.graphics.cornell.edu/~bjw/microfacetbsdf.pdf]
[LINK https://github.com/imageworks/OpenShadingLanguage/blob/master/src/liboslexec/bsdf_microfacet.cpp]

Then use the angle between the half-vector and the incident light direction to calculate fresnel instead of the angle between the surface normal and the view direction.

back