vSmartMOM supports a family of Bidirectional Reflectance Distribution Function (BRDF) models for the lower boundary condition in radiative transfer. This tutorial covers the mathematical background, code usage, and guidance for every available surface type – from the simplest isotropic Lambertian to the fully polarized Cox-Munk ocean surface.
Contents
Overview and model comparison
Lambertian surfaces
RPV (Rahman-Pinty-Verstraete) model
Ross-Li kernel-based model
Cox-Munk polarized ocean surface
Canopy-coupled surfaces
Polarization and Mueller matrices
Surface Jacobians (linearized RT)
Choosing the right model
Running a full example
YAML configuration
References
julia
using vSmartMOMusing vSmartMOM.CoreRTusing vSmartMOM.CoreRT: rpvSurfaceScalar, RossLiSurfaceScalar, LambertianSurfaceLegendre, LambertianSurfaceSplineusing CairoMakie
Every surface model is a subtype of AbstractSurfaceType. The RT solver dispatches through create_surface_layer!, which computes the Fourier-decomposed surface reflectance matrix for each azimuthal moment .
Model
Constructor
Params
Polarized?
Jacobians?
Use case
Lambertian (scalar)
LambertianSurfaceScalar(α)
1
no
yes
Simple land, snow, dark ocean
Lambertian (spectral)
LambertianSurfaceSpectrum([α₁,…])
N
no
no
Wavelength-varying surfaces
RPV
rpvSurfaceScalar(ρ₀, ρ_c, k, Θ)
4
no
no
Vegetation, soils
Ross-Li
RossLiSurfaceScalar(fvol, fgeo, fiso)
3
no
no
MODIS-style vegetation
Cox-Munk
CoxMunkSurface(wind_speed=U,…)
1-5
yes
yes
Ocean, sun glint
Canopy
CanopySurface(soil=…, LAI=…,…)
many
via soil
partial
Vegetation canopy + soil
Two additional Lambertian variants (LambertianSurfaceLegendre, LambertianSurfaceSpline) are available internally for polynomial or spline-based spectral albedo but are not exported.
The simplest model: reflectance is independent of viewing and illumination angles. A perfect Lambertian surface satisfies
where is the hemispherical albedo. Because the BRDF has no azimuthal dependence, only the Fourier moment is nonzero. The code applies a factor of 2 to for consistency with the Fourier series normalization used in the RT solver.
The Ross-Li model (Lucht, Schaaf & Strahler, 2000) decomposes the BRDF into a linear combination of semi-physical kernels:
Isotropic kernel: .
Ross Thick volumetric kernel (dense canopy scattering): where is the scattering angle.
Li Sparse geometric kernel (shadowing by sparsely distributed objects): where is the overlap function and primed angles are scaled by the crown shape ratio (, RAMI defaults).
Parameter
Symbol
Typical range
Physical meaning
Isotropic
0 - 0.3
Baseline reflectance
Volumetric
0 - 0.1
Dense-canopy scattering
Geometric
0 - 0.1
Mutual shadowing
Ross-Li is scalar-only: it returns zero for Stokes components beyond .
By default both kernel zenith angles are capped at 80° (zenith_cap_deg = 80), a vSmartMOM regularization of the grazing quadrature nodes, where the Li-sparse kernel turns strongly negative. zenith_cap_deg = nothing uses the true angles, i.e. the MODIS kernel definition that VLIDORT implements.
CoxMunkSurface is the first fully polarized surface model in vSmartMOM. It models the ocean as an ensemble of specular wave facets whose tilt distribution follows a wind-dependent Gaussian. Fresnel reflection from each facet produces a full Mueller-matrix BRDF that couples all four Stokes components. This is critical for remote sensing of ocean scenes (OCO-2/3, PACE, etc.) where sun glint polarization is a dominant signal.
The ocean surface is approximated as a collection of small flat facets ("capillary waves") whose slopes follow an isotropic Gaussian:
where is the variance of each slope component. Cox & Munk (1954) measured the total mean-square slope , which depends linearly on the 10-m wind speed (m/s):
Low wind ( m/s) gives a nearly mirror-like surface with a narrow specular glint; high wind ( m/s) spreads the glint over a wide angular range.
Each facet reflects specularly according to Fresnel's equations. For a complex relative refractive index (water/air) and local incidence angle :
where (Snell's law).
The Fresnel Mueller matrix for reflection is:
It refers to the facet basis , with normal to the plane of reflection. The off-diagonal (1,2) and (2,1) elements couple the and Stokes parameters – this is the polarizing effect of the ocean surface.
$$\beta$$
is the facet tilt angle ($\cos\beta = n_z$ for the facet normal $\hat n \propto \mathbf{k}_r - \mathbf{k}_i$)
is the local incidence angle on the tilted facet
changes the Stokes basis between a beam's meridian plane and the facet basis . The field components transform as with — a reflection of the basis, which is its own inverse — so
belongs to the incident and to the reflected beam.
$$S$$
is the Smith (1967) bistatic shadow masking factor
When n_water = nothing (the default), the solver uses the Segelstein (1981) table (34 nm – 10 m) at the wavelength of every spectral point. The function water_refractive_index(λ_nm) returns the complex refractive index at any wavelength, with n and k interpolated linearly in wavelength:
julia
n_water_550 = water_refractive_index(550.0)println("Water RI at 550 nm: n = ", round(real(n_water_550), digits=4), ", k = ", round(imag(n_water_550), sigdigits=3))
You can also provide a fixed value for the whole band, or a vector with one value per spectral point (used element-wise), via the n_water keyword of CoxMunkSurface.
The specular sun-glint peak can be extremely narrow (especially at low wind speed), requiring many Fourier moments to resolve. Rather than increasing max_m, the code applies a Truncated Multiple Scattering (TMS) correction after the Fourier loop: it adds the difference between the exact single-scattering surface contribution and the truncated Fourier reconstruction at each viewing geometry. This is handled automatically by apply_ss_correction! inside rt_run, for the TOA radiance only: upwelling radiances at interior observer heights (obs_alt) keep the Fourier-series glint, in the forward and the linearized solvers alike.
CanopySurface represents a vegetation canopy backed by a soil BRDF. It internally solves canopy sub-layers via the adding-doubling method before presenting an effective reflectance to the atmospheric RT. This is covered in detail in the Canopy Tutorial; here is a brief example:
CanopySurface_from_prospect(leaf, wl_grid; ...) provides a convenience constructor that computes spectral leaf optics from the PROSPECT model. See the Canopy Tutorial for multi-layer setups, spectral leaf optics, and within-canopy atmospheric absorption.
The Lambertian, RPV, and Ross-Li models are scalar-only: they populate only the Stokes block of the reflectance matrix and return zero for all off-diagonal blocks. This is sufficient for intensity-only () RT.
The Cox-Munk surface is the first model to fill the full Mueller matrix at the surface boundary. The Fresnel reflection off tilted wave facets couples the - and - Stokes components. Concretely:
For Stokes_I(): the reflectance matrix is .
For Stokes_IQUV(): it becomes with all Stokes cross-coupling blocks populated.
The Fourier decomposition uses polarization-aware azimuthal kernels: for the - / - blocks and for the cross blocks, matching the postprocessing reconstruction convention.
The derivative of the surface reflectance matrix w.r.t. albedo is trivially: for , where is the identity-like Stokes selector and are the quadrature weights.
The rendered docs include a Plotly comparison of the angular signatures for the main surface families:
The interactive panel uses synthetic angular shapes to illustrate these surface families. It is not output from the BRDF implementations and is not a validation reference.
Cox, C. & Munk, W. (1954). Measurement of the roughness of the sea surface from photographs of the sun's glitter. JOSA 44(11), 838-850. doi:10.1364/JOSA.44.000838
Koepke, P. (1984). Effective reflectance of oceanic whitecaps. Applied Optics 23(11), 1816-1824. doi:10.1364/AO.23.001816
Lucht, W., Schaaf, C.B. & Strahler, A.H. (2000). An algorithm for the retrieval of albedo from space using semiempirical BRDF models. IEEE Trans. Geosci. Remote Sens. 38(2), 977-998. doi:10.1109/36.841980
Mishchenko, M.I. & Travis, L.D. (1997). Satellite retrieval of aerosol properties over the ocean using polarization as well as intensity of reflected sunlight. JGR 102(D14), 16989-17013. doi:10.1029/97JD01084
Monahan, E.C. & O'Muircheartaigh, I.G. (1980). Optimal power-law description of oceanic whitecap coverage dependence on wind speed. J. Phys. Oceanogr. 10, 2094-2099.
Rahman, H., Pinty, B. & Verstraete, M.M. (1993). Coupled surface-atmosphere reflectance (CSAR) model: 2. Semiempirical surface model usable with NOAA advanced very high resolution radiometer data. JGR 98(D11), 20791-20801. doi:10.1029/93JD00564
Segelstein, D.J. (1981). The complex refractive index of water. M.S. Thesis, University of Missouri-Kansas City.
Smith, B.G. (1967). Geometrical shadowing of a random rough surface. IEEE Trans. Antennas Propag. 15(5), 668-671. doi:10.1109/TAP.1967.1138991
Zhai, P.-W., Hu, Y., Chowdhary, J., Trepte, C.R., Lucker, P.L. & Josset, D.B. (2010). A vector radiative transfer model for coupled atmosphere and ocean systems with a rough interface. JQSRT 111(7-8), 1025-1040. doi:10.1016/j.jqsrt.2009.12.005