Commit: 2b896fc48165be96855bd6d8067ae46c32d049a3
Author: Brecht Van Lommel
Date:   Mon Aug 17 17:48:53 2020 +0200
Branches: blender-v2.90-release
https://developer.blender.org/rB2b896fc48165be96855bd6d8067ae46c32d049a3

Fix T79052: Cycles new sky texture fails with sun size zero

Clamp to a minimum angle to avoid precision issues.

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

M       intern/cycles/kernel/svm/svm_sky.h
M       intern/cycles/render/light.cpp
M       intern/cycles/render/nodes.cpp
M       intern/cycles/render/nodes.h

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

diff --git a/intern/cycles/kernel/svm/svm_sky.h 
b/intern/cycles/kernel/svm/svm_sky.h
index f824184c1d4..b908732f026 100644
--- a/intern/cycles/kernel/svm/svm_sky.h
+++ b/intern/cycles/kernel/svm/svm_sky.h
@@ -137,7 +137,7 @@ ccl_device float3 sky_radiance_nishita(KernelGlobals *kg,
   float sun_rotation = nishita_data[7];
   float angular_diameter = nishita_data[8];
   float sun_intensity = nishita_data[9];
-  bool sun_disc = (angular_diameter > 0.0f);
+  bool sun_disc = (angular_diameter >= 0.0f);
   float3 xyz;
   /* convert dir to spherical coordinates */
   float2 direction = direction_to_spherical(dir);
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp
index 183c02cb6b9..567a53afc98 100644
--- a/intern/cycles/render/light.cpp
+++ b/intern/cycles/render/light.cpp
@@ -634,7 +634,7 @@ void LightManager::device_update_background(Device *device,
         sun_direction = transform_direction(&sky_transform, sun_direction);
 
         /* Pack sun direction and size. */
-        float half_angle = sky->sun_size * 0.5f;
+        float half_angle = sky->get_sun_size() * 0.5f;
         kbackground->sun = make_float4(
             sun_direction.x, sun_direction.y, sun_direction.z, half_angle);
 
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index d5f65fb54db..a50544242f7 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -776,7 +776,7 @@ static void sky_texture_precompute_nishita(SunSky *sunsky,
   sunsky->nishita_data[5] = pixel_top[2];
   sunsky->nishita_data[6] = sun_elevation;
   sunsky->nishita_data[7] = sun_rotation;
-  sunsky->nishita_data[8] = sun_disc ? sun_size : 0.0f;
+  sunsky->nishita_data[8] = sun_disc ? sun_size : -1.0f;
   sunsky->nishita_data[9] = sun_intensity;
 }
 
@@ -834,7 +834,7 @@ void SkyTextureNode::compile(SVMCompiler &compiler)
 
     sky_texture_precompute_nishita(&sunsky,
                                    sun_disc,
-                                   sun_size,
+                                   get_sun_size(),
                                    sun_intensity,
                                    sun_elevation,
                                    sun_rotation,
@@ -930,7 +930,7 @@ void SkyTextureNode::compile(OSLCompiler &compiler)
 
     sky_texture_precompute_nishita(&sunsky,
                                    sun_disc,
-                                   sun_size,
+                                   get_sun_size(),
                                    sun_intensity,
                                    sun_elevation,
                                    sun_rotation,
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 326f1d14168..c21bcacb3ce 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -179,6 +179,12 @@ class SkyTextureNode : public TextureNode {
   float ozone_density;
   float3 vector;
   ImageHandle handle;
+
+  float get_sun_size()
+  {
+    /* Clamping for numerical precision. */
+    return fmaxf(sun_size, 0.0005f);
+  }
 };
 
 class OutputNode : public ShaderNode {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to