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

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Feb 15 16:29:45 CET 2008


Revision: 13704
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13704
Author:   blendix
Date:     2008-02-15 16:29:43 +0100 (Fri, 15 Feb 2008)

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

Bugfix for unnecessary missing object warnings for speed vectors,
caused by optimization that doesn't compute vectors for objects that
don't need them.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/occlusion.c

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2008-02-15 15:20:50 UTC (rev 13703)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2008-02-15 15:29:43 UTC (rev 13704)
@@ -517,6 +517,7 @@
 #define R_DUPLI_TRANSFORMED	1
 #define R_ENV_TRANSFORMED	2
 #define R_TRANSFORMED		(1|2)
+#define R_NEED_VECTORS		4
 
 #endif /* RENDER_TYPES_H */
 

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-02-15 15:20:50 UTC (rev 13703)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-02-15 15:29:43 UTC (rev 13704)
@@ -4051,7 +4051,7 @@
 	re->totstrand += obr->totstrand;
 }
 
-static void add_render_object(Render *re, Object *ob, Object *par, int index, int timeoffset, int instanceable)
+static void add_render_object(Render *re, Object *ob, Object *par, int index, int timeoffset, int instanceable, int vectorlay)
 {
 	ObjectRen *obr;
 	ParticleSystem *psys;
@@ -4078,6 +4078,8 @@
 			obr->flag |= R_INSTANCEABLE;
 			Mat4CpyMat4(obr->obmat, ob->obmat);
 		}
+		if(obr->lay & vectorlay)
+			obr->flag |= R_NEED_VECTORS;
 		init_render_object_data(re, obr, timeoffset);
 
 		/* only add instance for objects that have not been used for dupli */
@@ -4096,6 +4098,8 @@
 				obr->flag |= R_INSTANCEABLE;
 				Mat4CpyMat4(obr->obmat, ob->obmat);
 			}
+			if(obr->lay & vectorlay)
+				obr->flag |= R_NEED_VECTORS;
 			init_render_object_data(re, obr, timeoffset);
 			psys_render_restore(ob, psys);
 
@@ -4110,7 +4114,7 @@
 
 /* par = pointer to duplicator parent, needed for object lookup table */
 /* index = when duplicater copies same object (particle), the counter */
-static void init_render_object(Render *re, Object *ob, Object *par, int index, int timeoffset, int instanceable)
+static void init_render_object(Render *re, Object *ob, Object *par, int index, int timeoffset, int instanceable, int vectorlay)
 {
 	static double lasttime= 0.0;
 	double time;
@@ -4119,7 +4123,7 @@
 	if(ob->type==OB_LAMP)
 		add_render_lamp(re, ob);
 	else if(render_object_type(ob->type))
-		add_render_object(re, ob, par, index, timeoffset, instanceable);
+		add_render_object(re, ob, par, index, timeoffset, instanceable, vectorlay);
 	else {
 		MTC_Mat4MulMat4(mat, ob->obmat, re->viewmat);
 		MTC_Mat4Invert(ob->imat, mat);
@@ -4321,7 +4325,7 @@
 	ObjectInstanceRen *obi;
 	Scene *sce;
 	float mat[4][4];
-	int lay;
+	int lay, vectorlay;
 
 	for(SETLOOPER(re->scene, base)) {
 		ob= base->object;
@@ -4336,10 +4340,8 @@
 	for(SETLOOPER(re->scene, base)) {
 		ob= base->object;
 
-		if(timeoffset)
-			lay= renderlay & get_vector_renderlayers(sce);
-		else
-			lay= renderlay;
+		vectorlay= get_vector_renderlayers(sce);
+		lay= (timeoffset)? renderlay & vectorlay: renderlay;
 
 		/* if the object has been restricted from rendering in the outliner, ignore it */
 		if(ob->restrictflag & OB_RESTRICT_RENDER) continue;
@@ -4348,7 +4350,7 @@
 		if(ob->flag & OB_DONE) {
 			if(ob->transflag & OB_RENDER_DUPLI)
 				if(allow_render_object(ob, nolamps, onlyselected, actob))
-					init_render_object(re, ob, NULL, 0, timeoffset, 1);
+					init_render_object(re, ob, NULL, 0, timeoffset, 1, vectorlay);
 		}
 		else if((base->lay & lay) || (ob->type==OB_LAMP && (base->lay & re->scene->lay)) ) {
 			if((ob->transflag & OB_DUPLI) && (ob->type!=OB_MBALL)) {
@@ -4399,7 +4401,7 @@
 							}
 						}
 						else
-							init_render_object(re, obd, ob, dob->index, timeoffset, !dob->animated);
+							init_render_object(re, obd, ob, dob->index, timeoffset, !dob->animated, vectorlay);
 
 						psysindex= 1;
 						for(psys=obd->particlesystem.first; psys; psys=psys->next) {
@@ -4424,17 +4426,17 @@
 						}
 					}
 					else
-						init_render_object(re, obd, ob, dob->index, timeoffset, !dob->animated);
+						init_render_object(re, obd, ob, dob->index, timeoffset, !dob->animated, vectorlay);
 					
 					if(re->test_break()) break;
 				}
 				free_object_duplilist(lb);
 
 				if(allow_render_object(ob, nolamps, onlyselected, actob))
-					init_render_object(re, ob, NULL, 0, timeoffset, 0);
+					init_render_object(re, ob, NULL, 0, timeoffset, 0, vectorlay);
 			}
 			else if(allow_render_object(ob, nolamps, onlyselected, actob))
-				init_render_object(re, ob, NULL, 0, timeoffset, 0);
+				init_render_object(re, ob, NULL, 0, timeoffset, 0, vectorlay);
 		}
 
 		if(re->test_break()) break;
@@ -4994,9 +4996,12 @@
 				table= &oldtable;
 			
 			oldobi= table->first;
-			for(obi= re->instancetable.first; obi && oldobi; obi= obi->next, oldobi= oldobi->next) {
+			for(obi= re->instancetable.first; obi && oldobi; obi= obi->next) {
 				int ok= 1;
 
+				if(!(obi->obr->flag & R_NEED_VECTORS))
+					continue;
+
 				obi->totvector= obi->obr->totvert;
 
 				/* find matching object in old table */
@@ -5022,13 +5027,13 @@
 					load_fluidsimspeedvectors(re, obi, oldobi->vectors, step);
 				} else {
 					/* check if both have same amounts of vertices */
-					if(obi->totvector!=oldobi->totvector) {
+					if(obi->totvector==oldobi->totvector)
+						calculate_speedvectors(re, obi, oldobi->vectors, step);
+					else
 						printf("Warning: object %s has different amount of vertices or strands on other frame\n", obi->ob->id.name+2);
-						continue;
-					}
-					
-					calculate_speedvectors(re, obi, oldobi->vectors, step);
 				} // not fluidsim
+
+				oldobi= oldobi->next;
 			}
 		}
 	}

Modified: trunk/blender/source/blender/render/intern/source/occlusion.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/occlusion.c	2008-02-15 15:20:50 UTC (rev 13703)
+++ trunk/blender/source/blender/render/intern/source/occlusion.c	2008-02-15 15:29:43 UTC (rev 13704)
@@ -1638,9 +1638,6 @@
 			onlyshadow= (shi->mat->mode & MA_ONLYSHADOW);
 			sample_occ_tree(re, tree, &exclude, shi->co, shi->vno, shi->thread, onlyshadow, shi->ao);
 
-			if(G.rt & 32)
-				shi->ao[2] *= 2.0f;
-
 			/* fill result into sample, each time */
 			if(tree->cache) {
 				cache= &tree->cache[shi->thread];





More information about the Bf-blender-cvs mailing list