@@ -94,8 +94,10 @@ export const bsdfSamplingGLSL = /* glsl */`
94
94
95
95
// TODO: subsurface approx?
96
96
97
- float F = evaluateFresnelWeight( dot( wo, wh ), surf.eta, surf.f0 );
97
+ // float F = evaluateFresnelWeight( dot( wo, wh ), surf.eta, surf.f0 );
98
+ float F = disneyFresnel( wo, wi, wh, surf.f0, surf.eta, surf.metalness );
98
99
color = ( 1.0 - F ) * transFactor * metalFactor * wi.z * surf.color * ( retro + lambert ) / PI;
100
+
99
101
return wi.z / PI;
100
102
101
103
}
@@ -206,7 +208,8 @@ export const bsdfSamplingGLSL = /* glsl */`
206
208
color = surf.transmission * surf.color;
207
209
208
210
// PDF
209
- float F = evaluateFresnelWeight( dot( wo, wh ), surf.eta, surf.f0 );
211
+ // float F = evaluateFresnelWeight( dot( wo, wh ), surf.eta, surf.f0 );
212
+ float F = disneyFresnel( wo, wi, wh, surf.f0, surf.eta, surf.metalness );
210
213
if ( F >= 1.0 ) {
211
214
212
215
return 0.0;
@@ -297,7 +300,8 @@ export const bsdfSamplingGLSL = /* glsl */`
297
300
298
301
float metalness = surf.metalness;
299
302
float transmission = surf.transmission;
300
- float fEstimate = evaluateFresnelWeight( dot( wo, wh ), surf.eta, surf.f0 );
303
+ // float fEstimate = evaluateFresnelWeight( dot( wo, wh ), surf.eta, surf.f0 );
304
+ float fEstimate = disneyFresnel( wo, wi, wh, surf.f0, surf.eta, surf.metalness );
301
305
302
306
float transSpecularProb = mix( max( 0.25, fEstimate ), 1.0, metalness );
303
307
float diffSpecularProb = 0.5 + 0.5 * metalness;
0 commit comments