Skip to content

Commit b6cdd03

Browse files
committed
burley brdf
1 parent ac8a163 commit b6cdd03

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

data/cage/shaders/functions/brdf.glsl

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ float egacGeometrySmith(float roughness, float NoL, float NoV)
2929
return ggx1 * ggx2;
3030
}
3131

32+
float egacDiffuseBurley(float roughness, float NoV, float NoL, float VoH)
33+
{
34+
float FD90 = 0.5 + 2 * VoH * VoH * roughness;
35+
float lightScatter = 1 + (FD90 - 1) * pow(1 - NoL, 5);
36+
float viewScatter = 1 + (FD90 - 1) * pow(1 - NoV, 5);
37+
return (lightScatter * viewScatter) / PI;
38+
}
39+
3240
vec3 brdf(vec3 N, vec3 L, vec3 V, vec3 albedo, float roughness, float metallic)
3341
{
3442
vec3 H = normalize(L + V);
@@ -37,16 +45,23 @@ vec3 brdf(vec3 N, vec3 L, vec3 V, vec3 albedo, float roughness, float metallic)
3745
float NoH = max(dot(N, H), 0);
3846
float VoH = max(dot(V, H), 0);
3947

48+
// frenel
4049
// https://learnopengl.com/PBR/Lighting
4150
// https://github.com/pumexx/pumex/blob/86fda7fa351d00bd5918ad90899ce2d6bb8b1dfe/examples/pumexdeferred/shaders/deferred_composite.frag
4251
vec3 F0 = mix(vec3(0.04), albedo, metallic);
4352
vec3 F = egacFresnelSchlick(F0, VoH); // VoH or NoV
4453
vec3 kD = (vec3(1) - F) * (1 - metallic);
4554

55+
// diffuse (Burley)
56+
float diffuseTerm = egacDiffuseBurley(roughness, NoV, NoL, VoH);
57+
vec3 diffuse = kD * albedo * diffuseTerm;
58+
59+
// specular (Cook-Torrance GGX)
4660
float NDF = egacDistributionGGX(roughness, NoH);
4761
float G = egacGeometrySmith(roughness, NoL, NoV);
48-
4962
vec3 nominator = NDF * G * F;
5063
float denominator = 4 * NoV * NoL + 0.001;
51-
return min(kD * albedo / PI + nominator / denominator, 1) * NoL;
64+
vec3 specular = nominator / denominator;
65+
66+
return min(diffuse + specular, 1) * NoL;
5267
}

0 commit comments

Comments
 (0)