Canopy Reflectance - BSDF

Hello everyone, I’m running into some problems that I think I have a solution pathway for, but that pathway rests on some assumptions. This post’s purpose is to confirm those assumptions prior to continuing down the solution pathway.

Specific Questions

  1. Does the BSDF material handle indirect lighting generated from artificial sources, specifically the “light” primitive?
  2. I want to confirm that when LBNL WINDOW generates a BSDF xml file, it only computes the optical behavior of the glazing and does not incorporate the window frame in computation.
  3. Will LBNL WINDOW allow the generation of a physically impossible BSDF xml material?
  4. Will Radiance allow the use of a physically impossible BSDF material?

Background
I am attempting to use Radiance to simulate a plant canopy’s extinction and reflection optical behavior in environments with primarily artificial lighting. Implementation of the extinction coefficient is straightforward enough using the ‘mist’ primitive, a primitive that takes an input for the optical extinction over a distance. Preliminary testing shows this implementation works as expected. However, implementation of canopy reflectance has proven a challenge, perhaps due to my approach coupled with my only 3 month history using Radiance.

My current approach for modeling canopy reflectance is to overlap the volume assigned the ‘mist’ primitive with a surface that has asymmetric reflectance and transmittance properties. This surface has somewhat unrealistic behavior in that it should allow perfect transmittance of a ray both directions. In addition, if the ray hits the surface from the outside of the canopy the surface should emit a ray of light as if specular reflection has occurred. The motivation for this approach is that the environment of interest is the space adjacent to the canopy, not the interior of the canopy itself. Here is a simple representation of the concept:

I’ve gone through a couple of implementations so far, with my most recent using BRTDfunc:

void BRTDfunc testing
10 refl_red refl_grn refl_blu trans_red trans_grn trans_blu 0 0 0 BRTDcanopy.cal
0
9 0 0 0 0 0 0 0 0 0

BRTDcanopy.cal
refl_red = if(Nz, 0.044, 0);
refl_grn = if(Nz, 0.067, 0);
refl_blu = if(Nz, 0.027, 0);
trans_red = if(Nz, 1, 1);
trans_grn = if(Nz, 1, 1);
trans_blu = if(Nz, 1, 1);

Testing of this implementation revealed some unexpected reflectance behavior, (specifically that light does not seem to perform more than one ambient bounce off the surface) which I suspect has to do BRTDfunc not handling indirect lighting. As such, I moved to try to implement this material with the BSDF function as follows.

I used LBNL WINDOW to attempt to generate a preliminary BSDF. First, I changed the Preferences - Optical Calcs settings:

  • use the matrix method first specular systems
  • write CSV output file
  • write XML BSDF output
  • generate full spectrally average matrixes for both the solar invisible bands
  • set condensed spectral data
  • Number of visible bands 5
  • Number of IR bands 10

Then, I generated a new glass called “canopy1” that had the following properties:

  • thickness = 3.048
  • conductivity = 0.900 w/m-K
  • Tsol = 1
  • Tsol2 = 1
  • Rsol1 = 0.06
  • Rsol2 = 0
  • Tvis = 1
  • Tvis2 = 1
  • Rvis1 = 0.06
  • Rvis2 = 0
  • Tir = 0.5
  • Emis1 = 0.5
  • Emis2 = 0.5
  • Color = green (RGB: 0,128,0).

Then, I assigned this glass to a glazing system and hit Calc (F9). The resulting XML BSDF file has angularly dependent transmittance, an undesired property. My current solution pathway is to manually edit the BSDF XML file itself. However, this solution pathway rests on the assumption that Radiance will accept a physically impossible BSDF, and this and related uncertainties motivate my posting here.

I can speak to some of your assumptions, but not all:

  1. Does the BSDF material handle indirect lighting generated from artificial sources, specifically the “light” primitive?

Yes, the “BSDF” material handles all light interactions. Best to use the “aBSDF” primitive if you have a specular transmitted component, as in your example.

  1. I want to confirm that when LBNL WINDOW generates a BSDF xml file, it only computes the optical behavior of the glazing and does not incorporate the window frame in computation.

I am not sure – perhaps someone else knows?

  1. Will LBNL WINDOW allow the generation of a physically impossible BSDF xml material?

I do not know whether WINDOW restricts reflectance+transmittance to be less than 100%.

  1. Will Radiance allow the use of a physically impossible BSDF material?

Yes, it will. Radiance does check the integrated values when a BSDF file is loaded, but it only prints a warning if the reflectance or transmittance is over 101% for some hemisphere. It does not add them together for you.

That said, I think the BRTDfunc primitive you started with might suit your problem better, as you have only specular reflectance and transmittance, which it models quite generally. If you have no diffuse component, it will not compute diffuse interreflections, but it computes specular interreflections just fine.

There is a limit to how many bounces you will compute, which is controlled by the -lr and -lw rendering options. Setting the -lr count negative turns on Russian roulette sampling, which is the default in rtrace and rcontrib but not rpict or rvu.