spot emitter

class spot_t : public wt::emitter::emitter_t

A simple spot emitter. The spot emitter radiates from a singular point origin into a fixed solid angle. The falloff angle specifies the angle from the mean direction where the radiant intensity starts to linearly decrease, reaching 0 at cutoff degrees.

Public Functions

inline spot_t(std::string id, std::shared_ptr<spectrum::spectrum_real_t> radiant_intensity, angle_t cutoff, angle_t falloff, const transform_t &to_world, std::optional<length_t> extent, f_t emitter_phase_space_extent_scale = 1)
spot_t(const spot_t&) = default
spot_t(spot_t&&) = default
inline auto position() const noexcept
inline auto mean_direction() const noexcept
inline auto compute_falloff(const dir3_t &local_direction) const noexcept

Returns power fraction in beam as function of direction.

Parameters:

direction – direction in local coordinates (beam mean direction aligns with z-axis)

Returns:

inline virtual bool is_delta_position() const noexcept override
inline virtual bool is_delta_direction() const noexcept override
inline spectral_radiant_intensity_t spectral_radiant_intensity(const wavenumber_t k) const noexcept
inline SolidAngle auto spot_solid_angle() const noexcept
inline virtual const spectrum::spectrum_real_t &emission_spectrum() const noexcept override

Returns the emitter’s emission spectrum.

inline virtual spectral_radiant_flux_t power(wavenumber_t k) const noexcept override

Computes total emitted spectral power.

inline virtual radiant_flux_t power(const range_t<wavenumber_t> &krange) const noexcept override

Computes total emitted power over a wavenumber range.

inline beam::sourcing_geometry_t sourcing_geometry(const wavenumber_t k) const noexcept
inline spectral_radiant_intensity_beam_t Le(const ray_t &r, const wavenumber_t k) const noexcept

Source a beam from this light source.

Parameters:

k – wavenumber

inline virtual spectral_radiant_flux_stokes_t Li(const importance_flux_beam_t &beam, const intersection_surface_t *surface = nullptr) const noexcept override

Integrate a detector beam over the emitter.

Parameters:

beam – detection beam incident upon the emitter

virtual emitter_sample_t sample(sampler::sampler_t &sampler, const wavenumber_t k) const noexcept override

Samples an emission phase-space position (ray) on the light source.

Parameters:

k – wavenumber

inline virtual position_sample_t sample_position(sampler::sampler_t &sampler) const noexcept override

Samples an emission phase-space position (ray) on the light source.

virtual emitter_direct_sample_t sample_direct(sampler::sampler_t &sampler, const pqvec3_t &wp, const wavenumber_t k) const noexcept override

Samples a direct connection to a world position.

Parameters:
  • wp – world position

  • k – wavenumber

inline virtual area_sampling_pd_t pdf_position(const pqvec3_t &p, const intersection_surface_t *surface = nullptr) const noexcept override

Sampling PDF of an emission position on the light source.

Parameters:
  • p – position on light source

  • surface – emitter surface intersection record (should be nullptr)

inline virtual solid_angle_sampling_pd_t pdf_direction(const pqvec3_t &p, const dir3_t &dir, const intersection_surface_t *surface = nullptr) const noexcept override

Sampling PDF of an emission direction from the light source.

Parameters:
  • p – position on light source

  • dir – emission direction

  • surface – emitter surface intersection record (should be nullptr)

inline virtual solid_angle_sampling_pd_t pdf_direct(const pqvec3_t &wp, const ray_t &r, const intersection_surface_t *surface = nullptr) const noexcept override

Sampling PDF of a direct connection.

Parameters:
  • wp – world position from which direct sampling was applied

  • sampled_r – sampled emitter phase-space position (ray)

  • sampled_surface – sampled surface for emitter samples that seat on a surface (should be nullptr)

Returns:

the solid angle density from wp

virtual scene::element::info_t description() const override

Public Static Functions

static std::unique_ptr<emitter_t> load(std::string id, scene::loader::loader_t *loader, const scene::loader::node_t &node, const wt::wt_context_t &context)