Blender Git Loki
Git Commits -> Revision a94343a
Revision a94343a by Brecht Van Lommel (master) October 11, 2021, 16:22 (GMT) |
Cycles: improve SSS Fresnel and retro-reflection in Principled BSDF For details see the "Extending the Disney BRDF to a BSDF with Integrated Subsurface Scattering" paper. We split the diffuse BSDF into a lambertian and retro-reflection component. The retro-reflection component is always handled as a BSDF, while the lambertian component can be replaced by a BSSRDF. For the BSSRDF case, we compute Fresnel separately at the entry and exit points, which may have different normals. As the scattering radius decreases this converges to the BSDF case. A downside is that this increases noise for subsurface scattering in the Principled BSDF, due to some samples going to the retro-reflection component. However the previous logic (also in 2.93) was simple wrong, using a non-sensical view direction vector at the exit point. We use an importance sampling weight estimate for the retro-reflection to try to better balance samples between the BSDF and BSSRDF. Differential Revision: https://developer.blender.org/D12801 |
Commit Details:
Full Hash: a94343a8afcac5d6db09c8461e67ad1ba5a85d35
Parent Commit: 73a05ff
Lines Changed: +125, -77
10 Modified Paths:
/intern/cycles/kernel/closure/bsdf.h (+0, -6) (Diff)
/intern/cycles/kernel/closure/bsdf_principled_diffuse.h (+63, -15) (Diff)
/intern/cycles/kernel/closure/bssrdf.h (+21, -9) (Diff)
/intern/cycles/kernel/integrator/integrator_shade_surface.h (+2, -2) (Diff)
/intern/cycles/kernel/integrator/integrator_state_template.h (+0, -1) (Diff)
/intern/cycles/kernel/integrator/integrator_subsurface.h (+22, -22) (Diff)
/intern/cycles/kernel/kernel_shader.h (+4, -7) (Diff)
/intern/cycles/kernel/kernel_types.h (+11, -9) (Diff)
/intern/cycles/kernel/svm/svm_closure.h (+2, -2) (Diff)
/intern/cycles/kernel/svm/svm_types.h (+0, -4) (Diff)
/intern/cycles/kernel/closure/bsdf_principled_diffuse.h (+63, -15) (Diff)
/intern/cycles/kernel/closure/bssrdf.h (+21, -9) (Diff)
/intern/cycles/kernel/integrator/integrator_shade_surface.h (+2, -2) (Diff)
/intern/cycles/kernel/integrator/integrator_state_template.h (+0, -1) (Diff)
/intern/cycles/kernel/integrator/integrator_subsurface.h (+22, -22) (Diff)
/intern/cycles/kernel/kernel_shader.h (+4, -7) (Diff)
/intern/cycles/kernel/kernel_types.h (+11, -9) (Diff)
/intern/cycles/kernel/svm/svm_closure.h (+2, -2) (Diff)
/intern/cycles/kernel/svm/svm_types.h (+0, -4) (Diff)