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

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Jan 30 14:35:35 CET 2008


Revision: 13474
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13474
Author:   blendix
Date:     2008-01-30 14:35:28 +0100 (Wed, 30 Jan 2008)

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

- Bugfix for ztransp not being filled into the z-pass after FSA changes.
- Bugfix for speedvectors being not properly set for some strands.

Modified Paths:
--------------
    trunk/blender/source/blender/render/extern/include/RE_shader_ext.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/extern/include/RE_shader_ext.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_shader_ext.h	2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/extern/include/RE_shader_ext.h	2008-01-30 13:35:28 UTC (rev 13474)
@@ -47,7 +47,7 @@
 {
 	float combined[4];
 	float col[4];
-	float alpha, mist;
+	float alpha, mist, z;
 	float diff[3];		/* no ramps, shadow, etc */
 	float spec[3];
 	float shad[3];

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-30 13:35:28 UTC (rev 13474)
@@ -4746,7 +4746,7 @@
 				else strand++;
 
 				index= RE_strandren_get_face(obr, strand, 0);
-				if(index && *index) {
+				if(index) {
 					speed= RE_strandren_get_winspeed(obi, strand, 1);
 
 					/* interpolate speed vectors from strand surface */

Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c	2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c	2008-01-30 13:35:28 UTC (rev 13474)
@@ -359,7 +359,7 @@
 		switch(rpass->passtype) {
 			case SCE_PASS_Z:
 				fp= rpass->rect + offset;
-				*fp= -shi->co[2];
+				*fp= shr->z;
 				break;
 			case SCE_PASS_RGBA:
 				col= shr->col;
@@ -451,7 +451,7 @@
 		switch(rpass->passtype) {
 			case SCE_PASS_Z:
 				fp= rpass->rect + offset;
-				*fp= -shi->co[2];
+				*fp= shr->z;
 				break;
 			case SCE_PASS_RGBA:
 				col= shr->col;

Modified: trunk/blender/source/blender/render/intern/source/shadeinput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeinput.c	2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/shadeinput.c	2008-01-30 13:35:28 UTC (rev 13474)
@@ -186,6 +186,8 @@
 	}
 	else shr->combined[3]= 1.0f;
 	
+	/* add z */
+	shr->z= -shi->co[2];
 }
 
 /* **************************************************************************** */

Modified: trunk/blender/source/blender/render/intern/source/strand.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/strand.c	2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/strand.c	2008-01-30 13:35:28 UTC (rev 13474)
@@ -214,6 +214,8 @@
 	}
 	/* optim... */
 	if(addpassflag & ~(SCE_PASS_VECTOR)) {
+		if(addpassflag & SCE_PASS_Z)
+			interpolate_vec1(&shr1->z, &shr2->z, t, negt, &shr->z);
 		if(addpassflag & SCE_PASS_RGBA)
 			interpolate_vec4(shr1->col, shr2->col, t, negt, shr->col);
 		if(addpassflag & SCE_PASS_NORMAL) {
@@ -411,6 +413,7 @@
 	ZSpan *zspan;
 
 	APixstrand *apixbuf;
+	int *totapixbuf;
 	int *rectz;
 	long *rectdaps;
 	int rectx, recty;
@@ -483,6 +486,8 @@
 	return zspan->curpstrand;
 }
 
+#define MAX_ZROW	2000
+
 static void do_strand_fillac(void *handle, int x, int y, float u, float v, float z)
 {
 	StrandPart *spart= (StrandPart*)handle;
@@ -528,7 +533,7 @@
 	{apn->obi[n]= obi; apn->p[n]= strnr; apn->z[n]= zverg; apn->mask[n]= mask; apn->v[n]= t; apn->u[n]= s; apn->seg[n]= seg; break; }
 
 	/* add to pixel list */
-	if(zverg < bufferz) {
+	if(zverg < bufferz && (spart->totapixbuf[offset] < MAX_ZROW)) {
 		t = u*spart->t[0] + v*spart->t[1] + (1.0f-u-v)*spart->t[2];
 		s = fabs(u*spart->s[0] + v*spart->s[1] + (1.0f-u-v)*spart->s[2]);
 
@@ -551,6 +556,7 @@
 
 		strand_shade_refcount(cache, sseg->v[1]);
 		strand_shade_refcount(cache, sseg->v[2]);
+		spart->totapixbuf[offset]++;
 	}
 }
 
@@ -875,6 +881,8 @@
 
 	BLI_memarena_free(memarena);
 
+	spart.totapixbuf= MEM_callocN(sizeof(int)*pa->rectx*pa->recty, "totapixbuf");
+
 	if(!re->test_break()) {
 		/* render segments in sorted order */
 		sortseg= sortsegments;
@@ -907,6 +915,7 @@
 
 	if(sortsegments)
 		MEM_freeN(sortsegments);
+	MEM_freeN(spart.totapixbuf);
 	
 	zbuf_free_span(&zspan);
 

Modified: trunk/blender/source/blender/render/intern/source/zbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/zbuf.c	2008-01-30 11:09:18 UTC (rev 13473)
+++ trunk/blender/source/blender/render/intern/source/zbuf.c	2008-01-30 13:35:28 UTC (rev 13474)
@@ -3575,6 +3575,11 @@
 		int pixsize= 3;
 		
 		switch(rpass->passtype) {
+			case SCE_PASS_Z:
+				fp= rpass->rect + offset;
+				if(shr->z < *fp)
+					*fp= shr->z;
+				break;
 			case SCE_PASS_RGBA:
 				fp= rpass->rect + 4*offset;
 				addAlphaOverFloat(fp, shr->col);
@@ -3801,6 +3806,8 @@
 				
 				addAlphaUnderFloat(samp_shr->combined, shr->combined);
 				
+				samp_shr->z= MIN2(samp_shr->z, shr->z);
+
 				if(addpassflag & SCE_PASS_VECTOR) {
 					QUATCOPY(samp_shr->winspeed, shr->winspeed);
 				}
@@ -4071,6 +4078,8 @@
 					
 					/* for each mask-sample we alpha-under colors. then in end it's added using filter */
 					memset(samp_shr, 0, sizeof(ShadeResult)*R.osa);
+					for(a=0; a<R.osa; a++)
+						samp_shr[a].z= 10e10f;
 					
 					/* nice this memset, but speed vectors are not initialized OK then. it is sufficient to only clear 1 (see merge_transp_passes) */
 					if(addpassflag & SCE_PASS_VECTOR)





More information about the Bf-blender-cvs mailing list