Struct vertex_t

Struct Documentation

struct vertex_t

Public Types

using geo_variant_t = vertex_geo_variant_t

Public Functions

inline bool is_emitter() const noexcept
inline bool is_sensor() const noexcept
inline bool is_fsd() const noexcept
inline bool is_surface_interaction() const noexcept
inline bool is_medium_interaction() const noexcept
inline bool is_interaction() const noexcept
inline bool is_nondelta_interaction() const noexcept
inline bool is_infinite() const noexcept

Is infinite (directional) vertex? For example, when a beam exits the scene.

inline bool is_on_surface() const noexcept

Does vertex reside on a surface? (Surface interaction, or emitter with associated geometry)

inline auto pdf() const noexcept
inline auto &pdf() noexcept
inline auto pdf_reversed() const noexcept
inline auto &pdf_reversed() noexcept
inline void set_beam(const spectral_radiant_flux_beam_t &beam) noexcept
inline void set_beam(const importance_flux_beam_t &beam) noexcept
inline const auto &get_radiant_flux_beam() const noexcept
inline const auto &get_QE_flux_beam() const noexcept
inline const pqvec3_t &wp() const noexcept

Beam centre world position, for beam incident upon this vertex. For non-infinite vertices only.

inline const auto &surface() const noexcept

Surface intersection record, if available.

inline const intersection_surface_t *surface_if_any() const noexcept

Surface intersection record, if available.

inline dir3_t ng() const noexcept

Surface geometric normal, if available.

inline dir3_t ns() const noexcept

Surface shading normal, if available.

inline const auto beam_origin() const
inline const auto beam_wi() const
inline auto beam_wavenumber() const
template<beam::Beam BeamT>
inline std::optional<BeamT> interact(const ads::ads_t &ads, const vertex_t &prev, const vertex_t &next, const bool ignore_fsd = false) const noexcept
inline bool is_connectible() const noexcept
inline bool on_emitter() const noexcept
inline bool is_delta_emitter() const noexcept
inline bool on_sensor() const noexcept
inline bool is_delta_sensor() const noexcept
inline area_density_t pdf(const vertex_t *prev, const vertex_t &next, transport_e mode) const noexcept
inline area_density_t pdf_next_from_sensor(const vertex_t &next) const noexcept
inline area_density_t pdf_sensor() const noexcept
inline const emitter::emitter_t *get_emitter() const noexcept
inline area_density_t pdf_next_from_emitter(const vertex_t &next) const noexcept
inline area_density_t pdf_emitter(const scene_t &scene, const sensor::sensor_t &sensor) const noexcept

Public Members

vertex_type_e type
transport_e transport_mode
bool delta = false
bool fraunhofer_fsd = false
area_density_t pdf_fwd = -1 / square(u::m)
area_density_t pdf_bwd = -1 / square(u::m)
f_t rr_weight = 1
f_t sampling_weight = 1
std::variant<std::monostate, spectral_radiant_flux_beam_t, importance_flux_beam_t> beam
const emitter::emitter_t *emitter
const sensor::sensor_t *sensor
const bsdf::bsdf_t *bsdf
union wt::integrator::plt_bdpt::vertex_t
const fraunhofer::free_space_diffraction_t *fraunhofer_fsd_bsdf
geo_variant_t geo

Public Static Functions

static inline geo_variant_t vertex_geo(const std::optional<intersection_surface_t> &surface, const pqvec3_t &p) noexcept
static inline vertex_t create_sensor(const sensor_sample_t &sensor_sample) noexcept
static inline vertex_t create_sensor(const sensor::sensor_t *sensor, const sensor_direct_connection_t &dc) noexcept
static inline vertex_t create_sensor(const sensor_direct_sample_t &sensor_sample) noexcept
static inline vertex_t create_emitter(const emitter_beam_wavenumber_sample_t &e) noexcept
static inline vertex_t create_emitter(const emitter_direct_sample_t &emitter_sample) noexcept
static inline vertex_t create_surface(const intersection_surface_t &surface, const bsdf::bsdf_t *bsdf, transport_e transport_mode, const bool is_delta) noexcept
static inline vertex_t create_fsd(const fraunhofer::free_space_diffraction_t *fsd_bsdf, const pqvec3_t &p, transport_e transport_mode) noexcept
static inline area_density_t convert_directional_density_to_area(solid_angle_sampling_pd_t dpdf, const pqvec3_t &p, const vertex_t &next) noexcept