Commit: 01ee21ffb930d1e75c8501da44b06d63b6d46704
Author: Sergey Sharybin
Date:   Mon Mar 23 12:48:33 2015 +0500
Branches: blender-v2.74-release
https://developer.blender.org/rB01ee21ffb930d1e75c8501da44b06d63b6d46704

Fix T43926: Volume scatter: intersecting objects GPU rendering artifacts
Fix T44007: Cycles Volumetrics: block artifacts with overlapping volumes

The issue was caused by uninitialized parameters of some closures, which
lead to unpredictable behavior of shader_merge_closures().

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

M       intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h
M       intern/cycles/kernel/closure/bsdf_diffuse.h
M       intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
M       intern/cycles/kernel/closure/bsdf_phong_ramp.h
M       intern/cycles/kernel/closure/bsdf_reflection.h
M       intern/cycles/kernel/closure/bsdf_refraction.h
M       intern/cycles/kernel/closure/bsdf_transparent.h
M       intern/cycles/kernel/closure/bssrdf.h
M       intern/cycles/kernel/closure/volume.h

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

diff --git a/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h 
b/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h
index 580f50d..98c1159 100644
--- a/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h
+++ b/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h
@@ -39,6 +39,7 @@ ccl_device int bsdf_ashikhmin_velvet_setup(ShaderClosure *sc)
 {
        float sigma = fmaxf(sc->data0, 0.01f);
        sc->data0 = 1.0f/(sigma * sigma); /* m_invsigma2 */
+       sc->data1 = 0.0f;
        
        sc->type = CLOSURE_BSDF_ASHIKHMIN_VELVET_ID;
 
diff --git a/intern/cycles/kernel/closure/bsdf_diffuse.h 
b/intern/cycles/kernel/closure/bsdf_diffuse.h
index 4b29bb0..29725c5 100644
--- a/intern/cycles/kernel/closure/bsdf_diffuse.h
+++ b/intern/cycles/kernel/closure/bsdf_diffuse.h
@@ -40,6 +40,8 @@ CCL_NAMESPACE_BEGIN
 ccl_device int bsdf_diffuse_setup(ShaderClosure *sc)
 {
        sc->type = CLOSURE_BSDF_DIFFUSE_ID;
+       sc->data0 = 0.0f;
+       sc->data1 = 0.0f;
        return SD_BSDF|SD_BSDF_HAS_EVAL;
 }
 
@@ -83,6 +85,8 @@ ccl_device int bsdf_diffuse_sample(const ShaderClosure *sc, 
float3 Ng, float3 I,
 ccl_device int bsdf_translucent_setup(ShaderClosure *sc)
 {
        sc->type = CLOSURE_BSDF_TRANSLUCENT_ID;
+       sc->data0 = 0.0f;
+       sc->data1 = 0.0f;
        return SD_BSDF|SD_BSDF_HAS_EVAL;
 }
 
diff --git a/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h 
b/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
index cdaf84f..e0287e7 100644
--- a/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
+++ b/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h
@@ -52,6 +52,8 @@ ccl_device float3 bsdf_diffuse_ramp_get_color(const 
ShaderClosure *sc, const flo
 ccl_device int bsdf_diffuse_ramp_setup(ShaderClosure *sc)
 {
        sc->type = CLOSURE_BSDF_DIFFUSE_RAMP_ID;
+       sc->data0 = 0.0f;
+       sc->data1 = 0.0f;
        return SD_BSDF|SD_BSDF_HAS_EVAL;
 }
 
diff --git a/intern/cycles/kernel/closure/bsdf_phong_ramp.h 
b/intern/cycles/kernel/closure/bsdf_phong_ramp.h
index f9f2637..1ab15ee 100644
--- a/intern/cycles/kernel/closure/bsdf_phong_ramp.h
+++ b/intern/cycles/kernel/closure/bsdf_phong_ramp.h
@@ -51,9 +51,9 @@ ccl_device float3 bsdf_phong_ramp_get_color(const 
ShaderClosure *sc, const float
 
 ccl_device int bsdf_phong_ramp_setup(ShaderClosure *sc)
 {
-       sc->data0 = max(sc->data0, 0.0f);
-       
        sc->type = CLOSURE_BSDF_PHONG_RAMP_ID;
+       sc->data0 = max(sc->data0, 0.0f);
+       sc->data1 = 0.0f;
        return SD_BSDF|SD_BSDF_HAS_EVAL;
 }
 
diff --git a/intern/cycles/kernel/closure/bsdf_reflection.h 
b/intern/cycles/kernel/closure/bsdf_reflection.h
index 303f4c9..d635e73 100644
--- a/intern/cycles/kernel/closure/bsdf_reflection.h
+++ b/intern/cycles/kernel/closure/bsdf_reflection.h
@@ -40,6 +40,8 @@ CCL_NAMESPACE_BEGIN
 ccl_device int bsdf_reflection_setup(ShaderClosure *sc)
 {
        sc->type = CLOSURE_BSDF_REFLECTION_ID;
+       sc->data0 = 0.0f;
+       sc->data1 = 0.0f;
        return SD_BSDF;
 }
 
diff --git a/intern/cycles/kernel/closure/bsdf_refraction.h 
b/intern/cycles/kernel/closure/bsdf_refraction.h
index c78a4b6..e339778 100644
--- a/intern/cycles/kernel/closure/bsdf_refraction.h
+++ b/intern/cycles/kernel/closure/bsdf_refraction.h
@@ -40,6 +40,8 @@ CCL_NAMESPACE_BEGIN
 ccl_device int bsdf_refraction_setup(ShaderClosure *sc)
 {
        sc->type = CLOSURE_BSDF_REFRACTION_ID;
+       sc->data0 = 0.0f;
+       sc->data1 = 0.0f;
        return SD_BSDF;
 }
 
diff --git a/intern/cycles/kernel/closure/bsdf_transparent.h 
b/intern/cycles/kernel/closure/bsdf_transparent.h
index 3c2fd80..7858019 100644
--- a/intern/cycles/kernel/closure/bsdf_transparent.h
+++ b/intern/cycles/kernel/closure/bsdf_transparent.h
@@ -38,6 +38,8 @@ CCL_NAMESPACE_BEGIN
 ccl_device int bsdf_transparent_setup(ShaderClosure *sc)
 {
        sc->type = CLOSURE_BSDF_TRANSPARENT_ID;
+       sc->data0 = 0.0f;
+       sc->data1 = 0.0f;
        return SD_BSDF|SD_TRANSPARENT;
 }
 
diff --git a/intern/cycles/kernel/closure/bssrdf.h 
b/intern/cycles/kernel/closure/bssrdf.h
index b6de2da..43de6e5 100644
--- a/intern/cycles/kernel/closure/bssrdf.h
+++ b/intern/cycles/kernel/closure/bssrdf.h
@@ -30,6 +30,7 @@ ccl_device int bssrdf_setup(ShaderClosure *sc, ClosureType 
type)
                return flag;
        }
        else {
+               sc->data0 = 0.0f;
                sc->data1 = clamp(sc->data1, 0.0f, 1.0f); /* texture blur */
                sc->T.x = clamp(sc->T.x, 0.0f, 1.0f); /* sharpness */
                sc->type = type;
diff --git a/intern/cycles/kernel/closure/volume.h 
b/intern/cycles/kernel/closure/volume.h
index 4396105..4143980 100644
--- a/intern/cycles/kernel/closure/volume.h
+++ b/intern/cycles/kernel/closure/volume.h
@@ -35,6 +35,7 @@ ccl_device int volume_henyey_greenstein_setup(ShaderClosure 
*sc)
        
        /* clamp anisotropy to avoid delta function */
        sc->data0 = signf(sc->data0) * min(fabsf(sc->data0), 1.0f - 1e-3f);
+       sc->data1 = 0.0f;
 
        return SD_SCATTER;
 }

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

Reply via email to