[Bf-blender-cvs] [ed7e593] master: Fix T43926: Volume scatter: intersecting objects GPU rendering artifacts Fix T44007: Cycles Volumetrics: block artifacts with overlapping volumes

Sergey Sharybin noreply at git.blender.org
Mon Mar 23 08:57:12 CET 2015


Commit: ed7e593a4b129e1367a7f5aa2d0e9036e5363bea
Author: Sergey Sharybin
Date:   Mon Mar 23 12:48:33 2015 +0500
Branches: master
https://developer.blender.org/rBed7e593a4b129e1367a7f5aa2d0e9036e5363bea

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;
 }




More information about the Bf-blender-cvs mailing list