[−][src]Struct rpt::Material
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 vectorwo
- unit direction vector toward the viewerwi
- 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]
&self,
n: &DVec3,
wo: &DVec3,
rng: &mut StdRng
) -> Option<(DVec3, f64)>
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
Auto Trait Implementations
impl RefUnwindSafe for Material
impl Send for Material
impl Sync for Material
impl Unpin for Material
impl UnwindSafe for Material
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Pointable for T
pub const ALIGN: usize
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
pub unsafe fn drop(ptr: usize)
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
SS: SubsetOf<SP>,
pub fn to_subset(&self) -> Option<SS>
pub fn is_in_subset(&self) -> bool
pub fn to_subset_unchecked(&self) -> SS
pub fn from_subset(element: &SS) -> SP
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,