This commit is contained in:
2024-09-25 11:50:34 +02:00
commit 834a6f7cff
120 changed files with 55330 additions and 0 deletions

102
project/src/BRDFs.h Normal file
View File

@@ -0,0 +1,102 @@
#pragma once
#include "Maths.h"
namespace dae
{
namespace BRDF
{
/**
* \param kd Diffuse Reflection Coefficient
* \param cd Diffuse Color
* \return Lambert Diffuse Color
*/
static ColorRGB Lambert(float kd, const ColorRGB& cd)
{
//todo: W3
throw std::runtime_error("Not Implemented Yet");
return {};
}
static ColorRGB Lambert(const ColorRGB& kd, const ColorRGB& cd)
{
//todo: W3
throw std::runtime_error("Not Implemented Yet");
return {};
}
/**
* \brief todo
* \param ks Specular Reflection Coefficient
* \param exp Phong Exponent
* \param l Incoming (incident) Light Direction
* \param v View Direction
* \param n Normal of the Surface
* \return Phong Specular Color
*/
static ColorRGB Phong(float ks, float exp, const Vector3& l, const Vector3& v, const Vector3& n)
{
//todo: W3
throw std::runtime_error("Not Implemented Yet");
return {};
}
/**
* \brief BRDF Fresnel Function >> Schlick
* \param h Normalized Halfvector between View and Light directions
* \param v Normalized View direction
* \param f0 Base reflectivity of a surface based on IOR (Indices Of Refrection), this is different for Dielectrics (Non-Metal) and Conductors (Metal)
* \return
*/
static ColorRGB FresnelFunction_Schlick(const Vector3& h, const Vector3& v, const ColorRGB& f0)
{
//todo: W3
throw std::runtime_error("Not Implemented Yet");
return {};
}
/**
* \brief BRDF NormalDistribution >> Trowbridge-Reitz GGX (UE4 implemetation - squared(roughness))
* \param n Surface normal
* \param h Normalized half vector
* \param roughness Roughness of the material
* \return BRDF Normal Distribution Term using Trowbridge-Reitz GGX
*/
static float NormalDistribution_GGX(const Vector3& n, const Vector3& h, float roughness)
{
//todo: W3
throw std::runtime_error("Not Implemented Yet");
return {};
}
/**
* \brief BRDF Geometry Function >> Schlick GGX (Direct Lighting + UE4 implementation - squared(roughness))
* \param n Normal of the surface
* \param v Normalized view direction
* \param roughness Roughness of the material
* \return BRDF Geometry Term using SchlickGGX
*/
static float GeometryFunction_SchlickGGX(const Vector3& n, const Vector3& v, float roughness)
{
//todo: W3
throw std::runtime_error("Not Implemented Yet");
return {};
}
/**
* \brief BRDF Geometry Function >> Smith (Direct Lighting)
* \param n Normal of the surface
* \param v Normalized view direction
* \param l Normalized light direction
* \param roughness Roughness of the material
* \return BRDF Geometry Term using Smith (> SchlickGGX(n,v,roughness) * SchlickGGX(n,l,roughness))
*/
static float GeometryFunction_Smith(const Vector3& n, const Vector3& v, const Vector3& l, float roughness)
{
//todo: W3
throw std::runtime_error("Not Implemented Yet");
return {};
}
}
}