[Bf-blender-cvs] [18abc2feaad] master: Fix Cycles light tree not working with negative light strength

Brecht Van Lommel noreply at git.blender.org
Mon Dec 12 18:30:57 CET 2022


Commit: 18abc2feaad6ccf162ee4a254405f854f705d101
Author: Brecht Van Lommel
Date:   Mon Dec 12 17:22:04 2022 +0100
Branches: master
https://developer.blender.org/rB18abc2feaad6ccf162ee4a254405f854f705d101

Fix Cycles light tree not working with negative light strength

Use absolute value of emission as estimate to make this work.

Contributed by Alaska.

Differential Revision: https://developer.blender.org/D16718

===================================================================

M	intern/cycles/scene/light_tree.cpp
M	intern/cycles/scene/shader.cpp

===================================================================

diff --git a/intern/cycles/scene/light_tree.cpp b/intern/cycles/scene/light_tree.cpp
index 9bf4bdca097..f9bd479cf1c 100644
--- a/intern/cycles/scene/light_tree.cpp
+++ b/intern/cycles/scene/light_tree.cpp
@@ -181,7 +181,9 @@ LightTreePrimitive::LightTreePrimitive(Scene *scene, int prim_id, int object_id)
       strength *= lamp->get_shader()->emission_estimate;
     }
 
-    energy = average(strength);
+    /* Use absolute value of energy so lights with negative strength are properly
+     * supported in the light tree. */
+    energy = fabsf(average(strength));
   }
 }
 
diff --git a/intern/cycles/scene/shader.cpp b/intern/cycles/scene/shader.cpp
index ca15d0e1c44..09255d7cee4 100644
--- a/intern/cycles/scene/shader.cpp
+++ b/intern/cycles/scene/shader.cpp
@@ -349,7 +349,7 @@ void Shader::estimate_emission()
   }
 
   ShaderInput *surf = graph->output()->input("Surface");
-  emission_estimate = output_estimate_emission(surf->link, emission_is_constant);
+  emission_estimate = fabs(output_estimate_emission(surf->link, emission_is_constant));
 
   if (is_zero(emission_estimate)) {
     emission_sampling = EMISSION_SAMPLING_NONE;



More information about the Bf-blender-cvs mailing list