BSDFs¶
The Eradiate kernel provides a collection of BSDFs (Bidirectional Scattering Distribution Functions) targeted at Earth observation applications. The following models are available:
Empirical surface models:
rpv(Rahman-Pinty-Verstraete),rtls(Ross-Thick Li-Sparse),hapke,maignan— semi-empirical bidirectional reflectance distribution functions calibrated against satellite or in-situ measurements.Water surface models:
ocean_grasp,ocean_legacy,ocean_mishchenko— ocean BRDF parametrizations accounting for wind-driven surface roughness, foam, and subsurface scattering.Measured reflectance:
mqdiffuse,measured_mono— special-purpose data-driven material models.Material models:
bilambertian— simple diffuse material model supporting reflection and transmission.Utility:
selectbsdf— conditionally selects among multiple BSDFs based on a material index texture.
Bi-Lambertian material (bilambertian)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
reflectance |
spectrum or texture |
Specifies the diffuse reflectance of the material. Default: 0.5 |
P ∂ |
transmittance |
spectrum or texture |
Specifies the diffuse transmittance of the material. Default: 0.5 |
P ∂ |
The bi-Lambertian material scatters light diffusely into the entire sphere. The reflectance specifies the amount of light scattered into the incoming hemisphere, while the transmittance specifies the amount of light scattered into the outgoing hemisphere. This material is two-sided.
Note
This material is not designed for realistic rendering, but rather for large-scale simulation of atmospheric radiative transfer over vegetated surfaces.
Hapke surface model (hapke)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
w |
spectrum or texture |
Single scattering albedo (in \([0, 1]\); default: 0.5). |
P ∂ |
b |
spectrum or texture |
Asymmetry parameter of the Henyey-Greenstein phase function (in \([0, 1]\); default: 0.2). |
P ∂ |
c |
spectrum or texture |
Backscattering parameter of the Henyey-Greenstein phase function (in \([0, 1]\); default: 0.5). |
P ∂ |
theta |
spectrum or texture |
Macroscopic roughness, expressed as the mean slope angle (in \([0°, 90°]\); default: 30°). |
P ∂ |
B_0 |
spectrum or texture |
Intensity of shadow hiding opposition effect (in \([0, 1]\); default: 0). |
P ∂ |
h |
spectrum or texture |
Width of shadow hiding opposition effect (in \([0, 1]\); default: 0). |
P ∂ |
This plugin implements a bare soil reflection model based on the work of Bruce Hapke. This variant is validated against the one presented by Nguyen et al. [NJL+25]. It features 6 parameters and includes adjustments compared to the core reference [Hap12].
The default parameters are an order of magnitude of the results presented by Nguyen et al. [NJL+25] and notably neglect the influence of the opposition effect.
Polarized reflection model by Maignan et al. (maignan)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
C |
spectrum or texture |
\(\rho_0 \ge 0\). Default: 5.0 |
P ∂ |
ndvi |
spectrum or texture |
\(0 \le \mathrm{ndvi} \le 1\). Default: 0.8 |
P ∂ |
refr_re |
spectrum or texture |
\(1 \le \mathrm{refr}_\mathrm{re} \le \infty\). Default: 1.5 |
P ∂ |
refr_im |
spectrum or texture |
\(0 \le \mathrm{refr}_\mathrm{im} \le \infty\). Default: 0.0 |
P ∂ |
ext_ior |
spectrum or texture |
Exterior index of refraction specified numerically or using a known material name. Note that the complex component is assumed to be 0. Default: 1.000277 |
This plugin implements the reflection model proposed by [MBreonFedeleB09].
Apart from floating point values, model parameters can be defined by nested or referenced textures which are then mapped onto the shape based on its UV parameterization.
The model is based on fits to POLDER observations and combines a BRDF with the Fresnel reflectance matrix (see Eq. 21 in [MBreonFedeleB09]).
Note that this material is one-sided—that is, observed from the
back side, it will be completely black. If this is undesirable,
consider using the twosided BSDF adapter plugin.
The following snippet describes an RPV material with monochromatic parameters:
"type": "maignan",
"C": 5.0,
"ndvi": 0.8,
"refr_re": 1.5,
"refr_im": 0.0,
<bsdf type="maignan">
<float name="C" value="5"/>
<float name="ndvi" value="0.8"/>
<float name="refr_re" value="1.5"/>
<float name="refr_im" value="0.0"/>
<float name="ext_ior" value="1.0"/>
</bsdf>
Measured material (measured_mono)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
filename |
string |
Filename of the material data file to be loaded |
|
wavelength |
float |
Specifies the wavelength at which the model is evaluated with monochromatic variants. |
This plugin is a modified version of the measured BSDF which supports
monochromatic variants.
Measured quasi-diffuse material (mqdiffuse)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
filename |
string |
Filename of the volume to be loaded. |
— |
grid |
VolumeGrid object |
When creating a grid volume at runtime, e.g. from Python or C++,
an existing |
— |
accel |
boolean |
Hardware acceleration features can be used in CUDA mode. These features can cause small differences as hardware interpolation methods typically have a loss of precision (not exactly 32-bit arithmetic). (Default: true) |
— |
This plugin models the reflection of light by opaque materials with a behaviour close to diffuse, i.e with no strong scattering lobe. Assumptions are as follows:
The material is isotropic. Consequently, only the azimuth difference matters.
The material is gray. Consequently, no spectral dimension is used.
The data dimension order is (cos_theta_o, phi_d, cos_theta_i).
The sampling routine is uniform cosine-weighted (i.e. the same as for the
diffuse plugin).
Warning
Table values are not checked internally: ensuring that the data is consistent (e.g that the corresponding reflectance is not greater than 1) is the user’s responsibility.
(GRASP) Oceanic reflection model (ocean_grasp)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
wavelength |
float |
Specifies the wavelength at which to evaluate the oceanic reflectance. Range: [200, 4000] nm. Required |
P |
wind_speed |
spectrum or texture |
Specifies the wind speed at which to evaluate the oceanic reflectance. Range: [0, 37.54] m/s. Default: 0.1 m/s |
P ∂ |
eta, k |
spectrum or texture |
Real and imaginary components of the water’s index of refraction. Default: 1.33, 0.0 |
P ∂ |
ext_ior |
spectrum or texture |
Exterior index of refraction specified numerically or using a known material name. Note that the complex component is assumed to be 0. Default: 1.000277 |
P ∂ |
water_body_reflectance |
spectrum or texture |
Diffuse reflectance of radiations that entered and exited the water body. (Default: 0.). |
P ∂ |
component |
integer |
Debug: specifies which component of the oceanic reflection model to evaluate. Default: 0.
|
— |
This plugin implements the oceanic reflection model originally detailed in [LCD+24]. Note that this model is monochromatic.
For the fundamental formulae defining the oceanic reflectance model, please refer to the Eradiate Scientific Handbook.
Note that this material is one-sided—that is, observed from the
back side, it will be completely black. If this is undesirable,
consider using the twosided BSDF adapter plugin.
The following snippet describes an oceanic surface material with monochromatic
parameters:
"type": "ocean_grasp",
"wavelength": 550,
"wind_speed": 10,
"eta": 1.33,
"k": 0.,
"ext_ior": 1.0,
"water_body_reflectance": 0.02,
"component": 0,
<bsdf type="ocean_grasp">
<float name="wavelength" value="550"/>
<float name="wind_speed" value="10"/>
<float name="eta" value="1.33"/>
<float name="k" value="0."/>
<float name="ext_ior" value=1.0/>
<float name="water_body_reflectance" value=0.02/>
<int name="component" value="0"/>
</bsdf>
(Legacy 6S) Oceanic reflection model (ocean_legacy)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
wavelength |
float |
Specifies the wavelength at which to evaluate the oceanic reflectance. Range: [200, 4000] nm |
P |
wind_speed |
spectrum or texture |
Specifies the wind speed at which to evaluate the oceanic reflectance. Range: [0, 37.54] m/s. Default: 0.1 m/s |
P ∂ |
wind_direction |
float |
Specifies the wind direction at which to evaluate the oceanic reflectance in North Left convention. Range: [0, 360]. Default: 0.0° |
P ∂ |
chlorinity |
float |
Specifies the chlorinity of the water at which to evaluate the oceanic reflectance. Default: 19.0 g/kg |
P ∂ |
pigmentation |
float |
Specifies the pigmentation of the water at which to evaluate the oceanic reflectance. Range: [0.3, ∞[. Default: 0.3 mg/m^3 |
P ∂ |
shadowing |
boolean |
Indicates whether evaluation accounts for the shadowing-masking term. (Default: true). |
P |
component |
integer |
Debug: specifies which component of the oceanic reflection model to evaluate. Default: 0. Component 0: Used to evaluate the total oceanic reflectance. Component 1: Evaluates the whitecap reflectance. Component 2: Evaluates the sun glint reflectance. Component 3: Evaluates the underlight reflectance. Component 4: Evaluates the whitecap and underlight reflectance together. |
P |
State parameters |
|||
coverage |
float |
Fraction of the surface occupied by whitecaps. Modifying this parameter has no effect: it is automatically computed from the wind speed. |
P |
This plugin implements the oceanic reflection model originally implemented in the 6S radiative transfer model. Note that this model is monochromatic.
For the fundamental formulae defining the oceanic reflectance model, please refer to the Eradiate Scientific Handbook.
Note that this material is one-sided—that is, observed from the
back side, it will be completely black. If this is undesirable,
consider using the twosided BSDF adapter plugin.
The following snippet describes an oceanic surface material with monochromatic
parameters:
Warning
The wind direction is given in degrees and follows the North Left convention as in 6SV.
"type": "ocean_legacy",
"wavelength": 550,
"wind_speed": 10,
"wind_direction": 0,
"chlorinity": 19,
"pigmentation": 0.3,
"shadowing": True,
"component": 0,
<bsdf type="ocean_legacy">
<float name="wavelength" value="550"/>
<float name="wind_speed" value="10"/>
<float name="wind_direction" value="0"/>
<float name="chlorinity" value="19"/>
<float name="pigmentation" value="0.3"/>
<float name="shadowing" value="True"/>
<int name="component" value="0"/>
</bsdf>
Oceanic reflection model (ocean_mishchenko)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
wind_speed |
float |
Specifies the wind speed at which to evaluate the oceanic reflectance. Range: [0, 37.54] m/s. Default: 0.1 m/s |
P, ∂ |
eta, k |
spectrum or texture |
Real and imaginary components of the water’s index of refraction. Default: 1.33, 0.0 |
P, ∂ |
ext_ior |
spectrum or texture |
Exterior index of refraction specified numerically or using a known material name. Note that the complex component is assumed to be 0. Default: 1.000277 |
P, ∂ |
shadowing |
boolean |
Indicates whether evaluation accounts for the shadowing-masking term. Default: true |
— |
This plugin implements the polarized oceanic reflection model originally implemented by [MT97]. This model focuses on the sunglint reflectance, which follows the Cox and Munk surface slope probability distribution.
Note that this material is one-sided—that is, observed from the
back side, it will be completely black. If this is undesirable,
consider using the twosided BSDF adapter plugin.
The following snippet describes an oceanic surface material with monochromatic
parameters:
"type": "ocean_mishchenko",
"wind_speed": 10,
"eta": 1.33,
"k": 0.,
"ext_ior": 1.0,
<bsdf type="ocean_mishchenko">
<float name="wind_speed" value="10"/>
<float name="eta" value="1.33"/>
<float name="k" value="0."/>
<float name="ext_ior" value=1.0/>
</bsdf>
Note
This model only implements the sunglint reflection. See ocean legacy for a BSDF that includes whitecap, sunglint, and underlight reflectance.
Rahman Pinty Verstraete reflection model (rpv)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
rho_0 |
spectrum or texture |
\(\rho_0 \ge 0\). Default: 0.1 |
P ∂ |
k |
spectrum or texture |
\(k \in \mathbb{R}\). Default: 0.1 |
P ∂ |
g |
spectrum or texture |
\(-1 \le g \le 1\). Default: 0.0 |
P ∂ |
rho_c |
spectrum or texture |
Default: Equal to |
P ∂ |
This plugin implements the reflection model proposed by [RPV93].
Apart from floating point values, model parameters can be defined by nested or referenced textures which are then mapped onto the shape based on its UV parameterization.
This plugin also supports the most common extension of the RPV model to four parameters, namely the \(\rho_c\) extension, as used in [WLP+06].
For the fundamental formulae defining the RPV model, please refer to the Eradiate Scientific Handbook.
Note that this material is one-sided—that is, observed from the
back side, it will be completely black. If this is undesirable,
consider using the twosided BSDF adapter plugin.
The following snippet describes an RPV material with monochromatic parameters:
"type": "rpv",
"rho_0": 0.02,
"k": 0.3,
"g": -0.12
<bsdf type="rpv">
<float name="rho_0" value="0.02"/>
<float name="k" value="0.3"/>
<float name="g" value="-0.12"/>
</bsdf>
Ross-Thick Li-Sparse reflection model (rtls)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
f_iso |
spectrum or texture |
\(f_\mathrm{iso}\). Default: 0.209741 |
P ∂ |
f_geo |
spectrum or texture |
\(f_\mathrm{geo}\). Default: 0.081384 |
P ∂ |
f_vol |
spectrum or texture |
\(f_\mathrm{vol}\). Default: 0.004140 |
P ∂ |
h |
float |
\(h\). Default: 2.0 |
P |
r |
float |
\(r\). Default: 1.0 |
P |
b |
float |
\(b\). Default: 1.0 |
P |
The RTLS plugin implement the Ross-Thick, Li-Sparse model proposed by Strahler et al. [SLBS+99] for the MODIS operational BRDF model (Version 5.0).
The default values for the \(f_k\) parameters are taken from the RAMI4ATM benchmark test cases defined by the Joint Research Centre, for measures done using the Sentinel-2A MSI band 8A spectral region (centred around 865 nm). See the official RAMI website for details.
Selector material (selectbsdf)¶
Parameter |
Type |
Description |
Flags |
|---|---|---|---|
indices |
texture |
A texture of integer indices indicating which underlying BSDF is active as a function of space coordinates. |
P |
(Nested plugin) |
bsdf |
At least two nested BSDF instances that are selected based on selection indices. |
P, ∂ |
This plugin implements a selector material, which uses a texture to select one of an arbitrary number of nested BSDF plugins. The index texture should take discrete integer values (even if it is internally stored using floating-point numbers).
The index texture should be initialized carefully when using a bitmap
plugin:
set the
rawparameter toTrueto prevent spectral pre-processing;use a
nearestfilter type to avoid interpolation between pixels;it is more efficient to use a single-channel storage.