[Bf-blender-cvs] [5270610b29e] master: Fix Cycles uninitialized variables in mesh light sampling

Brecht Van Lommel noreply at git.blender.org
Mon Dec 5 20:33:32 CET 2022


Commit: 5270610b29ee3c548d19a310777d569582f2abfc
Author: Brecht Van Lommel
Date:   Mon Dec 5 20:16:10 2022 +0100
Branches: master
https://developer.blender.org/rB5270610b29ee3c548d19a310777d569582f2abfc

Fix Cycles uninitialized variables in mesh light sampling

Causing wrong renders and differences between platforms.

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

M	intern/cycles/kernel/light/area.h
M	intern/cycles/kernel/light/triangle.h
M	intern/cycles/scene/light.cpp
M	intern/cycles/scene/light_tree.cpp

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

diff --git a/intern/cycles/kernel/light/area.h b/intern/cycles/kernel/light/area.h
index 6d2d6ace344..98c354ec34b 100644
--- a/intern/cycles/kernel/light/area.h
+++ b/intern/cycles/kernel/light/area.h
@@ -361,6 +361,8 @@ ccl_device_forceinline bool area_light_tree_parameters(const ccl_global KernelLi
     distance = make_float2(min_distance, min_distance);
   }
 
+  cos_theta_u = FLT_MAX;
+
   const float3 extentu = klight->area.axis_u * klight->area.len_u;
   const float3 extentv = klight->area.axis_v * klight->area.len_v;
   for (int i = 0; i < 4; i++) {
diff --git a/intern/cycles/kernel/light/triangle.h b/intern/cycles/kernel/light/triangle.h
index eaad584acc7..1a5e8e9e62c 100644
--- a/intern/cycles/kernel/light/triangle.h
+++ b/intern/cycles/kernel/light/triangle.h
@@ -302,6 +302,8 @@ ccl_device_forceinline bool triangle_light_tree_parameters(
     distance = make_float2(min_distance, min_distance);
   }
 
+  cos_theta_u = FLT_MAX;
+
   const int object = kemitter->mesh_light.object_id;
   float3 vertices[3];
   triangle_world_space_vertices(kg, object, kemitter->prim_id, -1.0f, vertices);
diff --git a/intern/cycles/scene/light.cpp b/intern/cycles/scene/light.cpp
index 2421a66d2b8..73ee1141be7 100644
--- a/intern/cycles/scene/light.cpp
+++ b/intern/cycles/scene/light.cpp
@@ -456,7 +456,7 @@ void LightManager::device_update_distribution(Device *,
   dscene->light_distribution.copy_to_device();
 }
 
-void LightManager::device_update_tree(Device *device,
+void LightManager::device_update_tree(Device *,
                                       DeviceScene *dscene,
                                       Scene *scene,
                                       Progress &progress)
diff --git a/intern/cycles/scene/light_tree.cpp b/intern/cycles/scene/light_tree.cpp
index 121b5593bde..9bf4bdca097 100644
--- a/intern/cycles/scene/light_tree.cpp
+++ b/intern/cycles/scene/light_tree.cpp
@@ -88,7 +88,7 @@ LightTreePrimitive::LightTreePrimitive(Scene *scene, int prim_id, int object_id)
 
     /* TODO: need a better way to handle this when textures are used. */
     float area = triangle_area(vertices[0], vertices[1], vertices[2]);
-    energy = area * scene->shader_manager->linear_rgb_to_gray(shader->emission_estimate);
+    energy = area * average(shader->emission_estimate);
 
     /* NOTE: the original implementation used the bounding box centroid, but primitive centroid
      * seems to work fine */
@@ -181,7 +181,7 @@ LightTreePrimitive::LightTreePrimitive(Scene *scene, int prim_id, int object_id)
       strength *= lamp->get_shader()->emission_estimate;
     }
 
-    energy = scene->shader_manager->linear_rgb_to_gray(strength);
+    energy = average(strength);
   }
 }



More information about the Bf-blender-cvs mailing list