Fraunhofer Edge Free-Space Diffractions BSDF¶
A Fraunhofer-based edge diffractions BSDF [Steinberg et al., 2024]. Implements sampling and evaluation.
-
class free_space_diffraction_t
Free-space diffraction angular scattering function (ASF / BSDF). Formalises edge-based diffraction of beams, under the Fraunhofer approximation, for arbitrary apertures. Sampling and evaluations are handled by fsd_sampler, and are done in a wavenumber-agnostic space.
For more information: “A Free-Space Diffraction BSDF”, Steinberg et al., SIGGRAPH 2024.
Public Functions
-
free_space_diffraction_t(const ads::ads_t *ads, const fsd_sampler::fsd_sampler_t *fsd_sampler, const frame_t &frame, wavenumber_t k, f_t totalPower, const elliptic_cone_t &beam, const ads::intersection_record_t::edges_container_t &edges, const beam::gaussian_wavefront_t &wave_function) noexcept
Construct a new free space diffraction object.
- Parameters:
k – wavenumber
psi0 – integrated beam amplitude over opening
totalPower – integrated beam power impinging upon opening
edges – edges accessor
wave_function – wave function Gaussian
interaction_point – interaction point within the beam
-
free_space_diffraction_t(free_space_diffraction_t&&) noexcept = default
-
inline bool empty() const noexcept
Returns TRUE if the aperture is empty.
-
inline const auto &get_frame() const noexcept
-
inline sample_ret_t sample(sampler::sampler_t &sampler) const noexcept
Samples the free-space diffraction BSDF. The returned weight is bsdf/pdf.
-
inline solid_angle_density_t pdf(const dir3_t &wolocal) const noexcept
Queries the sampling density of the free-space diffraction BSDF. (approximation)
-
struct sample_ret_t
-
free_space_diffraction_t(const ads::ads_t *ads, const fsd_sampler::fsd_sampler_t *fsd_sampler, const frame_t &frame, wavenumber_t k, f_t totalPower, const elliptic_cone_t &beam, const ads::intersection_record_t::edges_container_t &edges, const beam::gaussian_wavefront_t &wave_function) noexcept