[][src]Struct rpt::Material

pub struct Material {
    pub color: Color,
    pub index: f64,
    pub roughness: f64,
    pub metallic: f64,
    pub emittance: f64,
    pub transparent: bool,
}

Represents a shader material with some physical properties

Fields

color: Color

Albedo color

index: f64

Index of refraction

roughness: f64

Roughness parameter for Beckmann microfacet distribution

metallic: f64

Metallic versus dielectric

emittance: f64

Self-emittance of light

transparent: bool

Transmittance (e.g., glass)

Implementations

impl Material[src]

pub fn diffuse(color: Color) -> Material[src]

Perfect diffuse (Lambertian) material with a given color

pub fn specular(color: Color, roughness: f64) -> Material[src]

Specular material with a given color and roughness

pub fn clear(index: f64, roughness: f64) -> Material[src]

Clear material with a specified index of refraction and roughness (such as glass)

pub fn transparent(color: Color, index: f64, roughness: f64) -> Material[src]

Colored transparent material

pub fn metallic(color: Color, roughness: f64) -> Material[src]

Metallic material (has extra tinted specular reflections)

pub fn light(color: Color, emittance: f64) -> Material[src]

Perfect emissive material, useful for modeling area lights

impl Material[src]

pub fn bsdf(&self, n: &DVec3, wo: &DVec3, wi: &DVec3) -> Color[src]

Bidirectional scattering distribution function

  • n - surface normal vector
  • wo - unit direction vector toward the viewer
  • wi - unit direction vector toward the incident ray

This works for both opaque and transmissive materials, based on a Beckmann microfacet distribution model, Cook-Torrance shading for the specular component, and Lambertian shading for the diffuse component. Useful references:

  • http://www.codinglabs.net/article_physically_based_rendering_cook_torrance.aspx
  • https://computergraphics.stackexchange.com/q/4394
  • https://graphics.stanford.edu/courses/cs148-10-summer/docs/2006--degreve--reflection_refraction.pdf
  • http://www.pbr-book.org/3ed-2018/Materials/BSDFs.html
  • https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf

pub fn sample_f(
    &self,
    n: &DVec3,
    wo: &DVec3,
    rng: &mut StdRng
) -> Option<(DVec3, f64)>
[src]

Sample the light hemisphere, returning a tuple of (direction vector, PDF)

This implementation samples according to the Beckmann distribution function D. Specifically, it uses the fact that ∫ D(h) (n • h) dω = 1, which creates a probability distribution that can be sampled from using a probability integral transform.

We also need to sample from the diffuse BRDF as well, independently. We calculate the ratio of samples from the diffuse vs specular components by estimating the average magnitude of the Fresnel term.

Reference: https://agraphicsguy.wordpress.com/2015/11/01/sampling-microfacet-brdf/

Trait Implementations

impl Clone for Material[src]

impl Copy for Material[src]

impl Default for Material[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Pointable for T

type Init = T

The type for initializers.

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<SS, SP> SupersetOf<SS> for SP where
    SS: SubsetOf<SP>, 

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,