2020-06-02 11:46:18 +02:00
|
|
|
import Common;
|
|
|
|
|
|
|
|
|
|
interface IBRDF
|
|
|
|
|
{
|
2023-02-27 13:52:57 +01:00
|
|
|
float3 evaluate(float3 viewDir_TS, float3 lightDir_TS, float3 lightColor);
|
2020-06-02 11:46:18 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct BlinnPhong : IBRDF
|
|
|
|
|
{
|
|
|
|
|
float3 baseColor;
|
|
|
|
|
float metallic = 0;
|
2023-02-27 13:52:57 +01:00
|
|
|
float3 normal = float3(0, 0, 1);
|
2020-06-02 11:46:18 +02:00
|
|
|
float specular = 0.5;
|
|
|
|
|
float roughness = 0.5;
|
2020-09-19 14:36:50 +02:00
|
|
|
float sheen = 1.f;
|
2020-06-02 11:46:18 +02:00
|
|
|
|
2023-02-27 13:52:57 +01:00
|
|
|
float3 evaluate(float3 viewDir_TS, float3 lightDir_TS, float3 lightColor)
|
2020-06-02 11:46:18 +02:00
|
|
|
{
|
2023-02-27 13:52:57 +01:00
|
|
|
float nDotL = saturate(dot(normal, lightDir_TS));
|
|
|
|
|
float3 h = normalize(lightDir_TS + viewDir_TS);
|
2020-06-02 11:46:18 +02:00
|
|
|
float nDotH = saturate(dot(normal, h));
|
|
|
|
|
|
2023-02-27 13:52:57 +01:00
|
|
|
return baseColor * (nDotL + nDotH) * lightColor;
|
2020-06-02 11:46:18 +02:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct DisneyBRDF : IBRDF
|
|
|
|
|
{
|
|
|
|
|
float3 baseColor;
|
|
|
|
|
float metallic = 0;
|
|
|
|
|
float3 normal = float3(0, 1, 0);
|
|
|
|
|
float subsurface = 0;
|
|
|
|
|
float specular = 0.5;
|
|
|
|
|
float roughness = 0.5;
|
|
|
|
|
float specularTint = 0;
|
|
|
|
|
float anisotropic = 0;
|
|
|
|
|
float sheen = 0;
|
|
|
|
|
float sheenTint = 0.5f;
|
|
|
|
|
float clearCoat = 0;
|
|
|
|
|
float clearCoatGloss = 1;
|
|
|
|
|
|
2023-02-27 13:52:57 +01:00
|
|
|
float3 evaluate(float3 viewDir_TS, float3 lightDir_TS, float3 lightColor)
|
2020-06-02 11:46:18 +02:00
|
|
|
{
|
2023-02-27 13:52:57 +01:00
|
|
|
return baseColor;
|
2020-06-02 11:46:18 +02:00
|
|
|
}
|
|
|
|
|
};
|