pub trait BSDF {
// Required methods
fn sample_incoming(
&self,
omega_o: Vec3d,
rdf: Vec3d,
) -> SampleIncomingResponse;
fn evaluate(&self, omega_o: Vec3d, omega_i: Vec3d) -> RgbD;
fn sample_incoming_pdf(&self, omega_o: Vec3d, omega_i: Vec3d) -> f64;
fn base_color(&self, omega_o: Vec3d) -> RgbD;
// Provided methods
fn sample_outgoing(
&self,
omega_i: Vec3d,
rdf: Vec3d,
) -> SampleOutgoingResponse { ... }
fn sample_outgoing_pdf(&self, omega_o: Vec3d, omega_i: Vec3d) -> f64 { ... }
fn emission(&self, omega_o: Vec3d) -> RgbD { ... }
fn sample_emission_pdf(&self, omega_o: Vec3d) -> f64 { ... }
fn sample_emission(&self, _rdf: Vec2d) -> SampleEmissionResponse { ... }
}
Expand description
Bidirectional Scattering Distribution Functions. A trait that describes the surface properties of a material if you will.
This trait contains functions to importance sample and evaluate a specific BSDF
Required Methods§
Sourcefn sample_incoming(&self, omega_o: Vec3d, rdf: Vec3d) -> SampleIncomingResponse
fn sample_incoming(&self, omega_o: Vec3d, rdf: Vec3d) -> SampleIncomingResponse
Sourcefn evaluate(&self, omega_o: Vec3d, omega_i: Vec3d) -> RgbD
fn evaluate(&self, omega_o: Vec3d, omega_i: Vec3d) -> RgbD
Returns the value of the BSDF at the given directions
§Arguments
omega_o
- Exitant light directionomega_i
- Incident light direction
Sourcefn sample_incoming_pdf(&self, omega_o: Vec3d, omega_i: Vec3d) -> f64
fn sample_incoming_pdf(&self, omega_o: Vec3d, omega_i: Vec3d) -> f64
Returns the probability density sampling an incoming direction given an outgoing direction
See BSDF::sample_incoming
and SampleIncomingResponse
Sourcefn base_color(&self, omega_o: Vec3d) -> RgbD
fn base_color(&self, omega_o: Vec3d) -> RgbD
Returns the base color of the surface. This function is used to generate auxiliary images for AI tools such as Open Image Denoise
Provided Methods§
Sourcefn sample_outgoing(&self, omega_i: Vec3d, rdf: Vec3d) -> SampleOutgoingResponse
fn sample_outgoing(&self, omega_i: Vec3d, rdf: Vec3d) -> SampleOutgoingResponse
Sourcefn sample_outgoing_pdf(&self, omega_o: Vec3d, omega_i: Vec3d) -> f64
fn sample_outgoing_pdf(&self, omega_o: Vec3d, omega_i: Vec3d) -> f64
Returns the probability density sampling an outgoing direction given an incoming direction
See BSDF::sample_outgoing_pdf
and SampleOutgoingResponse
Sourcefn emission(&self, omega_o: Vec3d) -> RgbD
fn emission(&self, omega_o: Vec3d) -> RgbD
Returns how much light is emitted to the given direction omega_o
Sourcefn sample_emission_pdf(&self, omega_o: Vec3d) -> f64
fn sample_emission_pdf(&self, omega_o: Vec3d) -> f64
Returns the probability density of choosing the given direction when sampled with
BSDF::sample_emission
Returns 0.0
if the surface does not emit light
Sourcefn sample_emission(&self, _rdf: Vec2d) -> SampleEmissionResponse
fn sample_emission(&self, _rdf: Vec2d) -> SampleEmissionResponse
Samples a direction in which light is emitted to and also returns the amount of emission
The returned vector is the null vector, if this surface does not emit any light
See also: SampleEmissionResponse