[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13971] trunk/blender/source/blender/ render/intern:

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Mar 4 20:58:24 CET 2008


Revision: 13971
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13971
Author:   blendix
Date:     2008-03-04 20:58:22 +0100 (Tue, 04 Mar 2008)

Log Message:
-----------

Bugfix: the shadow samplenr increment to reuse shadow results in
the renderer could lead to results being reused for unrelated
points, result was one wrong pixel or strand per part. Now instead
of setting the sample counter to 0 multiple times, it keeps a global
counter per thread for the whole render.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/include/shading.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/rendercore.c
    trunk/blender/source/blender/render/intern/source/shadeinput.c
    trunk/blender/source/blender/render/intern/source/strand.c
    trunk/blender/source/blender/render/intern/source/zbuf.c

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2008-03-04 18:50:02 UTC (rev 13970)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2008-03-04 19:58:22 UTC (rev 13971)
@@ -152,6 +152,9 @@
 	float jit[32][2];
 	QMCSampler *qsa;
 	
+	/* shadow counter, detect shadow-reuse for shaders */
+	int shadowsamplenr[BLENDER_MAX_THREADS];
+	
 	/* scene, and its full copy of renderdata and world */
 	Scene *scene;
 	RenderData r;

Modified: trunk/blender/source/blender/render/intern/include/shading.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/shading.h	2008-03-04 18:50:02 UTC (rev 13970)
+++ trunk/blender/source/blender/render/intern/include/shading.h	2008-03-04 19:58:22 UTC (rev 13971)
@@ -47,8 +47,6 @@
 	/* could be malloced once */
 	ShadeInput shi[RE_MAX_OSA];
 	ShadeResult shr[RE_MAX_OSA];
-	
-	int samplenr;			/* counter, detect shadow-reuse for shaders */
 } ShadeSample;
 
 

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-03-04 18:50:02 UTC (rev 13970)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-03-04 19:58:22 UTC (rev 13971)
@@ -3641,6 +3641,8 @@
 				LampShadowSample *ls;
 				LampShadowSubSample *lss;
 				int a, b;
+
+				memset(re->shadowsamplenr, 0, sizeof(re->shadowsamplenr));
 				
 				lar->shadsamp= MEM_mallocN(re->r.threads*sizeof(LampShadowSample), "lamp shadow sample");
 				ls= lar->shadsamp;

Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c	2008-03-04 18:50:02 UTC (rev 13970)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c	2008-03-04 19:58:22 UTC (rev 13971)
@@ -1281,7 +1281,7 @@
 	float texfac, orthoarea, nor[3];
 
 	/* cache for shadow */
-	shi->samplenr++;
+	shi->samplenr= R.shadowsamplenr[shi->thread]++;
 	
 	if(quad) 
 		shade_input_set_triangle_i(shi, obi, vlr, 0, 2, 3);
@@ -1821,7 +1821,7 @@
 	}
 		
 	/* cache for shadow */
-	shi->samplenr++;
+	shi->samplenr= R.shadowsamplenr[shi->thread]++;
 	
 	shi->u= -u;
 	shi->v= -v;

Modified: trunk/blender/source/blender/render/intern/source/shadeinput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeinput.c	2008-03-04 18:50:02 UTC (rev 13970)
+++ trunk/blender/source/blender/render/intern/source/shadeinput.c	2008-03-04 19:58:22 UTC (rev 13971)
@@ -1235,8 +1235,6 @@
 	}
 	
 	get_sample_layers(pa, rl, ssamp->rlpp);
-
-	ssamp->samplenr= 0; /* counter, detect shadow-reuse for shaders */
 }
 
 /* Do AO or (future) GI */
@@ -1286,7 +1284,7 @@
 						
 						shi->mask= (1<<samp);
 //						shi->rl= ssamp->rlpp[samp];
-						shi->samplenr= ssamp->samplenr++;	/* this counter is not being reset per pixel */
+						shi->samplenr= R.shadowsamplenr[shi->thread]++;	/* this counter is not being reset per pixel */
 						shade_input_set_viewco(shi, xs, ys, (float)ps->z);
 						shade_input_set_uv(shi);
 						shade_input_set_normals(shi);
@@ -1307,7 +1305,7 @@
 					ys= (float)y + 0.5f;
 				}
 				shi->mask= curmask;
-				shi->samplenr= ssamp->samplenr++;
+				shi->samplenr= R.shadowsamplenr[shi->thread]++;
 				shade_input_set_viewco(shi, xs, ys, (float)ps->z);
 				shade_input_set_uv(shi);
 				shade_input_set_normals(shi);

Modified: trunk/blender/source/blender/render/intern/source/strand.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/strand.c	2008-03-04 18:50:02 UTC (rev 13970)
+++ trunk/blender/source/blender/render/intern/source/strand.c	2008-03-04 19:58:22 UTC (rev 13971)
@@ -275,7 +275,7 @@
 	shi->obr= sseg->obi->obr;
 
 	/* cache for shadow */
-	shi->samplenr= ssamp->samplenr++;
+	shi->samplenr= re->shadowsamplenr[shi->thread]++;
 
 	shade_input_set_strand(shi, sseg->strand, spoint);
 	shade_input_set_strand_texco(shi, sseg->strand, sseg->v[1], spoint);

Modified: trunk/blender/source/blender/render/intern/source/zbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/zbuf.c	2008-03-04 18:50:02 UTC (rev 13970)
+++ trunk/blender/source/blender/render/intern/source/zbuf.c	2008-03-04 19:58:22 UTC (rev 13971)
@@ -3778,7 +3778,7 @@
 						shi++;
 					}
 					shi->mask= (1<<samp);
-					shi->samplenr= ssamp->samplenr++;
+					shi->samplenr= R.shadowsamplenr[shi->thread]++;
 					shade_input_set_viewco(shi, xs, ys, (float)z);
 					shade_input_set_uv(shi);
 					shade_input_set_normals(shi);
@@ -3798,7 +3798,7 @@
 				ys= (float)y + 0.5f;
 			}
 			shi->mask= curmask;
-			shi->samplenr= ssamp->samplenr++;
+			shi->samplenr= R.shadowsamplenr[shi->thread]++;
 			shade_input_set_viewco(shi, xs, ys, (float)z);
 			shade_input_set_uv(shi);
 			shade_input_set_normals(shi);





More information about the Bf-blender-cvs mailing list