[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11628] branches/particles/source/blender: *bugs fixed
Janne Karhu
jhkarh at utu.fi
Thu Aug 16 23:31:52 CEST 2007
Revision: 11628
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11628
Author: jhk
Date: 2007-08-16 23:31:51 +0200 (Thu, 16 Aug 2007)
Log Message:
-----------
*bugs fixed
-object soft body duplicated itself on file load
-keyed particles didn't update on key changes
*new things
-unified baking now updates 3d window while baking
-modifier editing is disabled in the stack if it effects a baked system
-timing of keyed particles can be changed
Modified Paths:
--------------
branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h
branches/particles/source/blender/blenkernel/BKE_particle.h
branches/particles/source/blender/blenkernel/intern/DerivedMesh.c
branches/particles/source/blender/blenkernel/intern/depsgraph.c
branches/particles/source/blender/blenkernel/intern/dynamics_bake.c
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/src/buttons_editing.c
branches/particles/source/blender/src/buttons_object.c
Modified: branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h 2007-08-16 21:31:51 UTC (rev 11628)
@@ -70,6 +70,7 @@
#define BSYS_BAKE_KEY 1
#define BSYS_LAST_KEY 2
+int modifier_effects_baked(struct Object *ob, struct ModifierData *mod);
int dynamicsbake_test();
struct BakeableSystem *DB_find_bsys(struct ListBase *bakeable, void *system);
struct BakeBase *DB_find_bbase(struct ListBase *bakeable, void *system);
Modified: branches/particles/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_particle.h 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/BKE_particle.h 2007-08-16 21:31:51 UTC (rev 11628)
@@ -94,7 +94,6 @@
struct ParticleKey *psys_get_selected_key(struct ParticleSystem *psys, int pa_index, int *key_index);
void psys_change_act(void *ob_v, void *act_v);
struct Object *psys_get_lattice(struct BakeableSystem *bsys);
-int psys_is_after_modifier(struct ModifierData *tmd);
void psys_disable_all(struct Object *ob);
void psys_enable_all(struct Object *ob);
Modified: branches/particles/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/DerivedMesh.c 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/DerivedMesh.c 2007-08-16 21:31:51 UTC (rev 11628)
@@ -1815,7 +1815,7 @@
DM_set_only_copy(dm, (CustomDataMask)curr->link);
ndm = mti->applyModifier(md, ob, dm,
- psys_is_after_modifier(md)?0:useRenderParams,
+ modifier_effects_baked(ob,md)?0:useRenderParams,
!inputVertexCos);
if(ndm) {
Modified: branches/particles/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/depsgraph.c 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/depsgraph.c 2007-08-16 21:31:51 UTC (rev 11628)
@@ -580,13 +580,7 @@
dag_add_relation(dag, node, node, DAG_RL_OB_DATA);
- //if(part->type==PART_REACTOR){
- // if(psys->target_ob && psys->target_psys <= psys->target_ob->totpart){
- // node2 = dag_get_node(dag, psys->target_ob);
- // dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA);
- // }
- //}
- if(part->phystype==PART_PHYS_KEYED && psys->keyed_ob && BLI_findlink(&psys->keyed_ob->particlesystem,psys->keyed_psys)){
+ if(part->phystype==PART_PHYS_KEYED && psys->keyed_ob && BLI_findlink(&psys->keyed_ob->particlesystem,psys->keyed_psys-1)){
node2 = dag_get_node(dag, psys->keyed_ob);
dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA);
}
Modified: branches/particles/source/blender/blenkernel/intern/dynamics_bake.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/dynamics_bake.c 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/dynamics_bake.c 2007-08-16 21:31:51 UTC (rev 11628)
@@ -13,6 +13,8 @@
#include "DNA_object_types.h"
#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
@@ -22,6 +24,7 @@
#include "BKE_key.h"
#include "BKE_lattice.h"
#include "BKE_material.h"
+#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_scene.h"
@@ -34,6 +37,7 @@
#include "BLI_rand.h"
#include "BIF_screen.h"
+#include "BIF_space.h"
#include "BIF_editbake.h"
#include "BIF_resources.h"
#include "BIF_toolbox.h"
@@ -41,6 +45,35 @@
#include "blendef.h"
#include "mydevice.h"
+
+int modifier_effects_baked(Object *ob, ModifierData *mod)
+{
+ ModifierTypeInfo *mti = modifierType_getInfo(mod->type);
+ ModifierData *md;
+
+ if(mti->type==eModifierTypeType_OnlyDeform)
+ return 0;
+
+ for(md=ob->modifiers.last; md; md=md->next){
+ if(mod==md) break;
+
+ if(md->type==eModifierType_ParticleSystem){
+ ParticleSystemModifierData *psmd=(ParticleSystemModifierData*)md;
+ BakeableSystem *bsys = DB_find_bsys(&ob->bakeable,psmd->psys);
+
+ if(bsys->flag & BSYS_DONE && (bsys->flag & BSYS_AUTOBAKE)==0)
+ return 1;
+ }
+ else if(md->type==eModifierType_Softbody){
+ BakeableSystem *bsys = DB_find_bsys(&ob->bakeable,ob->soft);
+
+ if(bsys->flag & BSYS_DONE && (bsys->flag & BSYS_AUTOBAKE)==0)
+ return 1;
+ }
+ }
+
+ return 0;
+}
int dynamicsbake_test()
{
BakeBase *bbase = OBACT->bakeable.first;
@@ -397,7 +430,7 @@
ParticleSystem *psys=0;
float birthtime=0.0, dietime=0.0;
float t, time, keytime, dfra=1.0, frs_sec=G.scene->r.frs_sec;
- float col[3]={0.5f,0.5f,0.5f},alpha;
+ float col[3]={0.5f,0.5f,0.5f};
float vel_1st[3], rot_1st[4];
int k,i;
int steps=(int)pow(2.0,(double)bsys->draw_step);
@@ -1086,7 +1119,6 @@
}
static void psys_convert_dynamic_key(BakeableSystem *bsys, void *dynkey, BakeKey *bkey, float *ckey_f)
{
- ParticleSystem *psys=(ParticleSystem*)bsys->system;
BakeKeyParticle *ckey = (BakeKeyParticle*)(ckey_f);
ParticleKey *key = (ParticleKey*)dynkey;
@@ -1100,7 +1132,6 @@
}
static void psys_convert_bake_key(BakeableSystem *bsys, BakeKey *bkey, float *ckey_f, void *dynkey)
{
- ParticleSystem *psys=(ParticleSystem*)bsys->system;
BakeKeyParticle *ckey = (BakeKeyParticle*)(ckey_f);
ParticleKey *key = (ParticleKey*)dynkey;
@@ -1117,7 +1148,6 @@
Object *ob=bsys->ob;
ParticleSystem *psys=(ParticleSystem*)bsys->system;
ParticleSettings *part=psys->part;
- ParticleSystemModifierData *psmd=psys_get_modifier(ob,psys);
if(psys->totpart==0) return 0;
@@ -1382,6 +1412,7 @@
}
void DB_unified_bake(ListBase *bakelist, int from_cfra, int autobake)
{
+ ScrArea *sa;
Base *base;
BakeableSystem *bsys;
BakeableAccess *bacc;
@@ -1425,14 +1456,15 @@
object_handle_update(base->object);
/* update ui */
- if(autobake==0)
+ if(autobake==0){
set_timecursor(CFRA);
- //for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- // if(sa->spacetype == SPACE_VIEW3D) {
- // scrarea_do_windraw(sa);
- // }
- //}
- //screen_swapbuffers();
+ for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ if(sa->spacetype == SPACE_VIEW3D) {
+ scrarea_do_windraw(sa);
+ }
+ }
+ screen_swapbuffers();
+ }
for(bsys=bakelist->first; bsys; bsys=bsys->next){
bacc=access_BakeableSystem(bsys);
Modified: branches/particles/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/particle.c 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/particle.c 2007-08-16 21:31:51 UTC (rev 11628)
@@ -254,18 +254,6 @@
return lattice;
}
-int psys_is_after_modifier(ModifierData *tmd)
-{
- ModifierData *md=tmd;
-
- if(md){
- for(md=md->next; md; md=md->next){
- if(md->type==eModifierType_ParticleSystem) return 1;
- }
- }
-
- return 0;
-}
void psys_disable_all(Object *ob){
ParticleSystem *psys=ob->particlesystem.first;
@@ -1869,6 +1857,7 @@
part->totpart= 1000;
part->grid_res= 10;
part->timetweak= 1.0;
+ part->keyed_time= 0.5;
//part->userjit;
part->integrator= PART_INT_MIDPOINT;
Modified: branches/particles/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- branches/particles/source/blender/blenkernel/intern/particle_system.c 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenkernel/intern/particle_system.c 2007-08-16 21:31:51 UTC (rev 11628)
@@ -1472,6 +1472,7 @@
ParticleKey state;
int totbel=psys->totpart, i, k, totkeys=psys->totkeyed+1;
int csize=bacc->custom_size;
+ float prevtime, nexttime, keyedtime;
/* no proper targets so let's clear and bail out */
if(psys->totkeyed==0){
@@ -1503,7 +1504,20 @@
for(i=0,pa=psys->particles,bel=bsys->elements; i<totbel; i++,pa++,bel++){
psys_get_particle_state(kob,kpsys,i%kpsys->totpart,&state,1);
bacc->convert_dynamic_key(bsys,&state,bel->keys+k,(csize?bel->custom+csize*k:0));
- (bel->keys+k)->time=pa->time + (float)k/(float)(totkeys-1)*pa->lifetime;
+ if(k==0)
+ (bel->keys)->time=pa->time;
+ else if(k==totkeys-1)
+ (bel->keys+k)->time=pa->time+pa->lifetime;
+ else{
+ if(psys->flag & PSYS_KEYED_TIME){
+ prevtime = (bel->keys+k-1)->time;
+ nexttime = pa->time+pa->lifetime;
+ keyedtime = kpsys->part->keyed_time;
+ (bel->keys+k)->time = (1.0f-keyedtime)*prevtime + keyedtime*nexttime;
+ }
+ else
+ (bel->keys+k)->time = pa->time + (float)k/(float)(totkeys-1)*pa->lifetime;
+ }
}
if(kpsys->keyed_ob){
kob=kpsys->keyed_ob;
Modified: branches/particles/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles/source/blender/blenloader/intern/readfile.c 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/blenloader/intern/readfile.c 2007-08-16 21:31:51 UTC (rev 11628)
@@ -6759,8 +6759,10 @@
if(ob->soft){
SoftBody *sb=ob->soft;
BakeableSystem *bsys;
- BLI_addhead(&ob->bakeable, DB_soft_to_BakeBase(ob,sb));
- bsys=((BakeBase*)ob->bakeable.first)->bsys;
+ if((bsys=DB_find_bsys(&ob->bakeable,sb))==0){
+ BLI_addhead(&ob->bakeable, DB_soft_to_BakeBase(ob,sb));
+ bsys=((BakeBase*)ob->bakeable.first)->bsys;
+ }
if(sb->keys){
BakeElement *bel;
Modified: branches/particles/source/blender/makesdna/DNA_particle_types.h
===================================================================
--- branches/particles/source/blender/makesdna/DNA_particle_types.h 2007-08-16 16:02:42 UTC (rev 11627)
+++ branches/particles/source/blender/makesdna/DNA_particle_types.h 2007-08-16 21:31:51 UTC (rev 11628)
@@ -70,7 +70,7 @@
/* general values */
float sta, end, lifetime, randlife;
- float timetweak, jitfac;
+ float timetweak, jitfac, keyed_time, rt3;
int totpart, userjit, grid_res;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list