[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12568] branches/particles/source/blender: Halo size was evaluated too early in render code for particle dependent timing of ipos to have effect .

Janne Karhu jhkarh at utu.fi
Mon Nov 12 18:24:12 CET 2007


Revision: 12568
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12568
Author:   jhk
Date:     2007-11-12 18:24:12 +0100 (Mon, 12 Nov 2007)

Log Message:
-----------
Halo size was evaluated too early in render code for particle dependent timing of ipos to have effect.

Now with point caching negative emission start frames aren't really usable.

Removed the id code "PA" from menus with particle systems.

Conversion from old particle systems to new ones:
Currently the regression files with old particles (except bowl.blend) work acceptably with some differences in behaviour. Refinement of conversion is still needed before release though.
The bowl.blend crashes on some icon related bug that's not due to particles so I'm hoping it will be resolved with a merge from trunk.

Modified Paths:
--------------
    branches/particles/source/blender/blenkernel/BKE_particle.h
    branches/particles/source/blender/blenkernel/intern/particle.c
    branches/particles/source/blender/blenkernel/intern/particle_system.c
    branches/particles/source/blender/blenloader/intern/readfile.c
    branches/particles/source/blender/makesdna/DNA_particle_types.h
    branches/particles/source/blender/render/intern/source/convertblender.c
    branches/particles/source/blender/src/buttons_object.c

Modified: branches/particles/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_particle.h	2007-11-12 12:54:37 UTC (rev 12567)
+++ branches/particles/source/blender/blenkernel/BKE_particle.h	2007-11-12 17:24:12 UTC (rev 12568)
@@ -200,7 +200,7 @@
 void psys_particle_on_emitter(int deform_only, struct ParticleSystemModifierData *psmd, int distr, int index, int index_dmcache, float *fuv, float *vec, float *nor, float *utan, float *vtan);
 struct ParticleSystemModifierData *psys_get_modifier(struct Object *ob, struct ParticleSystem *psys);
 
-struct ParticleSettings *psys_new_settings(char *name);
+struct ParticleSettings *psys_new_settings(char *name, struct Main *main);
 struct ParticleSettings *psys_copy_settings(struct ParticleSettings *part);
 void psys_flush_settings(struct ParticleSettings *part, int event, int hair_recalc);
 

Modified: branches/particles/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/particle.c	2007-11-12 12:54:37 UTC (rev 12567)
+++ branches/particles/source/blender/blenkernel/intern/particle.c	2007-11-12 17:24:12 UTC (rev 12568)
@@ -127,7 +127,7 @@
 {
 	ParticleSystem *psys;
 	DynStr *ds;
-	char *str, num[6];
+	char *str, num[6], temp[128];
 	int i;
 
 	ds = BLI_dynstr_new();
@@ -140,7 +140,7 @@
 		BLI_dynstr_append(ds, "|");
 		sprintf(num,"%i. ",i);
 		BLI_dynstr_append(ds, num);
-		BLI_dynstr_append(ds, psys->part->id.name);
+		BLI_dynstr_append(ds, psys->part->id.name+2);
 		sprintf(num,"%%x%i",i);
 		BLI_dynstr_append(ds, num);
 	}
@@ -267,7 +267,7 @@
 }
 void free_keyed_keys(ParticleSystem *psys)
 {
-	if(psys->particles->keys)
+	if(psys->particles && psys->particles->keys)
 		MEM_freeN(psys->particles->keys);
 }
 void free_child_path_cache(ParticleSystem *psys)
@@ -2394,14 +2394,16 @@
 		part->boidrule[i]=(char)i;
 		part->boidfac[i]=0.5;
 	}
+
+	part->ipo = NULL;
 }
 
 
-ParticleSettings *psys_new_settings(char *name)
+ParticleSettings *psys_new_settings(char *name, Main *main)
 {
 	ParticleSettings *part;
 
-	part= alloc_libblock(&G.main->particle, ID_PA, name);
+	part= alloc_libblock(&main->particle, ID_PA, name);
 	
 	default_particle_settings(part);
 

Modified: branches/particles/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/particle_system.c	2007-11-12 12:54:37 UTC (rev 12567)
+++ branches/particles/source/blender/blenkernel/intern/particle_system.c	2007-11-12 17:24:12 UTC (rev 12568)
@@ -88,7 +88,7 @@
 {
 	ParticleSettings *part=psys->part;
 
-	if(G.rendering || (psys->flag & PSYS_BAKING) || (part->child_nbr && part->childtype)) 
+	if(G.rendering || (part->child_nbr && part->childtype)) 
 		return 100;
 
 	if(part->phystype==PART_PHYS_KEYED){
@@ -2828,7 +2828,7 @@
 			if(ec->type & PSYS_EC_DEFLECT){
 				ob= ec->ob;
 
-				if(part->type!=PART_HAIR && psys->flag&PSYS_BAKING)
+				if(part->type!=PART_HAIR)
 					where_is_object_time(ob,cfra);
 
 				if(ob==pob){
@@ -3109,7 +3109,7 @@
 			if(ec->type & PSYS_EC_DEFLECT){
 				ob= ec->ob;
 
-				if(psys->part->type!=PART_HAIR && psys->flag&PSYS_BAKING)
+				if(psys->part->type!=PART_HAIR)
 					where_is_object_time(ob,cfra);
 
 				if(ob==pob)

Modified: branches/particles/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles/source/blender/blenloader/intern/readfile.c	2007-11-12 12:54:37 UTC (rev 12567)
+++ branches/particles/source/blender/blenloader/intern/readfile.c	2007-11-12 17:24:12 UTC (rev 12568)
@@ -6971,7 +6971,182 @@
 		}
 	}
 
-	
+	if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 7)) {
+		Object *ob;
+		bPoseChannel *pchan;
+		bConstraint *con;
+		bConstraintTarget *ct;
+		PartEff *paf=0;
+		
+		for(ob = main->object.first; ob; ob= ob->id.next) {
+			if(ob->pose) {
+				for(pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) {
+					for(con=pchan->constraints.first; con; con=con->next) {
+						if(con->type==CONSTRAINT_TYPE_PYTHON) {
+							bPythonConstraint *data= (bPythonConstraint *)con->data;
+							if (data->tar) {
+								/* version patching needs to be done */
+								ct= MEM_callocN(sizeof(bConstraintTarget), "PyConTarget");
+								
+								ct->tar = data->tar;
+								strcpy(ct->subtarget, data->subtarget);
+								ct->space = con->tarspace;
+								
+								BLI_addtail(&data->targets, ct);
+								data->tarnum++;
+								
+								/* clear old targets to avoid problems */
+								data->tar = NULL;
+								strcpy(data->subtarget, "");
+							}
+						}
+					}
+				}
+			}
+			
+			for(con=ob->constraints.first; con; con=con->next) {
+				if(con->type==CONSTRAINT_TYPE_PYTHON) {
+					bPythonConstraint *data= (bPythonConstraint *)con->data;
+					if (data->tar) {
+						/* version patching needs to be done */
+						ct= MEM_callocN(sizeof(bConstraintTarget), "PyConTarget");
+						
+						ct->tar = data->tar;
+						strcpy(ct->subtarget, data->subtarget);
+						ct->space = con->tarspace;
+						
+						BLI_addtail(&data->targets, ct);
+						data->tarnum++;
+						
+						/* clear old targets to avoid problems */
+						data->tar = NULL;
+						strcpy(data->subtarget, "");
+					}
+				}
+			}
+
+			if(ob->soft && ob->soft->keys) {
+				SoftBody *sb = ob->soft;
+				int k;
+
+				for(k=0; k<sb->totkey; k++) {
+					if(sb->keys[k])
+						MEM_freeN(sb->keys[k]);
+				}
+
+				MEM_freeN(sb->keys);
+
+				sb->keys = NULL;
+				sb->totkey = 0;
+				ob->softflag &= ~OB_SB_BAKESET;
+			}
+
+			/* convert old particles to new system */
+			if((paf = give_parteff(ob))) {
+				ParticleSystem *psys;
+				ModifierData *md;
+				ParticleSystemModifierData *psmd;
+				ParticleSettings *part;
+				ID *id;
+
+				/* create new particle system */
+				psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
+
+				part = psys->part = psys_new_settings("PSys", main);
+				
+				/* needed for proper libdata lookup */
+				oldnewmap_insert(fd->libmap, psys->part, psys->part, 0);
+
+				part->id.us--;
+				
+				psys->totpart=0;
+				psys->flag=PSYS_ENABLED|PSYS_CURRENT;
+
+				BLI_addtail(&ob->particlesystem, psys);
+
+				md= modifier_new(eModifierType_ParticleSystem);
+				sprintf(md->name, "ParticleSystem %i", BLI_countlist(&ob->particlesystem));
+				psmd= (ParticleSystemModifierData*) md;
+				psmd->psys=psys;
+				BLI_addtail(&ob->modifiers, md);
+
+				/* convert settings from old particle system */
+				/* general settings */
+				part->totpart = paf->totpart;
+				part->sta = paf->sta;
+				part->end = paf->end;
+				part->lifetime = paf->lifetime;
+				part->randlife = paf->randlife;
+				psys->seed = paf->seed;
+				part->disp = paf->disp;
+				part->omat = paf->mat[0];
+				part->hair_step = paf->totkey;
+
+				part->eff_group = paf->group;
+
+				/* physics */
+				part->normfac = paf->normfac * 25.0f;
+				part->obfac = paf->obfac;
+				part->randfac = paf->randfac * 25.0f;
+				part->dampfac = paf->damp;
+				VECCOPY(part->acc, paf->force);
+				VecMulf(part->acc, 25.0f);
+
+				/* flags */
+				if(paf->stype & PAF_VECT) {
+					if(paf->flag & PAF_STATIC) {
+						/* new hair lifetime is always 100.0f */
+						float fac = paf->lifetime / 100.0f;
+
+						part->draw_as = PART_DRAW_PATH;
+						part->type = PART_HAIR;
+						psys->recalc |= PSYS_RECALC_HAIR;
+
+						part->normfac *= fac;
+						part->randfac *= fac;
+					}
+					else {
+						part->draw_as = PART_DRAW_LINE;
+						part->draw |= PART_DRAW_VEL_LENGTH;
+						part->draw_line[1] = 0.04f;
+					}
+				}
+
+				part->rotmode = PART_ROT_VEL;
+				
+				part->flag |= (paf->flag & PAF_BSPLINE) ? PART_HAIR_BSPLINE : 0;
+				part->flag |= (paf->flag & PAF_TRAND) ? PART_TRAND : 0;
+				part->flag |= (paf->flag & PAF_EDISTR) ? PART_EDISTR : 0;
+				part->flag |= (paf->flag & PAF_UNBORN) ? PART_UNBORN : 0;
+				part->flag |= (paf->flag & PAF_DIED) ? PART_DIED : 0;
+				part->from |= (paf->flag & PAF_FACE) ? PART_FROM_FACE : 0;
+				part->draw |= (paf->flag & PAF_SHOWE) ? PART_DRAW_EMITTER : 0;
+
+				psys->vgroup[PSYS_VG_DENSITY] = paf->vertgroup;
+				psys->vgroup[PSYS_VG_VEL] = paf->vertgroup_v;
+				psys->vgroup[PSYS_VG_LENGTH] = paf->vertgroup_v;
+
+				/* dupliobjects */
+				if(ob->transflag & OB_DUPLIVERTS) {
+					Object *dup = main->object.first;
+
+					for(; dup; dup= dup->id.next) {
+						if(ob == newlibadr(fd, lib, dup->parent)) {
+							part->dup_ob = dup;
+							ob->transflag |= OB_DUPLIPARTS;
+							ob->transflag &= ~OB_DUPLIVERTS;
+
+							part->draw_as = PART_DRAW_OB;
+						}
+					}
+				}
+
+				free_effects(&ob->effect);
+
+				printf("Old particle system converted to new system.\n");
+			}
+		}
+	}
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
 	/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
 

Modified: branches/particles/source/blender/makesdna/DNA_particle_types.h
===================================================================
--- branches/particles/source/blender/makesdna/DNA_particle_types.h	2007-11-12 12:54:37 UTC (rev 12567)
+++ branches/particles/source/blender/makesdna/DNA_particle_types.h	2007-11-12 17:24:12 UTC (rev 12568)
@@ -365,13 +365,13 @@
 
 /* psys->flag */
 #define PSYS_CURRENT		1
-#define PSYS_BAKING			2
-#define PSYS_BAKE_UI		4
+//#define PSYS_BAKING			2
+//#define PSYS_BAKE_UI		4
 #define	PSYS_KEYED_TIME		8
 #define PSYS_ENABLED		16
 #define PSYS_FIRST_KEYED	32
 #define PSYS_DRAWING		64
-#define PSYS_SOFT_BAKE		128
+//#define PSYS_SOFT_BAKE		128
 #define PSYS_DELETE			256	/* remove particlesystem as soon as possible */
 #define PSYS_HAIR_DONE		512
 #define PSYS_KEYED			1024
@@ -421,9 +421,9 @@
 #define BOID_LEVEL			7
 
 
-#define PSYS_INTER_CUBIC	0
-#define PSYS_INTER_LINEAR	1
-#define PSYS_INTER_CARDINAL	2
-#define PSYS_INTER_BSPLINE	3
+//#define PSYS_INTER_CUBIC	0
+//#define PSYS_INTER_LINEAR	1
+//#define PSYS_INTER_CARDINAL	2
+//#define PSYS_INTER_BSPLINE	3
 
 #endif

Modified: branches/particles/source/blender/render/intern/source/convertblender.c
===================================================================
--- branches/particles/source/blender/render/intern/source/convertblender.c	2007-11-12 12:54:37 UTC (rev 12567)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list