diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-10-07 14:43:51 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-10-08 18:58:45 +0300 |
commit | ee7deb09cf32675248c52b115ad462d711ead02d (patch) | |
tree | 282d20a5acddc390fafec8c0ab2196810945267d /source/blender/draw/engines/eevee/eevee_instance.cc | |
parent | 9f85107fef7f20689cec83671b88b4c71b5ef8fd (diff) |
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.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_instance.cc')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_instance.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_instance.cc b/source/blender/draw/engines/eevee/eevee_instance.cc index 1bf64a9e305..9aea6e301af 100644 --- a/source/blender/draw/engines/eevee/eevee_instance.cc +++ b/source/blender/draw/engines/eevee/eevee_instance.cc @@ -225,6 +225,7 @@ void Instance::end_sync(void) sampling.end_sync(); render_passes.end_sync(); lightprobes.end_sync(); + subsurface.end_sync(); } void Instance::render_sync(void) |