Class scene_t

Class Documentation

class scene_t

Holds all scene data, and provides emitter and spectral sampling facilities.

Public Functions

scene_t(std::string id, const wt_context_t &ctx, std::shared_ptr<integrator::integrator_t> integrator, std::vector<std::shared_ptr<sensor::sensor_t>> &&sensors, std::shared_ptr<sampler::sampler_t> sampler, std::vector<std::shared_ptr<emitter::emitter_t>> emitters, std::vector<std::shared_ptr<shape_t>> shapes)
inline const auto &get_id() const
inline const auto &integrator() const
inline const auto &sensors() const
inline auto &sampler() const noexcept
inline const auto &shapes() const
inline const auto &emitters() const
inline const auto &get_world_aabb() const
inline emitter_wavenumber_sample_t sample_emitter_and_spectrum(const sensor::sensor_t *sensor) const noexcept

Given a sensor, samples an emitter from all scene emitters, as well as a wavenumber from the sampled emitter’s spectrum (integrated over the sensor’s spectrum).

Parameters:

sensor – used sensor

inline emitter_beam_wavenumber_sample_t sample_emitter_and_spectrum_and_source_beam(const sensor::sensor_t *sensor) const noexcept

Given a sensor, samples an emitter from all scene emitters, as well as a wavenumber from the sampled emitter’s spectrum (integrated over the sensor’s spectrum), then sources a beam from the sampled emitter. Does NOT divide by the emitter or wavelength sampling density.

Parameters:

sensor – used sensor

inline emitter_direct_sample_t sample_emitter_direct(sampler::sampler_t &sampler, const sensor::sensor_t *sensor, const pqvec3_t &wp, const wavenumber_t k) const noexcept

Samples a direct connection from a world position to a scene emitter for a given sensor. Divides by the sampled emitter’s sampling probability mass. Does NOT divide by the wavelength sampling density.

Parameters:
  • sampler – sampler to use (overriding the scene’s sampler)

  • sensor – used sensor

  • wp – world position from which direct sampling is applied

  • k – wavenumber

inline emitter_direct_sample_t sample_emitter_direct(const sensor::sensor_t *sensor, const pqvec3_t &wp, const wavenumber_t k) const noexcept

Samples a direct connection from a world position to a scene emitter for a given sensor. Divides by the sampled emitter’s sampling probability mass. Does NOT divide by the wavelength sampling density.

Parameters:
  • sensor – used sensor

  • wp – world position from which direct sampling is applied

  • k – wavenumber

inline emitter_direct_sample_pdf_t pdf_emitter_direct(const sensor::sensor_t *sensor, const emitter::emitter_t *emitter, const pqvec3_t &wp, const ray_t &sample, const intersection_surface_t *sampled_surface = nullptr) const noexcept

Probability density of a sampled direct connection from an emitter to a world position.

Parameters:
  • sensor – used sensor

  • emitter – sampled emitter

  • wp – world position from which direct sampling was applied

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

  • sampled_surface – sampled surface for emitter samples that seat on a surface (required for some emitters)

inline wavenumber_density_t sum_spectral_pdf_for_all_emitters(const sensor::sensor_t *sensor, const wavenumber_t k) const noexcept

Computes the spectral probability density for the given wavenumber k summed over all scene emitters: Useful for spectral MIS.

Parameters:
  • sensor – used sensor

  • k – sampled wavenumber

inline f_t pdf_emitter(const sensor::sensor_t *sensor, const emitter::emitter_t *emitter) const noexcept

Probability mass of sampling the emitter.

Parameters:
  • sensor – used sensor

  • emitter – sampled emitter

inline wavenumber_density_t pdf_spectral_sample(const sensor::sensor_t *sensor, const emitter::emitter_t *emitter, const wavenumber_t k) const noexcept

Probability density of a wavenumber sample, given an emitter and a sensor.

Parameters:
  • sensor – used sensor

  • emitter – used emitter

  • k – sampled wavenumber

inline wavenumber_density_t pdf_emitter_and_spectral_sample(const sensor::sensor_t *sensor, const emitter::emitter_t *emitter, const wavenumber_t k) const noexcept

Joint probability density of a wavenumber & emitter sample pair, given a sensor.

Parameters:
  • sensor – used sensor

  • emitter – sampled emitter

  • k – wavenumber

scene::element::info_t description() const

Public Static Attributes

static constexpr std::size_t max_supported_sensors = 1

This defines the max count of sensors that the scene is willing to handle. WIP: machinery for multi-sensor rendering is working on scene side. However, currently multi-sensor rendering does not always makes sense, and we might want dedicated integrator support.