[Bf-blender-cvs] [56d4366294e] cycles-x: Cycles X: fix broken render when disabling shadows on lights

Brecht Van Lommel noreply at git.blender.org
Wed Sep 1 19:33:45 CEST 2021


Commit: 56d4366294ed45523331e8afa7be722dc5f53025
Author: Brecht Van Lommel
Date:   Wed Sep 1 17:02:07 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB56d4366294ed45523331e8afa7be722dc5f53025

Cycles X: fix broken render when disabling shadows on lights

Fixes T91024

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

M	intern/cycles/kernel/kernel_emission.h

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

diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h
index 3e1cef8aefb..d62285d173d 100644
--- a/intern/cycles/kernel/kernel_emission.h
+++ b/intern/cycles/kernel/kernel_emission.h
@@ -216,21 +216,31 @@ ccl_device_inline void shadow_ray_setup(const ShaderData *ccl_restrict sd,
                                         const float3 P,
                                         Ray *ray)
 {
-  ray->P = P;
+  if (ls->shader & SHADER_CAST_SHADOW) {
+    /* setup ray */
+    ray->P = P;
 
-  if (ls->t == FLT_MAX) {
-    /* distant light */
-    ray->D = ls->D;
-    ray->t = ls->t;
+    if (ls->t == FLT_MAX) {
+      /* distant light */
+      ray->D = ls->D;
+      ray->t = ls->t;
+    }
+    else {
+      /* other lights, avoid self-intersection */
+      ray->D = ray_offset(ls->P, ls->Ng) - P;
+      ray->D = normalize_len(ray->D, &ray->t);
+    }
   }
   else {
-    /* other lights, avoid self-intersection */
-    ray->D = ray_offset(ls->P, ls->Ng) - P;
-    ray->D = normalize_len(ray->D, &ray->t);
+    /* signal to not cast shadow ray */
+    ray->P = zero_float3();
+    ray->D = zero_float3();
+    ray->t = 0.0f;
   }
 
   ray->dP = differential_make_compact(sd->dP);
   ray->dD = differential_zero_compact();
+  ray->time = sd->time;
 }
 
 /* Create shadow ray towards light sample. */
@@ -239,17 +249,8 @@ ccl_device_inline void light_sample_to_surface_shadow_ray(const KernelGlobals *c
                                                           const LightSample *ccl_restrict ls,
                                                           Ray *ray)
 {
-  if (ls->shader & SHADER_CAST_SHADOW) {
-    /* setup ray */
-    const float3 P = shadow_ray_offset(kg, sd, ls->D);
-    shadow_ray_setup(sd, ls, P, ray);
-  }
-  else {
-    /* signal to not cast shadow ray */
-    ray->t = 0.0f;
-  }
-
-  ray->time = sd->time;
+  const float3 P = shadow_ray_offset(kg, sd, ls->D);
+  shadow_ray_setup(sd, ls, P, ray);
 }
 
 /* Create shadow ray towards light sample. */
@@ -259,16 +260,7 @@ ccl_device_inline void light_sample_to_volume_shadow_ray(const KernelGlobals *cc
                                                          const float3 P,
                                                          Ray *ray)
 {
-  if (ls->shader & SHADER_CAST_SHADOW) {
-    /* setup ray */
-    shadow_ray_setup(sd, ls, P, ray);
-  }
-  else {
-    /* signal to not cast shadow ray */
-    ray->t = 0.0f;
-  }
-
-  ray->time = sd->time;
+  shadow_ray_setup(sd, ls, P, ray);
 }
 
 CCL_NAMESPACE_END



More information about the Bf-blender-cvs mailing list