[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55727] trunk/blender/intern/cycles/kernel : Fix 34831: SSS issue with non-progressive render, due to error in closure merging code.

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Apr 2 17:53:24 CEST 2013


Revision: 55727
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55727
Author:   blendix
Date:     2013-04-02 15:53:24 +0000 (Tue, 02 Apr 2013)
Log Message:
-----------
Fix 34831: SSS issue with non-progressive render, due to error in closure merging code.

Modified Paths:
--------------
    trunk/blender/intern/cycles/kernel/kernel_shader.h
    trunk/blender/intern/cycles/kernel/svm/svm_closure.h

Modified: trunk/blender/intern/cycles/kernel/kernel_shader.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_shader.h	2013-04-02 15:48:09 UTC (rev 55726)
+++ trunk/blender/intern/cycles/kernel/kernel_shader.h	2013-04-02 15:53:24 UTC (rev 55727)
@@ -906,7 +906,7 @@
 			ShaderClosure *scj = &sd->closure[j];
 
 #ifdef __OSL__
-			if(!sci->prim && sci->type == scj->type && sci->data0 == scj->data0 && sci->data1 == scj->data1) {
+			if(!sci->prim && !scj->prim && sci->type == scj->type && sci->data0 == scj->data0 && sci->data1 == scj->data1) {
 #else
 			if(sci->type == scj->type && sci->data0 == scj->data0 && sci->data1 == scj->data1) {
 #endif
@@ -918,6 +918,7 @@
 					memmove(scj, scj+1, size*sizeof(ShaderClosure));
 
 				sd->num_closure--;
+				j--;
 			}
 		}
 	}

Modified: trunk/blender/intern/cycles/kernel/svm/svm_closure.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_closure.h	2013-04-02 15:48:09 UTC (rev 55726)
+++ trunk/blender/intern/cycles/kernel/svm/svm_closure.h	2013-04-02 15:53:24 UTC (rev 55727)
@@ -25,6 +25,7 @@
 	if(type == CLOSURE_BSDF_SHARP_GLASS_ID) {
 		if(refract) {
 			sc->data0 = eta;
+			sc->data1 = 0.0f;
 			sd->flag |= bsdf_refraction_setup(sc);
 		}
 		else
@@ -58,6 +59,9 @@
 	if(sd->num_closure < MAX_CLOSURE) {
 		sc->weight *= mix_weight;
 		sc->type = type;
+#ifdef __OSL__
+		sc->prim = NULL;
+#endif
 		sd->num_closure++;
 		return sc;
 	}
@@ -79,6 +83,9 @@
 		sc->weight = weight;
 		sc->sample_weight = sample_weight;
 		sd->num_closure++;
+#ifdef __OSL__
+		sc->prim = NULL;
+#endif
 		return sc;
 	}
 
@@ -125,10 +132,13 @@
 				float roughness = param1;
 
 				if(roughness == 0.0f) {
+					sc->data0 = 0.0f;
+					sc->data1 = 0.0f;
 					sd->flag |= bsdf_diffuse_setup(sc);
 				}
 				else {
 					sc->data0 = roughness;
+					sc->data1 = 0.0f;
 					sd->flag |= bsdf_oren_nayar_setup(sc);
 				}
 			}
@@ -138,6 +148,8 @@
 			ShaderClosure *sc = svm_node_closure_get_bsdf(sd, mix_weight);
 
 			if(sc) {
+				sc->data0 = 0.0f;
+				sc->data1 = 0.0f;
 				sc->N = N;
 				sd->flag |= bsdf_translucent_setup(sc);
 			}
@@ -147,6 +159,8 @@
 			ShaderClosure *sc = svm_node_closure_get_bsdf(sd, mix_weight);
 
 			if(sc) {
+				sc->data0 = 0.0f;
+				sc->data1 = 0.0f;
 				sc->N = N;
 				sd->flag |= bsdf_transparent_setup(sc);
 			}
@@ -164,6 +178,7 @@
 			if(sc) {
 				sc->N = N;
 				sc->data0 = param1;
+				sc->data1 = 0.0f;
 
 				/* setup bsdf */
 				if(type == CLOSURE_BSDF_REFLECTION_ID)
@@ -302,6 +317,7 @@
 
 				/* sigma */
 				sc->data0 = clamp(param1, 0.0f, 1.0f);
+				sc->data1 = 0.0f;
 				sd->flag |= bsdf_ashikhmin_velvet_setup(sc);
 			}
 			break;
@@ -324,6 +340,9 @@
 					sc->sample_weight = sample_weight;
 					sc->data0 = radius.x;
 					sc->data1 = eta;
+#ifdef __OSL__
+					sc->prim = NULL;
+#endif
 					sc->N = N;
 					sd->flag |= bssrdf_setup(sc);
 
@@ -336,6 +355,9 @@
 					sc->sample_weight = sample_weight;
 					sc->data0 = radius.y;
 					sc->data1 = eta;
+#ifdef __OSL__
+					sc->prim = NULL;
+#endif
 					sc->N = N;
 					sd->flag |= bssrdf_setup(sc);
 
@@ -348,6 +370,9 @@
 					sc->sample_weight = sample_weight;
 					sc->data0 = radius.z;
 					sc->data1 = eta;
+#ifdef __OSL__
+					sc->prim = NULL;
+#endif
 					sc->N = N;
 					sd->flag |= bssrdf_setup(sc);
 




More information about the Bf-blender-cvs mailing list