[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11602] branches/particles: -unified baking system

Janne Karhu jhkarh at utu.fi
Tue Aug 14 22:18:30 CEST 2007


Revision: 11602
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11602
Author:   jhk
Date:     2007-08-14 22:18:30 +0200 (Tue, 14 Aug 2007)

Log Message:
-----------
-unified baking system
	*currently supports particles and soft body (old soft body should convert properly)
	*baking everything at the same time
	*proper autobaking
	*post-bake editing in "bake mode"
	*not allowing changes to object data structure after bake (locking modifiers still todo)
	*t-key transforms time in bake mode
	*bakeable view in outliner
-particle systems are stored as linked lists so in theory no limit to how many systems can be in an object
-new particle system type "hair" for easier hair/fur creation

Quite a lot of code and structures have changed, so a big bug hunt is essential. Files from previous builds won't load, but everything else that's not working should be considered as a new bug and sent to me.

Modified Paths:
--------------
    branches/particles/projectfiles_vc7/blender/blenkernel/BKE_blenkernel.vcproj
    branches/particles/projectfiles_vc7/blender/makesdna/DNA_makesdna.vcproj
    branches/particles/projectfiles_vc7/blender/src/BL_src.vcproj
    branches/particles/source/blender/blenkernel/BKE_global.h
    branches/particles/source/blender/blenkernel/BKE_object.h
    branches/particles/source/blender/blenkernel/BKE_particle.h
    branches/particles/source/blender/blenkernel/BKE_softbody.h
    branches/particles/source/blender/blenkernel/intern/anim.c
    branches/particles/source/blender/blenkernel/intern/blender.c
    branches/particles/source/blender/blenkernel/intern/depsgraph.c
    branches/particles/source/blender/blenkernel/intern/modifier.c
    branches/particles/source/blender/blenkernel/intern/object.c
    branches/particles/source/blender/blenkernel/intern/particle.c
    branches/particles/source/blender/blenkernel/intern/particle_system.c
    branches/particles/source/blender/blenkernel/intern/scene.c
    branches/particles/source/blender/blenkernel/intern/softbody.c
    branches/particles/source/blender/blenloader/intern/readfile.c
    branches/particles/source/blender/blenloader/intern/writefile.c
    branches/particles/source/blender/include/BIF_outliner.h
    branches/particles/source/blender/include/BIF_transform.h
    branches/particles/source/blender/include/blendef.h
    branches/particles/source/blender/include/butspace.h
    branches/particles/source/blender/include/transform.h
    branches/particles/source/blender/makesdna/DNA_modifier_types.h
    branches/particles/source/blender/makesdna/DNA_object_force.h
    branches/particles/source/blender/makesdna/DNA_object_types.h
    branches/particles/source/blender/makesdna/DNA_particle_types.h
    branches/particles/source/blender/makesdna/DNA_space_types.h
    branches/particles/source/blender/makesdna/intern/makesdna.c
    branches/particles/source/blender/render/intern/source/convertblender.c
    branches/particles/source/blender/src/buttons_editing.c
    branches/particles/source/blender/src/buttons_object.c
    branches/particles/source/blender/src/buttons_shading.c
    branches/particles/source/blender/src/drawobject.c
    branches/particles/source/blender/src/drawview.c
    branches/particles/source/blender/src/edit.c
    branches/particles/source/blender/src/editipo.c
    branches/particles/source/blender/src/editmesh.c
    branches/particles/source/blender/src/editmesh_add.c
    branches/particles/source/blender/src/editmesh_tools.c
    branches/particles/source/blender/src/editobject.c
    branches/particles/source/blender/src/editscreen.c
    branches/particles/source/blender/src/editview.c
    branches/particles/source/blender/src/header_ipo.c
    branches/particles/source/blender/src/header_oops.c
    branches/particles/source/blender/src/header_view3d.c
    branches/particles/source/blender/src/outliner.c
    branches/particles/source/blender/src/space.c
    branches/particles/source/blender/src/toets.c
    branches/particles/source/blender/src/transform.c
    branches/particles/source/blender/src/transform_conversions.c
    branches/particles/source/blender/src/transform_generics.c
    branches/particles/source/blender/src/transform_manipulator.c

Added Paths:
-----------
    branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h
    branches/particles/source/blender/blenkernel/intern/dynamics_bake.c
    branches/particles/source/blender/include/BIF_editbake.h
    branches/particles/source/blender/src/editbake.c

Removed Paths:
-------------
    branches/particles/source/blender/blenkernel/intern/particle_edit.c

Modified: branches/particles/projectfiles_vc7/blender/blenkernel/BKE_blenkernel.vcproj
===================================================================
--- branches/particles/projectfiles_vc7/blender/blenkernel/BKE_blenkernel.vcproj	2007-08-14 18:06:18 UTC (rev 11601)
+++ branches/particles/projectfiles_vc7/blender/blenkernel/BKE_blenkernel.vcproj	2007-08-14 20:18:30 UTC (rev 11602)
@@ -378,6 +378,9 @@
 				RelativePath="..\..\..\source\blender\blenkernel\intern\displist.c">
 			</File>
 			<File
+				RelativePath="..\..\..\source\blender\blenkernel\intern\dynamics_bake.c">
+			</File>
+			<File
 				RelativePath="..\..\..\source\blender\blenkernel\intern\effect.c">
 			</File>
 			<File
@@ -438,9 +441,6 @@
 				RelativePath="..\..\..\source\blender\blenkernel\intern\particle.c">
 			</File>
 			<File
-				RelativePath="..\..\..\source\blender\blenkernel\intern\particle_edit.c">
-			</File>
-			<File
 				RelativePath="..\..\..\source\blender\blenkernel\intern\particle_system.c">
 			</File>
 			<File
@@ -565,6 +565,9 @@
 				RelativePath="..\..\..\source\blender\blenkernel\BKE_displist.h">
 			</File>
 			<File
+				RelativePath="..\..\..\source\blender\blenkernel\BKE_dynamics_bake.h">
+			</File>
+			<File
 				RelativePath="..\..\..\source\blender\blenkernel\BKE_effect.h">
 			</File>
 			<File

Modified: branches/particles/projectfiles_vc7/blender/makesdna/DNA_makesdna.vcproj
===================================================================
--- branches/particles/projectfiles_vc7/blender/makesdna/DNA_makesdna.vcproj	2007-08-14 18:06:18 UTC (rev 11601)
+++ branches/particles/projectfiles_vc7/blender/makesdna/DNA_makesdna.vcproj	2007-08-14 20:18:30 UTC (rev 11602)
@@ -439,6 +439,9 @@
 				RelativePath="..\..\..\source\blender\makesdna\DNA_armature_types.h">
 			</File>
 			<File
+				RelativePath="..\..\..\source\blender\makesdna\DNA_bake_types.h">
+			</File>
+			<File
 				RelativePath="..\..\..\source\blender\makesdna\DNA_brush_types.h">
 			</File>
 			<File

Modified: branches/particles/projectfiles_vc7/blender/src/BL_src.vcproj
===================================================================
--- branches/particles/projectfiles_vc7/blender/src/BL_src.vcproj	2007-08-14 18:06:18 UTC (rev 11601)
+++ branches/particles/projectfiles_vc7/blender/src/BL_src.vcproj	2007-08-14 20:18:30 UTC (rev 11602)
@@ -236,6 +236,9 @@
 				RelativePath="..\..\..\source\blender\src\editarmature.c">
 			</File>
 			<File
+				RelativePath="..\..\..\source\blender\src\editbake.c">
+			</File>
+			<File
 				RelativePath="..\..\..\source\blender\src\editconstraint.c">
 			</File>
 			<File
@@ -633,6 +636,9 @@
 				RelativePath="..\..\..\source\blender\include\BIF_editarmature.h">
 			</File>
 			<File
+				RelativePath="..\..\..\source\blender\include\BIF_editbake.h">
+			</File>
+			<File
 				RelativePath="..\..\..\source\blender\include\BIF_editconstraint.h">
 			</File>
 			<File

Added: branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h	                        (rev 0)
+++ branches/particles/source/blender/blenkernel/BKE_dynamics_bake.h	2007-08-14 20:18:30 UTC (rev 11602)
@@ -0,0 +1,108 @@
+#ifndef BKE_DYNAMICS_BAKE_H
+#define BKE_DYNAMICS_BAKE_H
+
+struct BakeableSystem;
+struct BakeKey;
+struct BakeBase;
+struct ListBase;
+
+/* number of floats in the struct*/
+#define PARTICLE_CUSTOM_SIZE	8
+
+typedef struct BakeKeyParticle{
+	float ave[3];
+	float rot[4];
+	float weight;
+} BakeKeyParticle;
+
+typedef struct BakeCacheKey{
+	float co[3];
+	float vel[3];
+	float rot[4];
+	float col[4];
+} BakeCacheKey;
+
+typedef struct BakeableAccess{
+	short custom_size, recalc_flag;
+
+	/* starting frame of baking */
+	float (*start_frame)(struct BakeableSystem *bsys);
+	
+	/* end frame of baking */
+	float (*end_frame)(struct BakeableSystem *bsys);
+	
+	/* timestep needed for next step */
+	float (*get_timestep)(struct BakeableSystem *bsys);
+	
+	int (*needs_autobake)(struct BakeableSystem *bsys);
+
+	void (*set_baking)(struct BakeableSystem *bsys);
+	void (*end_baking)(struct BakeableSystem *bsys);
+	
+	/* prepare system to continue baking from cfra */
+	void (*set_rebaking)(struct BakeableSystem *bsys, float cfra);
+	
+	/* info on the bake, like size in memory, amount of baked keys etc. */
+	char *(*bake_info)(struct BakeableSystem *bsys);
+	/* name for identifying system in menus etc. */
+	char *(*name)(struct BakeableSystem *bsys);
+	
+	/* initializes and sets an editing mode for the baked data */
+	void (*set_bake_edit)(struct BakeableSystem *bsys);
+	/* clear out temporary stuff left by the edit mode etc. */
+	void (*end_bake_edit)(struct BakeableSystem *bsys);
+
+	int (*key_needs_saving)(struct BakeableSystem *bsys, int index, float cfra);
+
+	int (*initialize_save_keys)(struct BakeableSystem *bsys, int *avg_keys);
+
+	void (*save_key_from_dynamics)(struct BakeableSystem *bsys, int index, float cfra, struct BakeKey *key, float *ckey);
+	void (*convert_dynamic_key)(struct BakeableSystem *bsys, void *dynkey, struct BakeKey *key, float *ckey);
+	void (*convert_bake_key)(struct BakeableSystem *bsys, struct BakeKey *key, float *ckey, void *dynkey);
+	void (*interpolate_customkey)(struct BakeableSystem *bsys, float *ckey1, float *ckey2, float keytime, float *ckey);
+	void (*convert_to_global_space)(struct BakeableSystem *bsys, int index, struct BakeKey *key, float *ckey);
+
+	void (*remove_set_elements)(struct BakeableSystem *bsys, int new_totbel);
+} BakeableAccess;
+
+#define BSYS_FIRST_KEY	-1
+#define BSYS_NO_KEY		0
+#define BSYS_BAKE_KEY	1
+#define BSYS_LAST_KEY	2
+
+int dynamicsbake_test();
+struct BakeableSystem *DB_find_bsys(struct ListBase *bakeable, void *system);
+struct BakeBase *DB_find_bbase(struct ListBase *bakeable, void *system);
+int DB_has_hair(struct ListBase *bakeable);
+void DB_free_bsys(struct BakeableSystem *bsys);
+void DB_free_bbase(struct BakeBase *bbase);
+void DB_copy_key(struct BakeKey *to, struct BakeKey *from);
+int DB_count_keys(struct BakeableSystem *bsys);
+struct BakeBase *DB_new_BakeBase();
+void DB_copy_BakeableSystem(struct BakeableSystem *to, struct BakeableSystem *from);
+
+int DB_get_key_at_time(struct BakeableSystem *bsys, int index, float time, struct BakeKey *key, float *ckey);
+void DB_get_key_on_path(struct BakeableSystem *bsys, int index, float path, struct BakeKey *key, float *ckey);
+void DB_save_keys(struct BakeableSystem *bsys, float cfra);
+
+void DB_init_keyloop(struct BakeableSystem *bsys);
+struct BakeKey *DB_next_keyloop(struct BakeableSystem *bsys, int *bel_index);
+
+char *DB_menu_string(struct Object *ob, int for_soft);
+
+void free_cached_child_paths(struct BakeableSystem *bsys);
+void DB_free_cached_paths(struct BakeableSystem *bsys);
+void DB_cache_paths(struct BakeableSystem *bsys, float time);
+void DB_save_keys(struct BakeableSystem *bsys, float cfra);
+void DB_free_bake(struct BakeableSystem *bsys);
+
+struct ListBase *DB_get_all_systems_to_bake();
+struct ListBase *DB_get_all_autobake_systems();
+void DB_unified_bake_cb(void *arg1, void *arg2);
+void DB_single_bake_cb(void *bsys, void *arg2);
+void DB_unified_bake(struct ListBase *bakelist, int from_cfra, int autobake);
+
+struct BakeBase *DB_psys_to_BakeBase(struct Object *ob, struct ParticleSystem *psys);
+struct BakeBase *DB_soft_to_BakeBase(struct Object *ob, struct SoftBody *sb);
+struct BakeableAccess *access_BakeableSystem(struct BakeableSystem *bsys);
+#endif
\ No newline at end of file

Modified: branches/particles/source/blender/blenkernel/BKE_global.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_global.h	2007-08-14 18:06:18 UTC (rev 11601)
+++ branches/particles/source/blender/blenkernel/BKE_global.h	2007-08-14 20:18:30 UTC (rev 11602)
@@ -190,7 +190,7 @@
 
 #define G_DRAWSHARP     (1 << 28) /* draw edges with the sharp flag */
 #define G_SCULPTMODE    (1 << 29)
-#define G_PARTICLEEDIT	(1 << 30)
+#define G_BAKEEDIT	(1 << 30)
 
 /* G.fileflags */
 

Modified: branches/particles/source/blender/blenkernel/BKE_object.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_object.h	2007-08-14 18:06:18 UTC (rev 11601)
+++ branches/particles/source/blender/blenkernel/BKE_object.h	2007-08-14 20:18:30 UTC (rev 11602)
@@ -79,6 +79,7 @@
 void make_local_object(struct Object *ob);
 void set_mblur_offs(float blur);
 void set_field_offs(float field);
+void set_bake_offs(float bake);
 void disable_speed_curve(int val);
 
 float bsystem_time(struct Object *ob, struct Object *par, float cfra, float ofs);

Modified: branches/particles/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/particles/source/blender/blenkernel/BKE_particle.h	2007-08-14 18:06:18 UTC (rev 11601)
+++ branches/particles/source/blender/blenkernel/BKE_particle.h	2007-08-14 20:18:30 UTC (rev 11602)
@@ -12,17 +12,21 @@
 struct Group;
 struct ListBase;
 
-typedef struct ParticleTreeNode{
-	struct ParticleTreeNode *left, *right;
+struct BakeKey;
+struct IpoCurve;
+struct ModifierData;
+
+typedef struct KDTreeNode{
+	struct KDTreeNode *left, *right;
 	float co[3];
 	int nbr;
 	short d;
-} ParticleTreeNode;
+} KDTreeNode;
 
-typedef struct ParticleTreeNearest {
+typedef struct KDTreeNearest {
 	int num;
 	float dist, co[3];
-}ParticleTreeNearest;
+} KDTreeNearest;
 
 typedef struct ParticleEffectorCache {
 	struct ParticleEffectorCache *next, *prev;
@@ -37,7 +41,7 @@
 	float *face_minmax;
 	float *vert_cos;
 	/* precalculated variables for boids */
-	struct ParticleTreeNode *tree;
+	struct KDTreeNode *tree;
 
 	short type, psys_nbr;
 	
@@ -61,35 +65,6 @@
 	float length, clump, kink;		/* used in path caching */
 } ParticleTexture;
 
-typedef struct ParticleUndo {
-	struct ParticleUndo *next, *prev;
-	struct ParticleKey **keys;
-	struct ParticleData *particles;
-	ParticleTreeNode *emitter_field;
-	float **lengths;
-	float **wcos;
-	float *emitter_cosnos;
-	int totpart, totpoint;
-	char name[64];
-} ParticleUndo;
-
-typedef struct ParticleEditPath{
-	ListBase undo;
-	ParticleUndo *curundo;
-	ParticleTreeNode *emitter_field;
-	float **lengths;
-	float *emitter_cosnos;
-	float **world_cos;
-	float sta, end, life, size; /* average values for selected particles */
-	float o_sta, o_end, o_life, o_size;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list