Use Measured Data to Create BSDF/BRTDf Materials


Hi all,

I’m a graduate student majoring in architectural lighting environment.
Recently I’ve working on a project of measuring a translucent material (actually a kind of paper used before glass in ancient eastern architecture) and doing simulations in RADIANCE. But I have some problems in transforming measured data into RADIANCE material files.

I referred to Windows and Daylighting program carried by LBNL. And learned to transform specular glazing materials in IGDB (International Glazing Database) into .rad RADIANCE files using Optics6. But as for translucent materials, they are classified into CGDB (Complex Glazing Database), and the format of measured data is as follows (n-dif for normal diffuse, n-dir for normal direct).

{ wavelength Tf_n-dir Tf_n-dif Tb_n-dir Tb_n-dif Rf_n-dir Rf_n-dif Rb_n-dir Rb_n-dif }
0.300 0.0000 0.0229 0.0067 0.0104 0.0014 0.0460 0.0047 0.3445
0.305 0.0000 0.0182 0.0086 0.0091 0.0004 0.0441 0.0043 0.3477
0.310 0.0068 0.0106 0.0108 0.0081 0.0002 0.0430 0.0043 0.3539

2.495 0.0041 0.0826 0.0000 0.0908 0.0063 0.3200 0.0049 0.5468
2.500 0.0110 0.0801 0.0050 0.0896 0.0011 0.3243 0.0065 0.5443

So how can I define a BRTDf or BSDF format of material using these data?

  1. How can I use these wavelength-based data to calculate the wavelength-independent variables in BRTDf and BSDF material definitions?
    Within my capability, I can only measure the data of VISIBLE light, not all SOLAR radiation like above. I’m wondering can I use only visible light data to define the variables like rrefl, grefl and brefl in BRTDf?

  2. I don’t quite understand the meaning of rbrtd gbrtd bbrtd in BRTDf, which refers to directional diffuse component. As far as I know, the measurement can only get the direct-hemispherical reflectance(transmittance) and the diffuse-only reflectance(transmittance) as seen in the picture below. So how can I get the directional diffuse part? Can I calculate it from the variables above or do I have to use a goniometer-like instrument to measure for other angle-based data like how we get the XML file?

  3. I don’t quite know the difference between BSDF and BRTDf, as their name have almost the same meaning (as BSDF = BRDF + BTDF). So apart from the XML file which contains scattering and angle information, what else are their differences?

Looking forward to your replay! Thank you!!!



You are asking a very advanced question. The BSDF type in Radiance is a recent addition, which accepts an XML file containing the scattering distribution function, which is not what you have. I would recommend using the BRTDfunc type, setting the directional diffuse functions to 0 0 0, since you don’t have this information. You will also need to convert your spectral data to RGB values. I assume your material is not designed to be spectrally selective, so you can choose the values near the dominant wavelengths for RGB, which would be 0.700, 0.520, and 0.430 microns, respectively.
The BRTDfunc type can take constant values for the diffuse and specular amounts. The diffuse amount in this case is the diffuse-only measurement, and the specular would be the direct-hemispherical minus the diffuse-only. Using your notation, you would have something like:
void BRTDfunc measured_trans
“Tfndir700-Tfndif700” “Tfndir520-Tfndif520” “Tfndir430-Tfndif430”
0 0 0 .
9 Rfndif700 Rfndif520 Rfndif430
Rbndif700 Rbndif520 Rbndif430
Tfndif700 Tfndif520 Tfndif430

Apologies for the poor formatting – I can’t get Discourse to behave for me. The idea is that you want to enter the front- and back-side quantities into the appropriate parts of the material definition. You can do the subtraction yourself, or replace the variables I’ve put above with the numerical values and Radiance will subtract them for you. Or, you can specify your own .cal file in place of the “.” after the three zeroes, and define everything in it like so:
Tfndif700 : 0.0063 ;
Tfndif520 : 0.0061 ;
Tfndif430 : 0.0062 ;

Then the above will work except you’ll still need to put numerical values into the final set of 9 arguments, so there probably isn’t much point.
I hope this helps. As I said, you are asking a very advanced question.


Thanks Greg! This helps a lot, and answers many of my questions.

One more thing, I still don’t how to get the parameters of rbrtd gbrtd bbrtd which relates to directional diffuse part of reflectance and transmittance.

And I’m wondering whether I can measure the directional diffuse using any kind of optical instrument (like a spectrophotometer).I already know the method of measuring the direct-hemispherical reflectance and the diffuse-only reflectance (shown in the picture above in my original question). But apparently we assume that the diffuse-only part plus the specular-only part equals the total reflectance(transmittance).

PS: The blue part is the directional diffuse in BRDF model in the picture below which I found in the paper of A Fast and Accurate Light Reflection Model ( And it assumes that the diffuse-only part (described as uniform diffuse in the paper) plus the specular-only part plus the directional-diffuse part equals the total reflectance(transmittance).

Thank you again!:grin:



You would need to use a gonioreflectometer to measure the portion of the BSDF that is neither pure specular nor pure diffuse, but then you should use the “BSDF” or “aBSDF” primitive. There are other ways of guesstimating roughness, but I would not recommend using the “BRTDfunc” primitive in that case, either. I was suggesting you use “0” for each of the rbrtd gbrtd bbrtd string parameters if you have no way to measure or estimate this lobe.


Thank you Greg! I will give it a try.:grin:


Hi Yao,

since we are operating a gonio-photometer here - do you have a physical
sample of that translucent material?

Cheers, Lars.


Hi Lars,

Yes! I do have some physical samples, and I’m now trying using BRTDf primitive as Greg suggests.Maybe I will try BSDF way if the former doesn’t work well as I supposed. :wink: