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

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Jan 21 15:18:24 CET 2008


Revision: 13332
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13332
Author:   blendix
Date:     2008-01-21 15:18:24 +0100 (Mon, 21 Jan 2008)

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

Fixes:
- Particle system distribution wasn't flushed properly for non-edited hair.
- For instances in the renderer, also count their verts and faces in the stats.
- Fix for error in the "surface diffuse" formula for strand shading.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_particle.h
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/shadbuf.c
    trunk/blender/source/blender/render/intern/source/shadeoutput.c

Modified: trunk/blender/source/blender/blenkernel/BKE_particle.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_particle.h	2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/blenkernel/BKE_particle.h	2008-01-21 14:18:24 UTC (rev 13332)
@@ -213,6 +213,7 @@
 void free_hair(struct ParticleSystem *psys);
 void free_keyed_keys(struct ParticleSystem *psys);
 void psys_free(struct Object * ob, struct ParticleSystem * psys);
+void psys_free_children(struct ParticleSystem *psys);
 
 void psys_render_set(struct Object *ob, struct ParticleSystem *psys, float viewmat[][4], float winmat[][4], int winx, int winy);
 void psys_render_restore(struct Object *ob, struct ParticleSystem *psys);

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2008-01-21 14:18:24 UTC (rev 13332)
@@ -318,6 +318,16 @@
 	}
 	free_child_path_cache(psys);
 }
+void psys_free_children(ParticleSystem *psys)
+{
+	if(psys->child) {
+		MEM_freeN(psys->child);
+		psys->child=0;
+		psys->totchild=0;
+	}
+
+	free_child_path_cache(psys);
+}
 /* free everything */
 void psys_free(Object *ob, ParticleSystem * psys)
 {

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2008-01-21 14:18:24 UTC (rev 13332)
@@ -4468,9 +4468,11 @@
 
 			distribute_particles(ob, psys, part->from);
 
-			if(!(psys->part->type == PART_HAIR) || (psys->flag & PSYS_HAIR_DONE))
-				if(get_alloc_child_particles_tot(psys))
-					distribute_particles(ob, psys, PART_FROM_CHILD);
+			if((psys->part->type == PART_HAIR) && !(psys->flag & PSYS_HAIR_DONE))
+				/* don't generate children while growing hair - waste of time */
+				psys_free_children(psys);
+			else if(get_alloc_child_particles_tot(psys))
+				distribute_particles(ob, psys, PART_FROM_CHILD);
 		}
 		initialize_all_particles(ob, psys, psmd);
 

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-01-21 14:18:24 UTC (rev 13332)
@@ -3894,6 +3894,7 @@
 {
 	ObjectInstanceRen *obi;
 	float imat[4][4], obmat[4][4], obimat[4][4], nmat[3][3];
+	int first = 1;
 
 	Mat4MulMat4(obmat, obr->ob->obmat, re->viewmat);
 	Mat4Invert(imat, obmat);
@@ -3909,6 +3910,15 @@
 
 			Mat3CpyMat4(nmat, obi->mat);
 			Mat3Inv(obi->imat, nmat);
+
+			if(!first) {
+				re->totvert += obr->totvert;
+				re->totvlak += obr->totvlak;
+				re->tothalo += obr->tothalo;
+				re->totstrand += obr->totstrand;
+			}
+			else
+				first= 0;
 		}
 	}
 }

Modified: trunk/blender/source/blender/render/intern/source/shadbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadbuf.c	2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/render/intern/source/shadbuf.c	2008-01-21 14:18:24 UTC (rev 13332)
@@ -288,7 +288,7 @@
 	Material *ma= NULL;
 	float minz, maxz, vec[3], viewmat[4][4], obviewmat[4][4];
 	unsigned int lay = -1;
-	int i, a, ok= 1;
+	int i, a, maxtotvert, ok= 1;
 	char *clipflag;
 	
 	minz= 1.0e30f; maxz= -1.0e30f;
@@ -296,8 +296,12 @@
 	
 	if(lar->mode & LA_LAYER) lay= lar->lay;
 
-	clipflag= MEM_callocN(sizeof(char)*re->totvert, "autoclipflag");
+	maxtotvert= 0;
+	for(obr=re->objecttable.first; obr; obr=obr->next)
+		maxtotvert= MAX2(obr->totvert, maxtotvert);
 
+	clipflag= MEM_callocN(sizeof(char)*maxtotvert, "autoclipflag");
+
 	/* set clip in vertices when face visible */
 	for(i=0, obi=re->instancetable.first; obi; i++, obi=obi->next) {
 		obr= obi->obr;

Modified: trunk/blender/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeoutput.c	2008-01-21 11:30:54 UTC (rev 13331)
+++ trunk/blender/source/blender/render/intern/source/shadeoutput.c	2008-01-21 14:18:24 UTC (rev 13332)
@@ -1228,6 +1228,7 @@
 			Crossf(nstrand, vn, cross);
 
 			blend= INPR(nstrand, shi->surfnor);
+			blend= 1.0f - blend;
 			CLAMP(blend, 0.0f, 1.0f);
 
 			VecLerpf(vnor, nstrand, shi->surfnor, blend);





More information about the Bf-blender-cvs mailing list