Blender Git Loki
Git Commits -> Revision 5697f96
Revision 5697f96 by Clément Foucault (eevee-rewrite, temp-eevee-gpencil-rewrite, viewport-compositor) April 18, 2021, 15:30 (GMT) |
EEVEE: Light: 2.5D Culling: Initial implementation This follows closely the implementation of 2.5D tiled light culling described in the presentation: "Improved Culling for Tiled and Clustered Rendering" from Michal Drobot http://advances.realtimerendering.com/s2017/2017_Sig_Improved_Culling_final.pdf I chose the tile + Z binning approach for its high depth range support and low CPU overhead & low memory consumption compared to the cluster based culling. The cons is that the culling is a bit less precise in some aspect but it is quite balanced. The culling is done by the `Culling` object which is templated to easily be reused for light probes cullg. The Z-binning process is described starting from slide 20 in the reference pdf. I also implemented a debug pass to visualize false negative (light culled when they shouldn't) and light evaluation density. This is useful to detect failure case and hotspot. This could be exposed as a developper only render pass in the future. Some optimization of the reference implementation requires extensions not yet added to GPU module and will be added later. |
Commit Details:
Full Hash: 5697f96608ce96f25e02b3888325d0d23a613175
Parent Commit: 93b774a
Lines Changed: +933, -212
6 Added Paths:
/source/blender/draw/engines/eevee/eevee_culling.cc (+68, -0) (View)
/source/blender/draw/engines/eevee/eevee_culling.hh (+314, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_culling_debug_frag.glsl (+62, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_culling_iter_lib.glsl (+69, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_culling_lib.glsl (+179, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_culling_light_frag.glsl (+51, -0) (View)
/source/blender/draw/engines/eevee/eevee_culling.hh (+314, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_culling_debug_frag.glsl (+62, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_culling_iter_lib.glsl (+69, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_culling_lib.glsl (+179, -0) (View)
/source/blender/draw/engines/eevee/shaders/eevee_culling_light_frag.glsl (+51, -0) (View)
2 Deleted Paths:
/source/blender/draw/engines/eevee/eevee_cluster.hh (+0, -69)
/source/blender/draw/engines/eevee/shaders/eevee_light_lib.glsl (+0, -32)
/source/blender/draw/engines/eevee/shaders/eevee_light_lib.glsl (+0, -32)
12 Modified Paths:
/.clang-format (+2, -1) (Diff)
/source/blender/draw/CMakeLists.txt (+5, -1) (Diff)
/source/blender/draw/engines/eevee/eevee_light.cc (+42, -43) (Diff)
/source/blender/draw/engines/eevee/eevee_light.hh (+44, -22) (Diff)
/source/blender/draw/engines/eevee/eevee_shader.hh (+12, -3) (Diff)
/source/blender/draw/engines/eevee/eevee_shader_shared.hh (+40, -30) (Diff)
/source/blender/draw/engines/eevee/eevee_shading.cc (+6, -3) (Diff)
/source/blender/draw/engines/eevee/eevee_shading.hh (+8, -1) (Diff)
/source/blender/draw/engines/eevee/eevee_view.cc (+13, -1) (Diff)
/source/blender/draw/engines/eevee/eevee_view.hh (+1, -0) (Diff)
/source/blender/draw/engines/eevee/shaders/eevee_object_forward_frag.glsl (+11, -6) (Diff)
/source/blender/draw/intern/shaders/common_math_lib.glsl (+6, -0) (Diff)
/source/blender/draw/CMakeLists.txt (+5, -1) (Diff)
/source/blender/draw/engines/eevee/eevee_light.cc (+42, -43) (Diff)
/source/blender/draw/engines/eevee/eevee_light.hh (+44, -22) (Diff)
/source/blender/draw/engines/eevee/eevee_shader.hh (+12, -3) (Diff)
/source/blender/draw/engines/eevee/eevee_shader_shared.hh (+40, -30) (Diff)
/source/blender/draw/engines/eevee/eevee_shading.cc (+6, -3) (Diff)
/source/blender/draw/engines/eevee/eevee_shading.hh (+8, -1) (Diff)
/source/blender/draw/engines/eevee/eevee_view.cc (+13, -1) (Diff)
/source/blender/draw/engines/eevee/eevee_view.hh (+1, -0) (Diff)
/source/blender/draw/engines/eevee/shaders/eevee_object_forward_frag.glsl (+11, -6) (Diff)
/source/blender/draw/intern/shaders/common_math_lib.glsl (+6, -0) (Diff)