Hanrahan-Krueger BSDF (hk)
This plugin provides an implementation of the Hanrahan-Krueger BSDF  for simulating single scattering in thin index-matched layers filled with a random scattering medium. In addition, the implementation also accounts for attenuated light that passes through themedium without undergoing any scattering events.
This BSDF requires a phase function to model scattering interactions within the random medium.
When no phase function is explicitly specified, it uses an isotropic one (g = 0) by default. A sample usage for instantiating the plugin is given on the next page:
When used in conjuction with the coating plugin, it is possible tomodel refraction and reflection at the layer boundaries when the indices of refraction are mismatched.The combination of these two plugins then reproduces the full model as it was originally proposed by Hanrahan and Krueger .
Note that this model does not account for light that undergoes multiple scattering events within the layer. This leads to energy loss, particularly at grazing angles, which can be seen in the left-hand image of Figure 16.
Note that when sigmaS = sigmaA = 0, or when thickness=0, any geometry associated with this BSDF becomes invisible, as light will pass through unchanged.
The implementation in Mitsuba is based on code by Tom Kazimiers and Marios Papas. Marios Papas has kindly verified the implementation of the coated and uncoated variants against both a path tracer and a separate reference implementation.
Parameter Type Description
- material : string
- Name of a material preset, see Table 5. (Default: skin1)
- sigmaS : spectrum or texture
- Specifies the scattering coefficient of the internal layer. (Default: based on material)
- sigmaA : spectrum or texture
- Specifies the absorption coefficient of the internal layer. (Default: based on material)
- sigmaT & albedo : spectrum or texture
- Optional: Alternatively, the scattering and absorption coefficientsmay also be specified using the extinction coefficient sigmaT and the single-scattering albedo. Note that only one of the parameter passing conventions can be used at a time (i.e. use either sigmaS&sigmaA or sigmaT&albedo)
- thickness : float
- Denotes the thickness of the layer. (should be specified in inverse units of sigmaA and sigmaS) (Default: 1)
- (Nested plugin) : phase
- A nested phase function instance that represents the type of scattering interactions occurring within the layer