[Radiance-general] BRDF material description

Gregory J. Ward gregoryjward at gmail.com
Fri Sep 15 11:18:20 CEST 2006


Looks like no one replied to this one...

> From: webmaster at audice.com
> Date: September 7, 2006 8:20:27 PM BDT
>
> Hello!
>
> Does anyone have a BRDF-based radiance material descriptions for
> spray-painted plaster, white plaster, white water paint, linoleum,
> parquet?

Some measured and fitted data sets may be found on Wojceich Matusik's  
pages at MERL:

	http://people.csail.mit.edu/wojciech/BRDFAnalysis/

Go to the "Supplemental Material" PDF to find a set of isotropic  
BRDFs with Ward reflectance model parameters.  Use thew Ward-Duer  
fits if you have the latest version of Radiance with Duer's  
corrections (vers. 3.6 and later).

> The other question:
> How can I make use of some measured reflectance data (like this -
> http://www.graphics.cornell.edu/online/measurements/reflectance/ 
> index.html) in Radiance?
> Is there any way to reproduce such materials in Radiance?

The best way is to fit the data to the existing reflectance model in  
Radiance.  This way, you will avoid problems with sampling errors and  
get the full BRDF behavior.  If the measured data does not fit the  
existing isotropic or anisotropic models, then you will have to enter  
it as (preferably smoothed) data or create your own model.  In either  
case, you will get the correct behavior only for reflections from  
light sources, and reflections from other (non-source) objects will  
be approximated as diffuse.

> Radiance uses RGB components instead of wavelengths. It's tricky, but
> we can turn to RGBs from wavelengths. At least we can use only 550nm
> measured data for specific tasks. But for every incident ray we'll get
> a whole hemispherical distribution, while in Radiance material
> descriptions like plasdata, metdata it seems we do not have any means
> to describe this distribution. There is only an incident light and
> corresponding RGB reflectance (specular I suppose?). Is it right?!

The "plasdata" type has a white specular component and "metdata" has  
a specular component that matches the RGB color given.  These will be  
very close to real materials -- in general it's one or the other.   
Variations between would arise if you mixed two such materials, like  
a metallic car paint with a clear coat.  In such cases, you could  
employ a mixfunc to obtain the desired behavior, or go whole-hog with  
the BRTDfunc type, though this would be rather more work as you would  
need to incorporate your data into the associated *.cal file using  
nested select() functions (not fun).

Ignoring color, both "plastdata" and "metdata" both provide the means  
to specify a full BRDF, since the indices to the N-dimensional data  
are actually functions of the incident light direction vector.  For  
example, you could give:

void plasdata bad_example
7 noop bad.dat brdfang.cal inc_alt inc_azi refl_alt refl_azi
0
4 0.5 0.7 0.3 0.05

Where "brdfang.cal" is something like:

{ Compute incident and reflected altitude and azimuth angles in  
degrees }
inc_alt(sx,sy,sz) = asin(sz) / DEGREE;
inc_azi(sx,sy,sz) = atan2(sy,sx) / DEGREE;
refl_alt(sx,sy,sz) = asin(Dz) / DEGREE;
refl_azi(sx,sy,sz) = atan2(Dy,Dx) / DEGREE;

These variables then would serve as indices to your 4-dimensional  
data in "bad.dat":

# BRDF measurements, incident altitude and azimuth first, then  
reflected alt & azi
4
-90 90  22
-180 180  44
-90 90  15
-180 180  30
# 22 * 44 * 15 * 30 == 435,600 data points
...

Perhaps at this point you are beginning to see why no examples of  
plasdata and metdata have appeared on the mailing list.

> But where is diffuse component to declare?

The diffuse component would the minimum value of your BRDF, which you  
would subtract from every point as a constant Lambertian component.   
Since the BRDF of a diffuse surface is everywhere rho/pi, you would  
multiply this constant by pi and specify it as your diffuse  
reflectance.  For proper normalization, you would further divide your  
remaining directional BRDF by the specular component value, since it  
will be remultiplied by the specularity in plasdata and metdata.

> I searched thru the mailing list archives, looked in the digest and
> didn't find any answer related to my question.

I'm not sure this question has been properly answered before.  I'm  
not sure it has now, either.

-Greg



More information about the Radiance-general mailing list