BRDF material description

Hello!

Does anyone have a BRDF-based radiance material descriptions for
spray-painted plaster, white plaster, white water paint, linoleum,
parquet?

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?

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?!

But where is diffuse component to declare?

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

···

--
Best Regards,
Ilya Zimnovich mailto:webmaster@audice.com

Looks like no one replied to this one...

From: webmaster@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