summaryrefslogtreecommitdiffstats
path: root/brdf.cginc
diff options
context:
space:
mode:
Diffstat (limited to 'brdf.cginc')
-rw-r--r--brdf.cginc9
1 files changed, 6 insertions, 3 deletions
diff --git a/brdf.cginc b/brdf.cginc
index 1504ef0..6ca8c8d 100644
--- a/brdf.cginc
+++ b/brdf.cginc
@@ -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;