diff options
Diffstat (limited to 'brdf.cginc')
| -rw-r--r-- | brdf.cginc | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -72,7 +72,6 @@ float4 brdf(Pbr pbr, LightData data) { data.direct.NoL = 1; data.direct.NoH = 1; data.direct.LoH = 1; - data.direct.LoV = 1; #endif // Direct @@ -82,18 +81,22 @@ float4 brdf(Pbr pbr, LightData data) { float G = V_GGXSmith(pbr.roughness, data.direct.NoL, data.common.NoV); float FDG = F * D * G; + float3 direct_specular = FDG * data.direct.color * data.direct.NoL * lerp(1.0f, pbr.albedo.xyz, pbr.metallic); + direct_specular = max(0, direct_specular); specular += direct_specular; float3 remainder = (1.0f - direct_specular); float Fd = Fd_OrenNayar(pbr.roughness, data.common.NoV, data.direct.NoL, data.direct.LoV) / PI; float3 direct_diffuse = Fd * remainder * (1.0f - pbr.metallic) * pbr.albedo.xyz * data.direct.color; - diffuse += direct_diffuse; + direct_diffuse = max(0, direct_diffuse); + diffuse += direct_diffuse; } // Indirect - if (false) { + if (true) { float F = F_Schlick(data.indirect.LoH, f0, f90); + float G = V_GGXSmith(pbr.roughness, data.indirect.NoL, data.common.NoV); float3 indirect_specular = F * data.indirect.specular; specular += indirect_specular; |
