Table Of Contents

Previous topic

Building a Geometry

Next topic

Rendering Tools

This Page

Surface Models

Chroma includes a variety of surface models, which control the interaction of photons with objects. The Surface class contains many (typically wavelength-dependent) surface parameters, some of which apply to each surface model.

To select a particular model for a surface, set surface.model = MODEL where MODEL is one of { SURFACE_DEFAULT, SURFACE_COMPLEX, SURFACE_WLS }.

SURFACE_DEFAULT

The default surface model approximates real surfaces by combining a diffuse and specular reflection component. Surfaces may also be absorbing and detecting. The wavelength-dependent probabilities for detection, absorption, diffuse reflection, and specular reflection are provided in uniformly-spaced float arrays of length n, and should sum to unity. The corresponding wavelengths for these arrays are computed from the first (wavelength0) and the step size (step).

Parameters:

float *detect
float *absorb
float *reflect_diffuse
float *reflect_specular
unsigned int n
float step
float wavelength0

SURFACE_COMPLEX

This surface model uses a complex index of refraction (eta, k) to compute transmission, (specular) reflection, and absorption probabilities, taking into account the incoming photon polarization and surface thickness (thickness). Surfaces may also be photon detectors, but detection is conditional on absorption so detect should be normalized independently. Reflection may be either specular or diffuse, with probabilities given in reflect_specular and reflect_diffuse; these should sum to 1 at each wavelength. By default surfaces are not transmissive (use bool transmissive to set), and transmitted photons are absorbed.

Parameters:

float *detect
float *reflect_specular
float *reflect_diffuse
float *eta
float *k
unsigned int n
float step
float wavelength0
float thickness
bool transmissive

SURFACE_WLS

This surface model is used for wavelength-shifting surfaces. Surfaces may absorb, specularly reflect, diffusely reflect, or transmit photons; 1 - absorb - reflect_diffuse - reflect_specular gives the transmission probability. If a photon is absorbed, it may be reemitted with a probability given in float *reemit. The reemission spectrum CDF is defined in float* reemission_cdf. The CDF must start at 0 and end at 1. This model does not enforce conservation of energy, and cannot reemit multiple photons!

Parameters:

float *absorb
float *reflect_specular
float *reflect_diffuse
float *reemit
float *reemission_cdf
unsigned int n
float step
float wavelength0