Fermat
|
[Heitz 2014, "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs"]
Classes | |
struct | Bsdf |
struct | Edf |
struct | cugar::BlendBsdf< TBsdf1, TBsdf2 > |
struct | cugar::DifferentialGeometry |
struct | cugar::GGXVCavityMicrofacetDistribution |
struct | cugar::GGXBsdf |
struct | cugar::GGXSmithMicrofacetDistribution |
struct | cugar::GGXSmithBsdf |
struct | cugar::LambertBsdf |
struct | cugar::LambertEdf |
struct | cugar::LambertTransBsdf |
struct | cugar::LTCBsdf |
Enumerations | |
enum | TransportType { kRadianceTransport = 0, kParticleTransport = 1 } |
enum | cugar::SphericalMeasure { kSolidAngle = 0, kProjectedSolidAngle = 1 } |
Functions | |
FERMAT_API void | precompute_glossy_reflectance (const uint32 S, float *tables) |
FERMAT_API void | precompute_TIR_loss (const uint32 S, float *tables) |
bool | cugar::bsdf_test (uint32 test_index, const GGXSmithBsdf &bsdf) |
bool | cugar::bsdf_test () |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE Vector3f | cugar::microfacet (const Vector3f V, const Vector3f L, const Vector3f N, const float inv_eta) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE Vector3f | cugar::vndf_microfacet (const Vector3f V, const Vector3f L, const Vector3f N, const float inv_eta) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float | cugar::hvd_ggx_eval (const float2 &inv_alpha, const float nh, const float ht, const float hb) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float3 | cugar::hvd_ggx_sample (const float2 &samples, const float inv_alpha) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float3 | cugar::hvd_ggx_sample (const float2 &samples, const float2 &inv_alpha) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float2 | cugar::hvd_ggx_invert (const float3 H, const float2 inv_alpha) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float3 | cugar::vndf_ggx_smith_sample (const float2 samples, const float2 alpha, const Vector3f _V) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float2 | cugar::vndf_ggx_smith_invert (const Vector3f _N, const float2 alpha, const Vector3f _V) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE uint32 | cugar::clip_quad_to_horizon (cugar::Vector3f L[5]) |
template<typename VectorType > | |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE VectorType | cugar::fresnel_dielectric (const float cos_theta_i, const float cos_theta_t, const VectorType eta) |
template<typename VectorType > | |
CUGAR_HOST_DEVICE CUGAR_FORCEINLINE VectorType | cugar::fresnel_dielectric_conductor (const float cos_theta, const VectorType eta, const VectorType eta_k) |
CUGAR_HOST_DEVICE CUGAR_FORCEINLINE float | cugar::pow5 (const float x) |
template<typename VectorType > | |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE VectorType | cugar::fresnel_schlick (float cos_theta_i, const float eta, const VectorType fresnel_base) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE bool | cugar::refraction_angle (const Vector3f w_i, const Vector3f N, const float eta, const float cos_theta_i, float *cos_theta_t) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE bool | cugar::refract (const Vector3f w_i, const Vector3f N, const float cos_theta_i, const float eta, Vector3f *out, float *F) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE Vector3f | cugar::refract (const Vector3f w_i, const Vector3f N, const float eta, const float cos_theta_i, const float cos_theta_t) |
Spherical measure type
enum TransportType |
transport type: defines whether we are tracing rays, or particles, i.e. whether the quantity being transported is radiance or power.
|
inline |
unit test
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE uint32 cugar::clip_quad_to_horizon | ( | cugar::Vector3f | L[5] | ) |
clip a quad to the plane z = 0
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE VectorType cugar::fresnel_dielectric | ( | const float | cos_theta_i, |
const float | cos_theta_t, | ||
const VectorType | eta | ||
) |
CUGAR_HOST_DEVICE CUGAR_FORCEINLINE VectorType cugar::fresnel_dielectric_conductor | ( | const float | cos_theta, |
const VectorType | eta, | ||
const VectorType | eta_k | ||
) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE VectorType cugar::fresnel_schlick | ( | float | cos_theta_i, |
const float | eta, | ||
const VectorType | fresnel_base | ||
) |
eta | incoming IOR / outgoing IOR |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float cugar::hvd_ggx_eval | ( | const float2 & | inv_alpha, |
const float | nh, | ||
const float | ht, | ||
const float | hb | ||
) |
evaluate anisotropic GGX / Trowbridge-Reitz distribution on the non-projected hemisphere
[Walter et al. 2007, "Microfacet models for refraction through rough surfaces"]
nh
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float2 cugar::hvd_ggx_invert | ( | const float3 | H, |
const float2 | inv_alpha | ||
) |
invert the the half-vector anisotropic GGX distribution sampling function
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float3 cugar::hvd_ggx_sample | ( | const float2 & | samples, |
const float | inv_alpha | ||
) |
sample isotropic GGX distribution on the non-projected hemisphere
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float3 cugar::hvd_ggx_sample | ( | const float2 & | samples, |
const float2 & | inv_alpha | ||
) |
sample the half-vector anisotropic GGX distribution on the non-projected hemisphere
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE Vector3f cugar::microfacet | ( | const Vector3f | V, |
const Vector3f | L, | ||
const Vector3f | N, | ||
const float | inv_eta | ||
) |
return the microfacet normal for a given pair of incident and outgoing direction vectors
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE bool cugar::refract | ( | const Vector3f | w_i, |
const Vector3f | N, | ||
const float | cos_theta_i, | ||
const float | eta, | ||
Vector3f * | out, | ||
float * | F | ||
) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE Vector3f cugar::refract | ( | const Vector3f | w_i, |
const Vector3f | N, | ||
const float | eta, | ||
const float | cos_theta_i, | ||
const float | cos_theta_t | ||
) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE bool cugar::refraction_angle | ( | const Vector3f | w_i, |
const Vector3f | N, | ||
const float | eta, | ||
const float | cos_theta_i, | ||
float * | cos_theta_t | ||
) |
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float2 cugar::vndf_ggx_smith_invert | ( | const Vector3f | _N, |
const float2 | alpha, | ||
const Vector3f | _V | ||
) |
Inversion function for "A Simpler and Exact Sampling Routine for the GGX Distribution of Visible Normals" https://hal.archives-ouvertes.fr/hal-01509746
CUGAR_FORCEINLINE CUGAR_HOST_DEVICE float3 cugar::vndf_ggx_smith_sample | ( | const float2 | samples, |
const float2 | alpha, | ||
const Vector3f | _V | ||
) |
A Simpler and Exact Sampling Routine for the GGX Distribution of Visible Normals https://hal.archives-ouvertes.fr/hal-01509746