Dear Greg,
Thank you very much for your highly detailed answer to my question!
Unfortunately, I'd like to ask you another (this time Ward model
related).
Where can I enter these Ward-Duer fits in Radiance? I have not
found any Ward model associated .cal scripts in Radiance. There is
only He-Torrence (He.cal, He3.cal) model.
The Radiance materials themself are based on a Ward model I suppose?!
But where can I enter these values? BRTDfunc material description
needs a corresponding .cal script file to work?! Other material types,
like anisotrophic version of plastic, do not have enough parameters to
specify associated data.
I use Radiance v3.7.2 (cygwin/X build).
I'm sorry for taking your time!
···
Looks like no one replied to this one...
From: [email protected]
Date: September 7, 2006 8:20:27 PM BDTHello!
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:
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
--
Best Regards,
Ilya A. Zimnovich mailto:[email protected]