Blender Git Loki
Git Commits -> Revision ee7deb0
Revision ee7deb0 by Clément Foucault (eevee-rewrite) October 8, 2021, 15:58 (GMT) |
EEVEE: Subsurface Scattering: New implementation This new implementation follows the technique described in "Efficient screen space subsurface scattering Siggraph 2018". Compared to the old implementation it fixes a lot of issues at the cost of it being slower. This fixes: - Light leaking between different objects. - Light leaking between different surfaces with different depths. - SSS radii are now "texturable" per pixel. No SSS surfaces limits. - Noise should be lower. - Precomputation is only done once for all SSS surfaces which lowers the per material storage and precomputation time. Implementation is also simpler as it is only a one pass processing. We differ from the reference presentation by not precomputing the RGB weights per samples. We actually compute them on the fly in order to support varying SSS radii. Notes: - SSS IOR and SSS anisotropy are not supported. - Object level light leak prevention might not work for high number of objects in the scene (> 1024). In this case light leak might occur. Adding or deleting (hidding) objects in the scene might change which objects can leak. |
Commit Details:
Full Hash: ee7deb09cf32675248c52b115ad462d711ead02d
Parent Commit: 9f85107
Lines Changed: +525, -10
3 Added Paths:
/source/blender/draw/engines/eevee/eevee_subsurface.cc (+166, -0) (View)
/source/blender/draw/engines/eevee/eevee_subsurface.hh (+89, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_subsurface_eval_frag.glsl (+148, -0) (View)
/source/blender/draw/engines/eevee/eevee_subsurface.hh (+89, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_subsurface_eval_frag.glsl (+148, -0) (View)
12 Modified Paths:
/source/blender/draw/CMakeLists.txt (+2, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_instance.cc (+1, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_instance.hh (+3, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_sampling.hh (+3, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_shader.cc (+3, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_shader.hh (+2, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_shader_shared.hh (+30, -3) (Diff)
/source/blender/draw/engines/eevee/eevee_shading.cc (+32, -2) (Diff)
/source/blender/draw/engines/eevee/eevee_shading.hh (+33, -2) (Diff)
/source/blender/draw/engines/eevee/shaders/eevee_deferred_direct_frag.glsl (+11, -3) (Diff)
/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl (+1, -0) (Diff)
/source/blender/gpu/shaders/material/gpu_shader_material_subsurface_scattering.glsl (+1, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_instance.cc (+1, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_instance.hh (+3, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_sampling.hh (+3, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_shader.cc (+3, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_shader.hh (+2, -0) (Diff)
/source/blender/draw/engines/eevee/eevee_shader_shared.hh (+30, -3) (Diff)
/source/blender/draw/engines/eevee/eevee_shading.cc (+32, -2) (Diff)
/source/blender/draw/engines/eevee/eevee_shading.hh (+33, -2) (Diff)
/source/blender/draw/engines/eevee/shaders/eevee_deferred_direct_frag.glsl (+11, -3) (Diff)
/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl (+1, -0) (Diff)
/source/blender/gpu/shaders/material/gpu_shader_material_subsurface_scattering.glsl (+1, -0) (Diff)