Files
Seele/res/shaders/lib/BRDF.slang
T

47 lines
1.1 KiB
Plaintext
Raw Normal View History

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
}
};