Materials module

BSDFs and phase functions attached to Surfaces to define how they interact with light.

Classes

class Material
A base class used to represent surface material properties.
class Dielectric
A smooth dielectric surface that reflects and refracts light according to the specified index of refraction ior.
class DiffuseLight
A material that emits light equally in all directions from the front side of a surface.
class Lambertian
A perfectly diffuse (Lambertian) material.
class Metal
A metallic material that reflects light into the (potentially rough) mirror reflection direction.

Functions

auto fresnel_dielectric(float cos_theta_i, float ext_ior, float int_ior) -> float
Calculates the unpolarized fresnel reflection coefficient for a dielectric material.
auto refract(const Vec3f& v, const Vec3f& n, float eta, Vec3f& refracted) -> bool
Generates a refracted direction, assuming refraction is possible based on the incident direction and refractive indices.
auto reflect(const Vec3f& v, const Vec3f& n) -> Vec3f
Reflects a vector, v, over another vector, n.

Function documentation

float fresnel_dielectric(float cos_theta_i, float ext_ior, float int_ior)

Calculates the unpolarized fresnel reflection coefficient for a dielectric material.

Parameters
cos_theta_i in Cosine of the angle between the normal and the incident ray
ext_ior in Refractive index of the side that contains the surface normal
int_ior in Refractive index of the interior
Returns The Fresnel reflection coefficient.

Handles incidence from either side (i.e. cos_theta_i<0 is allowed).

bool refract(const Vec3f& v, const Vec3f& n, float eta, Vec3f& refracted)

Generates a refracted direction, assuming refraction is possible based on the incident direction and refractive indices.

Parameters
in The incident ray's direction (points at surface)
in The surface normal of the incident ray
eta in The ratio of the index of refraction on the incident side to the index of refraction on the transmitted side
refracted out The returned, un-normalized, refracted direction
Returns True if refraction is possible, False if there is total internal reflection

Vec3f reflect(const Vec3f& v, const Vec3f& n)

Reflects a vector, v, over another vector, n.

Parameters
in The incident ray's direction (points at surface)
in The surface normal at the hit point
Returns Vec3f The reflected vector