[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38285] trunk/blender/source/blender: Fix for [#26873] Animated displacement modifier on an object doesn' t work with hair particle objects

Janne Karhu jhkarh at gmail.com
Sun Jul 10 19:04:57 CEST 2011


Revision: 38285
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38285
Author:   jhk
Date:     2011-07-10 17:04:56 +0000 (Sun, 10 Jul 2011)
Log Message:
-----------
Fix for [#26873] Animated displacement modifier on an object doesn't work with hair particle objects
* Noise is now considered an animated texture as it changes with every frame
* Converted a few places in particles code to use the particle system's own random table instead of BLI_frand.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/boids.c
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/render/intern/source/convertblender.c

Modified: trunk/blender/source/blender/blenkernel/intern/boids.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/boids.c	2011-07-10 16:24:03 UTC (rev 38284)
+++ trunk/blender/source/blender/blenkernel/intern/boids.c	2011-07-10 17:04:56 UTC (rev 38285)
@@ -937,6 +937,7 @@
 	BoidValues val;
 	BoidState *state = get_boid_state(boids, pa);
 	BoidParticle *bpa = pa->boid;
+	ParticleSystem *psys = bbd->sim->psys;
 	int rand;
 	//BoidCondition *cond;
 
@@ -959,9 +960,8 @@
 	bbd->wanted_co[0]=bbd->wanted_co[1]=bbd->wanted_co[2]=bbd->wanted_speed=0.0f;
 
 	/* create random seed for every particle & frame */
-	BLI_srandom(bbd->sim->psys->seed + p);
-	rand = BLI_rand();
-	BLI_srandom((int)bbd->cfra + rand);
+	rand = (int)(PSYS_FRAND(psys->seed + p) * 1000);
+	rand = (int)(PSYS_FRAND((int)bbd->cfra + rand) * 1000);
 
 	set_boid_values(&val, bbd->part->boids, pa);
 

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2011-07-10 16:24:03 UTC (rev 38284)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2011-07-10 17:04:56 UTC (rev 38285)
@@ -2889,8 +2889,6 @@
 	if(psys_in_edit_mode(sim->scene, psys))
 		if(psys->renderdata==0 && (psys->edit==NULL || pset->flag & PE_DRAW_PART)==0)
 			return;
-	
-	BLI_srandom(psys->seed);
 
 	keyed = psys->flag & PSYS_KEYED;
 	baked = psys->pointcache->mem_cache.first && psys->part->type != PART_HAIR;

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2011-07-10 16:24:03 UTC (rev 38284)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2011-07-10 17:04:56 UTC (rev 38285)
@@ -3514,8 +3514,6 @@
 	PARTICLE_P;
 	float disp = (float)psys_get_current_display_percentage(psys)/100.0f;
 
-	BLI_srandom(psys->seed);
-
 	LOOP_PARTICLES {
 		if(PSYS_FRAND(p) > disp)
 			pa->flag |= PARS_NO_DISP;
@@ -3801,8 +3799,6 @@
 	PARTICLE_P;
 	float disp, dietime;
 
-	BLI_srandom(psys->seed);
-
 	psys_update_effectors(sim);
 	
 	disp= (float)psys_get_current_display_percentage(psys)/100.0f;
@@ -4054,7 +4050,6 @@
 	/* set particles to be not calculated TODO: can't work with pointcache */
 	disp= (float)psys_get_current_display_percentage(psys)/100.0f;
 
-	BLI_srandom(psys->seed);
 	LOOP_PARTICLES {
 		if(PSYS_FRAND(p) > disp)
 			pa->flag |= PARS_NO_DISP;

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c	2011-07-10 16:24:03 UTC (rev 38284)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c	2011-07-10 17:04:56 UTC (rev 38285)
@@ -1486,6 +1486,10 @@
 		// assume anything in adt means the texture is animated
 		return 1;
 	}
+	else if(texture->type == TEX_NOISE) {
+		// noise always varies with time
+		return 1;
+	}
 	return 0;
 }
 

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2011-07-10 16:24:03 UTC (rev 38284)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2011-07-10 17:04:56 UTC (rev 38285)
@@ -1798,11 +1798,9 @@
 
 			pa_size = pa->size;
 
-			BLI_srandom(psys->seed+a);
+			r_tilt = 2.0f*(PSYS_FRAND(a) - 0.5f);
+			r_length = PSYS_FRAND(a+1);
 
-			r_tilt = 2.0f*(BLI_frand() - 0.5f);
-			r_length = BLI_frand();
-
 			if(path_nbr) {
 				cache = psys->pathcache[a];
 				max_k = (int)cache->steps;




More information about the Bf-blender-cvs mailing list