Creating a BRDF file and using it as a bottom boundary

From PlanarRad
Jump to navigation Jump to search

It is possible to use PlanarRad to generate a BRDF file that can then be used as input as the bottom boundary condition for another run. One reason to do this is to implement a layered media. Currently PlanarRad only supports vertically homogenous media, but a two layer system (for example) can be modelled by generating BRDF for the lower layer and then using that as the bottom boundary for the upper layer.

The key points are this:

  • Generating the BRDF file requires 10 runs, one for each incident theta position of 0, 10, 20, 30, 40, 50, 60, 70, 80 and 87.5 degrees.
  • For layers where the refractive index does not change substantially (most likely for layers where the embedding media is the same but constituents change) the runs for generating the BRDF file should use the 'non-existent' interface option 'None'.
  • The separate tool 'reflectool' must be run from the command line to generate the BRDF file from the ten runs.
  • Then to model the upper layer is a standard run with normal interface settings and uses the the BRDF file for the lower boundary.
  • A simple test procedure to verify everything works OK is to do a model with two layers that have same optical properties and compare that to a single run for the depth of the two layers added together, the light field in the top half of the media should be identical.

This page gives a worked example for a model of two layers and demonstrates the verification that the output is correct.

Characterising the BRDF

To make a BRDF file requires that we have data on the full hemisphere of light reflected in every exitant direction for every incident direction, from a surface. In PlanarRad the standard directional discretisation for a hemisphere contains 217 quads, so the BRDF for one wavelength is a table of 217 x 217 numbers. To populate this table we can run PlanarRad with all the incident light in just one quad, and that will give us the 217 values, one for each exitant direction, for that particular incident direction. So on the face of it 217 PlanarRad runs would be required to characterise the whole BRDF. However, in almost all cases we can assume the BRDF is rotationally invariant.

The meaning of rotational invariance is this: Imagine you are looking at a surface from an angle and the sun is off to the right somewhere. You and the sun stay in the same place but the surface is rotated in a horizontal plane - it still looks the same. In PlanarRad currently the only way non-rotationally invariant results can be obtained is when using windblown air-water interface. Any runs using a flat or non-existent interface are rotationally invariant. The interface option of 'none' is what is normally required for a BRDF of a lower layer in a media. This means only 10 runs are required to characterise the BRDF, one for each incident theta row (zenith position) in the hemisphere. We can set the incident azimuth to zero for all runs and that will be enough information to characterise the BRDF.

Example model

For the example here we will generate a single wavelength BRDF for a 5m depth, attenuation c = 0.3, absorption a = 0.1, Petzold phase function, and bottom boundary black (reflectance = 0). Then we will input that as the bottom boundary for another run of 5m depth with the same optical properties. The result should be the same as a 10m run with black bottom boundary. This is demonstrated below.

Runs to characterise the BRDF (GUI)

The basic procedure is the same as described on this page: BRDF of a material with isotropic phase function, but with a few important changes. Assuming you are able to successfully follow the procedure on that page, do this:

1) Set the interface properties to 'None'. In the parameters file the parameter is 'iface_type = absent'.

Error creating thumbnail: Unable to save thumbnail to destination


2) Set the medium optical properties. In particular we'll use Petzold's phase function and not an isotropic phase function, because Petzold's phase function is forward peaked and so should induce more directionality into the BRDF and be a clearer test.

Error creating thumbnail: Unable to save thumbnail to destination


3) Set the depth to 5m.

Error creating thumbnail: Unable to save thumbnail to destination


4) To generate the BRDF the lower boundary for the bottom layer will be black, i.e. the lower boundary of the whole system (the two layers) is black.

Error creating thumbnail: Unable to save thumbnail to destination


5) Now everything that has been set will be constant and we need to do 10 runs varying the direction of the incident light. That means ten runs where zenith angle is 0, 10, 20, 30, 40, 50, 60, 70, 80 and 87.5. The name of the run should be changed each time, For example 'run_theta0', 'run_theta10', 'run_theta20' ... 'run_theta_87p5'. Note the other parameters: azimuth of zero and cosine parameter of 1, diffuse ratio 0. These set all the incident light to be in a single quad at azimuth position zero. If these are not set correctly reflectool will report an error later when building the BRDF file.

So just perform ten runs varying changing the items highlighted below.

Error creating thumbnail: Unable to save thumbnail to destination

Runs to characterise the BRDF (scripts using slabtool)

To generate the files from a script as described on this page: Command line running (Linux) the parameters file would look like the below. The sky files and interface file need to be pre-prepared which is most easily done by GUI runs as described above. In the below I have assumed the sky files have been renamed based on the theta value as 'input0_rd_HL18x24_1', 'input10_rd_HL18x24_1', etc. and the interface file has been renamed 'iface_absent_rdd_HL18x24_1'. It is slightly confusing that these are referred to as 'sky' and 'water_surface' in the parameters, as in this context they are really just incident light and interface. So, for the ten runs the options under 'name = run_theta30' and 'sky_fp = ...' should be changed for each run.

name = run_theta30

band_spec_fp = bands1.bsf

partition = sphere
vn = 18
hn = 24
theta_points = 0,5,15,25,35,45,55,65,75,85,90,95,105,115,125,135,145,155,165,175,180

depth = 5
sample_point_distance = 1
sample_point_delta_distance = 0.01

sky_fp = input30_rd_HL18x24_1

water_surface_fp = iface_absent_rdd_HL18x24_1

pf_fp = pf_rdd_HL18x24_1

atten_data = 0.3
absorp_data = 0.1

bottom_reflec_diffuse_data = 0

report_save_fp = report.txt

verbose = 6

Generating the BRDF file (reflectool)

At this point we should have a set of ten directories called 'run_theta0', 'run_theta10', ... 'run_theta87p5', each of which has a file called 'report.txt' in it. As described in this page: BRDF of a material with isotropic phase function, the entries under 'L_a Band 1' in the report.txt files contain the BRDF information. To read in those ten files and build the BRDF file a separate program is required called 'reflectool'. This program can be found in the same place as 'slabtool'. Currently the following only works under Linux with the latest version of PlanarRad.

Create a text file called params_brdf.txt (or whatever, doesn't matter) that looks like this:

band_spec_fp = bands1.bsf

ds_name = HL Standard
ds_code = HL18x24
partition = sphere
vn = 18
hn = 24
theta_points = 0,5,15,25,35,45,55,65,75,85,90,95,105,115,125,135,145,155,165,175,180
full_ds = false

operation = build
type = brdf

report_files_list = run_theta0/report.txt,run_theta10/report.txt,run_theta20/report.txt,run_theta30/report.txt,run_theta40/report.txt,run_theta50/report.txt,run_theta60/repo
rt.txt,run_theta70/report.txt,run_theta80/report.txt,run_theta87p5/report.txt

out_file = brdf_file

Download the file here: params_brdf.txt

Then run reflectool like this:

reflectool params=params_brdf.txt

The result should be a file called 'brdf_file'. This is the file that can be used as an input for the bottom boundary in PlanarRad.

If something doesn't work makes sure 'reflectool' is in the path, the file 'bands1.bsf' is in the current directory and file names in 'report_files_list' are correct. Otherwise heed the error message from reflectool as it will detect some errors in the input files.

Using the BRDF in PlanarRad

Now we will model the top layer and bottom layer together by using the BRDF file as the bottom layer. In the GUI select the BRDF file for the bottom boundary:

Error creating thumbnail: Unable to save thumbnail to destination


Set the interface to something sensible, since the top of the system probably really does have an interface with a change of refractive index. So for example, for a flat water surface:

Error creating thumbnail: Unable to save thumbnail to destination


For this test leave the optical properties of the media the same, and also leave the depth at 5m as we will model another layer of 5m on top of the layer encapsulated by the BRDF file.

Name the run something memorable and set the incident light. If teh pripose is the characterise the BRDF or BRF of the whole system then it will be single quad incident setup, such as here at 30 degrees. Bt any incident light distribution could now be used to illuminate the whole system.

Error creating thumbnail: Unable to save thumbnail to destination


After this the file 'run_two_layers/report.txt' will contain the light field data for the top 5m of the system. In particlular the data under 'L_a Band 1' is the directional irradiance to radiance reflectance from the top of the system (units sr-1)

Verifying against a single layer model

Since the two layer system we have modelled has two 5m layers with the same optical properties, the reflectance from the top of the system should be the same as if we modelled a singel layer of 10m. This provides a useful check of:

  1. PlanarRad is correct (should never be taken for granted...)
  2. Your modelling setup is correct.

It is recommended to include this check in all multiple layer modelling efforts.

To perform the check for the modelling done here, keep all options the same but change the bottom boundary to be at 10m and of zero reflectance.

Error creating thumbnail: Unable to save thumbnail to destination
Error creating thumbnail: Unable to save thumbnail to destination


Make sure the same incident light is used and name the run something different:

Error creating thumbnail: Unable to save thumbnail to destination


After this run compare the files 'run_two_layers/report.txt' and 'run_one_layer/report.txt'. The values under 'L_A Band 1' should be more or less identical with small numerical errors at most.