Class free_space_diffraction_t

Nested Relationships

Nested Types

Class Documentation

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 f_t f(const dir3_t &wolocal) const noexcept

Evaluates the free-space diffraction BSDF.

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

Public Members

dir3_t wo
solid_angle_sampling_pd_t dpd
f_t weight