#ifndef BSDF_H #define BSDF_H #include "Algorithm/Sobol.h" #include "cglm/struct/vec3.h" float power_heuristic(float pdf_a, float pdf_b); float roughness_to_blinn_phong_specular_exponent(float roughness); vec3s fresnel_schlick_vec3(vec3s f0, float cos_theta); // BSDF sampling functions float pdf_cosine_weighted_hemisphere(vec3s normal, vec3s wi); float pdf_blinn_phong_lobe(vec3s normal, vec3s wi, vec3s wo, float roughness); vec3s sample_cosine_weighted_hemisphere_z_angular(float angular, uint32_t index, uint32_t d1, uint32_t d2); vec3s sample_cosine_weighted_hemisphere_z(uint32_t index, uint32_t d1, uint32_t d2); void create_orthonormal_basis(vec3s direction, vec3s* u, vec3s* v); vec3s random_cosine_direction_angular(vec3s direction, float angular, uint32_t index, uint32_t d1, uint32_t d2); vec3s random_cosine_direction(vec3s direction, uint32_t index, uint32_t d1, uint32_t d2); vec3s random_uniform_cdf_direction(vec3s direction, uint32_t index, uint32_t d1, uint32_t d2); vec3s random_uniform_cdf_direction_angular(vec3s direction, uint32_t index, float angular, uint32_t d1, uint32_t d2); #endif // BSDF_H