forked from bartvdbraak/blender
Fix T42212: Singular reflection pass is incorrect in regular path tracer
Issue seems to be caused by not totally proper pdf and eval values for this closure. Changed it so they reflect to ggx/beckmann reflection with roughness set to 0, which is effectively the same as the sharp reflection.
This commit is contained in:
parent
4a4297ba02
commit
a1f4821b94
@ -70,8 +70,9 @@ ccl_device int bsdf_reflection_sample(const ShaderClosure *sc, float3 Ng, float3
|
||||
*domega_in_dx = 2 * dot(N, dIdx) * N - dIdx;
|
||||
*domega_in_dy = 2 * dot(N, dIdy) * N - dIdy;
|
||||
#endif
|
||||
*pdf = 1;
|
||||
*eval = make_float3(1, 1, 1);
|
||||
/* Some high number for MIS. */
|
||||
*pdf = 1e6f;
|
||||
*eval = make_float3(1e6f, 1e6f, 1e6f);
|
||||
}
|
||||
}
|
||||
return LABEL_REFLECT|LABEL_SINGULAR;
|
||||
|
@ -74,8 +74,9 @@ ccl_device int bsdf_refraction_sample(const ShaderClosure *sc, float3 Ng, float3
|
||||
&inside);
|
||||
|
||||
if(!inside) {
|
||||
*pdf = 1.0f;
|
||||
*eval = make_float3(1.0f, 1.0f, 1.0f);
|
||||
/* Some high number for MIS. */
|
||||
*pdf = 1e6f;
|
||||
*eval = make_float3(1e6f, 1e6f, 1e6f);
|
||||
*omega_in = T;
|
||||
#ifdef __RAY_DIFFERENTIALS__
|
||||
*domega_in_dx = dTdx;
|
||||
|
Loading…
Reference in New Issue
Block a user