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

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Mar 11 13:30:17 CET 2008


Revision: 14060
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14060
Author:   blendix
Date:     2008-03-11 13:29:59 +0100 (Tue, 11 Mar 2008)

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

Bugfix: render instancing didn't work correct with layer ipo's,
each instance should have it's own layer.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/include/renderdatabase.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/rayshade.c
    trunk/blender/source/blender/render/intern/source/renderdatabase.c
    trunk/blender/source/blender/render/intern/source/shadbuf.c
    trunk/blender/source/blender/render/intern/source/shadeoutput.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-11 11:22:27 UTC (rev 14059)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2008-03-11 12:29:59 UTC (rev 14060)
@@ -273,7 +273,7 @@
 
 	ObjectRen *obr;
 	Object *ob, *par;
-	int index, psysindex;
+	int index, psysindex, lay;
 
 	float mat[4][4], imat[3][3];
 	short flag;

Modified: trunk/blender/source/blender/render/intern/include/renderdatabase.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/renderdatabase.h	2008-03-11 11:22:27 UTC (rev 14059)
+++ trunk/blender/source/blender/render/intern/include/renderdatabase.h	2008-03-11 12:29:59 UTC (rev 14060)
@@ -99,7 +99,7 @@
 struct StrandBuffer *RE_addStrandBuffer(struct ObjectRen *obr, int totvert);
 
 struct ObjectRen *RE_addRenderObject(struct Render *re, struct Object *ob, struct Object *par, int index, int psysindex, int lay);
-struct ObjectInstanceRen *RE_addRenderInstance(struct Render *re, struct ObjectRen *obr, struct Object *ob, struct Object *par, int index, int psysindex, float mat[][4]);
+struct ObjectInstanceRen *RE_addRenderInstance(struct Render *re, struct ObjectRen *obr, struct Object *ob, struct Object *par, int index, int psysindex, float mat[][4], int lay);
 void RE_makeRenderInstances(struct Render *re);
 void RE_instanceTransformNormal(struct ObjectInstanceRen *obi, float *nor, float *tnor);
 

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-03-11 11:22:27 UTC (rev 14059)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-03-11 12:29:59 UTC (rev 14060)
@@ -4334,7 +4334,7 @@
 
 		/* only add instance for objects that have not been used for dupli */
 		if(!(ob->transflag & OB_RENDER_DUPLI)) {
-			obi= RE_addRenderInstance(re, obr, ob, par, index, 0, NULL);
+			obi= RE_addRenderInstance(re, obr, ob, par, index, 0, NULL, ob->lay);
 			if(dob) set_dupli_tex_mat(re, obi, dob);
 		}
 		else
@@ -4357,7 +4357,7 @@
 
 			/* only add instance for objects that have not been used for dupli */
 			if(!(ob->transflag & OB_RENDER_DUPLI)) {
-				obi= RE_addRenderInstance(re, obr, ob, par, index, psysindex, NULL);
+				obi= RE_addRenderInstance(re, obr, ob, par, index, psysindex, NULL, ob->lay);
 				if(dob) set_dupli_tex_mat(re, obi, dob);
 			}
 			else
@@ -4708,7 +4708,7 @@
 						 * a dupligroup that has already been created before */
 						if(dob->type != OB_DUPLIGROUP || (obr=find_dupligroup_dupli(re, obd, 0))) {
 							Mat4MulMat4(mat, dob->mat, re->viewmat);
-							obi= RE_addRenderInstance(re, NULL, obd, ob, dob->index, 0, mat);
+							obi= RE_addRenderInstance(re, NULL, obd, ob, dob->index, 0, mat, obd->lay);
 
 							/* fill in instance variables for texturing */
 							set_dupli_tex_mat(re, obi, dob);
@@ -4736,7 +4736,7 @@
 						psysindex= 1;
 						for(psys=obd->particlesystem.first; psys; psys=psys->next) {
 							if(dob->type != OB_DUPLIGROUP || (obr=find_dupligroup_dupli(re, ob, psysindex))) {
-								obi= RE_addRenderInstance(re, NULL, obd, ob, dob->index, psysindex++, mat);
+								obi= RE_addRenderInstance(re, NULL, obd, ob, dob->index, psysindex++, mat, obd->lay);
 
 								set_dupli_tex_mat(re, obi, dob);
 								if(dob->type != OB_DUPLIGROUP) {
@@ -5136,7 +5136,7 @@
 				else strand++;
 
 				index= RE_strandren_get_face(obr, strand, 0);
-				if(index) {
+				if(index && *index < mesh->totface) {
 					speed= RE_strandren_get_winspeed(obi, strand, 1);
 
 					/* interpolate speed vectors from strand surface */

Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rayshade.c	2008-03-11 11:22:27 UTC (rev 14059)
+++ trunk/blender/source/blender/render/intern/source/rayshade.c	2008-03-11 12:29:59 UTC (rev 14060)
@@ -86,7 +86,7 @@
 	if(is->mode==RE_RAY_MIRROR)
 		return !(vlr->mat->mode & MA_ONLYCAST);
 	else
-		return (is->lay & obi->obr->lay);
+		return (is->lay & obi->lay);
 }
 
 static float *vlr_get_transform(void *userdata, int i)

Modified: trunk/blender/source/blender/render/intern/source/renderdatabase.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/renderdatabase.c	2008-03-11 11:22:27 UTC (rev 14059)
+++ trunk/blender/source/blender/render/intern/source/renderdatabase.c	2008-03-11 12:29:59 UTC (rev 14060)
@@ -1316,7 +1316,7 @@
 
 /* ------------------------------------------------------------------------- */
 
-ObjectInstanceRen *RE_addRenderInstance(Render *re, ObjectRen *obr, Object *ob, Object *par, int index, int psysindex, float mat[][4])
+ObjectInstanceRen *RE_addRenderInstance(Render *re, ObjectRen *obr, Object *ob, Object *par, int index, int psysindex, float mat[][4], int lay)
 {
 	ObjectInstanceRen *obi;
 	float mat3[3][3];
@@ -1327,6 +1327,7 @@
 	obi->par= par;
 	obi->index= index;
 	obi->psysindex= psysindex;
+	obi->lay= lay;
 
 	if(mat) {
 		Mat4CpyMat4(obi->mat, mat);

Modified: trunk/blender/source/blender/render/intern/source/shadbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadbuf.c	2008-03-11 11:22:27 UTC (rev 14059)
+++ trunk/blender/source/blender/render/intern/source/shadbuf.c	2008-03-11 12:29:59 UTC (rev 14060)
@@ -327,7 +327,7 @@
 				if((ma->mode & MA_SHADBUF)==0) ok= 0;
 			}
 			
-			if(ok && (obr->lay & lay)) {
+			if(ok && (obi->lay & lay)) {
 				clipflag[vlr->v1->index]= 1;
 				clipflag[vlr->v2->index]= 1;
 				clipflag[vlr->v3->index]= 1;
@@ -1561,7 +1561,7 @@
 				zspanstrand.shad_alpha= zspan.shad_alpha= ma->shad_alpha;
 			}
 			
-			if(ok && (obr->lay & lay)) {
+			if(ok && (obi->lay & lay)) {
 				float hoco[4][4];
 				int c1, c2, c3, c4=0;
 				int d1, d2, d3, d4=0;

Modified: trunk/blender/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeoutput.c	2008-03-11 11:22:27 UTC (rev 14059)
+++ trunk/blender/source/blender/render/intern/source/shadeoutput.c	2008-03-11 12:29:59 UTC (rev 14060)
@@ -355,7 +355,7 @@
 		if(lar->type==LA_SPOT && (lar->mode & LA_HALO) && lar->haint>0) {
 			
 			if(lar->mode & LA_LAYER) 
-				if(shi->vlr && (lar->lay & shi->obr->lay)==0) 
+				if(shi->vlr && (lar->lay & shi->obi->lay)==0) 
 					continue;
 			if((lar->lay & shi->lay)==0) 
 				continue;
@@ -1463,7 +1463,7 @@
 			/* yafray: ignore shading by photonlights, not used in Blender */
 			if (lar->type==LA_YF_PHOTON) continue;
 			
-			if(lar->mode & LA_LAYER) if((lar->lay & shi->obr->lay)==0) continue;
+			if(lar->mode & LA_LAYER) if((lar->lay & shi->obi->lay)==0) continue;
 			if((lar->lay & shi->lay)==0) continue;
 			
 			if(lar->shb || (lar->mode & LA_SHAD_RAY)) {
@@ -1601,7 +1601,7 @@
 			if (lar->type==LA_YF_PHOTON) continue;
 			
 			/* test for lamp layer */
-			if(lar->mode & LA_LAYER) if((lar->lay & shi->obr->lay)==0) continue;
+			if(lar->mode & LA_LAYER) if((lar->lay & shi->obi->lay)==0) continue;
 			if((lar->lay & shi->lay)==0) continue;
 			
 			/* accumulates in shr->diff and shr->spec and shr->shad (diffuse with shadow!) */

Modified: trunk/blender/source/blender/render/intern/source/zbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/zbuf.c	2008-03-11 11:22:27 UTC (rev 14059)
+++ trunk/blender/source/blender/render/intern/source/zbuf.c	2008-03-11 12:29:59 UTC (rev 14060)
@@ -2120,10 +2120,10 @@
 
 			/* continue happens in 2 different ways... zmaskpass only does lay_zmask stuff */
 			if(zmaskpass) {
-				if((obr->lay & lay_zmask)==0)
+				if((obi->lay & lay_zmask)==0)
 					continue;
 			}
-			else if(!all_z && !(obr->lay & (lay|lay_zmask)))
+			else if(!all_z && !(obi->lay & (lay|lay_zmask)))
 				continue;
 			
 			if(obi->flag & R_TRANSFORMED)
@@ -2141,7 +2141,7 @@
 				else vlr++;
 
 				/* the cases: visible for render, only z values, zmask, nothing */
-				if(obr->lay & lay) {
+				if(obi->lay & lay) {
 					if(vlr->mat!=ma) {
 						ma= vlr->mat;
 						nofill= ma->mode & (MA_ZTRA|MA_ONLYCAST);
@@ -2156,7 +2156,7 @@
 						}
 					}
 				}
-				else if(all_z || (obr->lay & lay_zmask)) {
+				else if(all_z || (obi->lay & lay_zmask)) {
 					env= 1;
 					nofill= 0;
 					ma= NULL; 
@@ -2436,7 +2436,7 @@
 
 		if(obr->ob==re->excludeob)
 			continue;
-		else if(!(obr->lay & lay))
+		else if(!(obi->lay & lay))
 			continue;
 
 		if(obi->flag & R_TRANSFORMED)
@@ -2462,7 +2462,7 @@
 				if((ma->mode & MA_SHADBUF)==0) ok= 0;
 			}
 
-			if(ok && (obr->lay & lay) && !(vlr->flag & R_HIDDEN)) {
+			if(ok && (obi->lay & lay) && !(vlr->flag & R_HIDDEN)) {
 				c1= zbuf_shadow_project(cache, vlr->v1->index, obwinmat, vlr->v1->co, ho1);
 				c2= zbuf_shadow_project(cache, vlr->v2->index, obwinmat, vlr->v2->co, ho2);
 				c3= zbuf_shadow_project(cache, vlr->v3->index, obwinmat, vlr->v3->co, ho3);
@@ -2673,7 +2673,7 @@
 	for(i=0, obi=R.instancetable.first; obi; i++, obi=obi->next) {
 		obr= obi->obr;
 
-		if(!(obr->lay & lay))
+		if(!(obi->lay & lay))
 			continue;
 
 		if(obi->flag & R_TRANSFORMED)
@@ -2692,7 +2692,7 @@
 			
 			if(material_in_material(vlr->mat, sss_ma)) {
 				/* three cases, visible for render, only z values and nothing */
-				if(obr->lay & lay) {
+				if(obi->lay & lay) {
 					if(vlr->mat!=ma) {
 						ma= vlr->mat;
 						nofill= ma->mode & MA_ONLYCAST;
@@ -3370,7 +3370,7 @@
 	for(i=0, obi=R.instancetable.first; obi; i++, obi=obi->next) {
 		obr= obi->obr;
 
-		if(!(obr->lay & lay))
+		if(!(obi->lay & lay))
 			continue;
 
 		if(obi->flag & R_TRANSFORMED)
@@ -3394,7 +3394,7 @@
 			}
 			
 			if(dofill) {
-				if(!(vlr->flag & R_HIDDEN) && (obr->lay & lay)) {
+				if(!(vlr->flag & R_HIDDEN) && (obi->lay & lay)) {
 					unsigned short partclip;
 					
 					v1= vlr->v1;





More information about the Bf-blender-cvs mailing list