1 /* 2 * This program is free software; you can redistribute it and/or 3 * modify it under the terms of the GNU General Public License 4 * as published by the Free Software Foundation; either version 2 5 * of the License, or (at your option) any later version. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software Foundation, 14 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 15 * 16 * The Original Code is Copyright (C) 2007 by Janne Karhu. 17 * All rights reserved. 18 */ 19 20 /** \file 21 * \ingroup DNA 22 */ 23 24 #pragma once 25 26 #include "DNA_ID.h" 27 #include "DNA_boid_types.h" 28 #include "DNA_defs.h" 29 30 struct AnimData; 31 32 typedef struct HairKey { 33 /** Location of hair vertex. */ 34 float co[3]; 35 /** Time along hair, default 0-100. */ 36 float time; 37 /** Softbody weight. */ 38 float weight; 39 /** Saved particled edit mode flags. */ 40 short editflag; 41 char _pad[2]; 42 float world_co[3]; 43 } HairKey; 44 45 typedef struct ParticleKey { /* when changed update size of struct to copy_particleKey()!! */ 46 /** Location. */ 47 float co[3]; 48 /** Velocity. */ 49 float vel[3]; 50 /** Rotation quaternion. */ 51 float rot[4]; 52 /** Angular velocity. */ 53 float ave[3]; 54 /** When this key happens. */ 55 float time; 56 } ParticleKey; 57 58 typedef struct BoidParticle { 59 struct Object *ground; 60 struct BoidData data; 61 float gravity[3]; 62 float wander[3]; 63 float rt; 64 } BoidParticle; 65 66 typedef struct ParticleSpring { 67 float rest_length; 68 unsigned int particle_index[2], delete_flag; 69 } ParticleSpring; 70 71 /* Child particles are created around or between parent particles */ 72 typedef struct ChildParticle { 73 /** Num is face index on the final derived mesh. */ 74 int num, parent; 75 /** Nearest particles to the child, used for the interpolation. */ 76 int pa[4]; 77 /** Interpolation weights for the above particles. */ 78 float w[4]; 79 /** Face vertex weights and offset. */ 80 float fuv[4], foffset; 81 float rt; 82 } ChildParticle; 83 84 typedef struct ParticleTarget { 85 struct ParticleTarget *next, *prev; 86 struct Object *ob; 87 int psys; 88 short flag, mode; 89 float time, duration; 90 } ParticleTarget; 91 92 typedef struct ParticleDupliWeight { 93 struct ParticleDupliWeight *next, *prev; 94 struct Object *ob; 95 short count; 96 short flag; 97 /** Only updated on file save and used on file load. */ 98 short index, rt; 99 } ParticleDupliWeight; 100 101 typedef struct ParticleData { 102 /** Current global coordinates. */ 103 ParticleKey state; 104 105 /** Previous state. */ 106 ParticleKey prev_state; 107 108 /** Hair vertices. */ 109 HairKey *hair; 110 111 /** Keyed keys. */ 112 ParticleKey *keys; 113 114 /** Boids data. */ 115 BoidParticle *boid; 116 117 /** Amount of hair or keyed key.s*/ 118 int totkey; 119 120 /** Dietime is not necessarily time+lifetime as. */ 121 float time, lifetime; 122 /** Particles can die unnaturally (collision). */ 123 float dietime; 124 125 /** 126 * WARNING! Those two indices, 127 * when not affected to vertices, are for !!! TESSELLATED FACES !!!, not POLYGONS! 128 */ 129 /** Index to vert/edge/face. */ 130 int num; 131 /** Index to derived mesh data (face) to avoid slow lookups. */ 132 int num_dmcache; 133 134 /** Coordinates on face/edge number "num" and depth along. */ 135 float fuv[4], foffset; 136 /* face normal for volume emission. */ 137 138 /** Size and multiplier so that we can update size when ever. */ 139 float size; 140 141 /** Density of sph particle. */ 142 float sphdensity; 143 char _pad[4]; 144 145 int hair_index; 146 short flag; 147 /** The life state of a particle. */ 148 short alive; 149 } ParticleData; 150 151 typedef struct SPHFluidSettings { 152 /*Particle Fluid*/ 153 float radius, spring_k, rest_length; 154 float plasticity_constant, yield_ratio; 155 float plasticity_balance, yield_balance; 156 float viscosity_omega, viscosity_beta; 157 float stiffness_k, stiffness_knear, rest_density; 158 float buoyancy; 159 int flag, spring_frames; 160 short solver; 161 char _pad[6]; 162 } SPHFluidSettings; 163 164 /* fluid->flag */ 165 #define SPH_VISCOELASTIC_SPRINGS 1 166 #define SPH_CURRENT_REST_LENGTH 2 167 #define SPH_FAC_REPULSION 4 168 #define SPH_FAC_DENSITY 8 169 #define SPH_FAC_RADIUS 16 170 #define SPH_FAC_VISCOSITY 32 171 #define SPH_FAC_REST_LENGTH 64 172 173 /* fluid->solver (numerical ID field, not bitfield) */ 174 #define SPH_SOLVER_DDR 0 175 #define SPH_SOLVER_CLASSICAL 1 176 177 typedef struct ParticleSettings { 178 ID id; 179 struct AnimData *adt; 180 181 struct BoidSettings *boids; 182 struct SPHFluidSettings *fluid; 183 184 struct EffectorWeights *effector_weights; 185 struct Collection *collision_group; 186 187 int flag, rt; 188 short type, from, distr, texact; 189 /* physics modes */ 190 short phystype, rotmode, avemode, reactevent; 191 int draw; 192 float draw_size; 193 short draw_as, childtype; 194 char _pad2[4]; 195 short ren_as, subframes, draw_col; 196 /* number of path segments, power of 2 except */ 197 short draw_step, ren_step; 198 short hair_step, keys_step; 199 200 /* adaptive path rendering */ 201 short adapt_angle, adapt_pix; 202 203 short disp, omat, interpolation, integrator; 204 short rotfrom DNA_DEPRECATED; 205 short kink, kink_axis; 206 207 /* billboards */ 208 short bb_align, bb_uv_split, bb_anim, bb_split_offset DNA_DEPRECATED; 209 float bb_tilt, bb_rand_tilt, bb_offset[2], bb_size[2], bb_vel_head, bb_vel_tail DNA_DEPRECATED; 210 211 /* draw color */ 212 float color_vec_max; 213 214 /* time and emission */ 215 float sta, end, lifetime, randlife; 216 float timetweak, courant_target; 217 float jitfac, eff_hair, grid_rand, ps_offset[1]; 218 int totpart, userjit, grid_res, effector_amount; 219 short time_flag; 220 char _pad0[6]; 221 222 /* initial velocity factors */ 223 float normfac, obfac, randfac, partfac, tanfac, tanphase, reactfac; 224 float ob_vel[3]; 225 float avefac, phasefac, randrotfac, randphasefac; 226 /* physical properties */ 227 float mass, size, randsize; 228 /* global physical properties */ 229 float acc[3], dragfac, brownfac, dampfac; 230 /* length */ 231 float randlength; 232 /* children */ 233 int child_flag; 234 char _pad3[4]; 235 int child_nbr, ren_child_nbr; 236 float parents, childsize, childrandsize; 237 float childrad, childflat; 238 /* clumping */ 239 float clumpfac, clumppow; 240 /* kink */ 241 float kink_amp, kink_freq, kink_shape, kink_flat; 242 float kink_amp_clump; 243 int kink_extra_steps; 244 char _pad4[4]; 245 float kink_axis_random, kink_amp_random; 246 /* rough */ 247 float rough1, rough1_size; 248 float rough2, rough2_size, rough2_thres; 249 float rough_end, rough_end_shape; 250 /* length */ 251 float clength, clength_thres; 252 /* parting */ 253 float parting_fac; 254 float parting_min, parting_max; 255 /* branching */ 256 float branch_thres; 257 /* drawing stuff */ 258 float draw_line[2]; 259 float path_start, path_end; 260 int trail_count; 261 /* keyed particles */ 262 int keyed_loops; 263 struct CurveMapping *clumpcurve; 264 struct CurveMapping *roughcurve; 265 float clump_noise_size; 266 267 /* hair dynamics */ 268 float bending_random; 269 270 /** MAX_MTEX. */ 271 struct MTex *mtex[18]; 272 273 struct Collection *instance_collection; 274 struct ListBase instance_weights; 275 struct Collection *force_group DNA_DEPRECATED; /* deprecated */ 276 struct Object *instance_object; 277 struct Object *bb_ob; 278 /** Old animation system, deprecated for 2.5. */ 279 struct Ipo *ipo DNA_DEPRECATED; 280 struct PartDeflect *pd; 281 struct PartDeflect *pd2; 282 283 /* modified dm support */ 284 short use_modifier_stack; 285 char _pad5[2]; 286 287 /* hair shape */ 288 short shape_flag; 289 char _pad6[2]; 290 291 float twist; 292 char _pad8[4]; 293 294 /* hair thickness shape */ 295 float shape; 296 float rad_root, rad_tip, rad_scale; 297 298 struct CurveMapping *twistcurve; 299 void *_pad7; 300 } ParticleSettings; 301 302 typedef struct ParticleSystem { 303 /* note1: make sure all (run-time) are NULL's in 'copy_particlesystem' XXX, 304 * this function is no more! - need to investigate. */ 305 306 /* note2: make sure any uses of this struct in DNA are 307 * accounted for in 'BKE_object_copy_particlesystems'. */ 308 309 struct ParticleSystem *next, *prev; 310 311 /** Particle settings. */ 312 ParticleSettings *part; 313 314 /** (parent) particles. */ 315 ParticleData *particles; 316 /** Child particles. */ 317 ChildParticle *child; 318 319 /** Particle editmode (runtime). */ 320 struct PTCacheEdit *edit; 321 /** Free callback. */ 322 void (*free_edit)(struct PTCacheEdit *edit); 323 324 /** Path cache (runtime). */ 325 struct ParticleCacheKey **pathcache; 326 /** Child cache (runtime). */ 327 struct ParticleCacheKey **childcache; 328 /** Buffers for the above. */ 329 ListBase pathcachebufs, childcachebufs; 330 331 /** Cloth simulation for hair. */ 332 struct ClothModifierData *clmd; 333 /** Input/output for cloth simulation. */ 334 struct Mesh *hair_in_mesh, *hair_out_mesh; 335 336 struct Object *target_ob; 337 338 /** Run-time only lattice deformation data. */ 339 struct LatticeDeformData *lattice_deform_data; 340 341 /** Particles from global space -> parent space. */ 342 struct Object *parent; 343 344 /** Used for keyed and boid physics. */ 345 struct ListBase targets; 346 347 /** Particle system name, MAX_NAME. */ 348 char name[64]; 349 350 /** Used for instancing. */ 351 float imat[4][4]; 352 float cfra, tree_frame, bvhtree_frame; 353 int seed, child_seed; 354 int flag, totpart, totunexist, totchild, totcached, totchildcache; 355 /* NOTE: Recalc is one of ID_RECALC_PSYS_ALL flags. 356 * 357 * TODO(sergey): Use part->id.recalc instead of this duplicated flag 358 * somehow. */ 359 int recalc; 360 short target_psys, totkeyed, bakespace; 361 char _pad1[6]; 362 363 /** Billboard uv name, MAX_CUSTOMDATA_LAYER_NAME. */ 364 char bb_uvname[3][64] DNA_DEPRECATED; 365 366 /* if you change these remember to update array lengths to PSYS_TOT_VG! */ 367 /** Vertex groups, 0==disable, 1==starting index. */ 368 short vgroup[13], vg_neg, rt3; 369 char _pad[6]; 370 371 /* point cache */ 372 struct PointCache *pointcache; 373 struct ListBase ptcaches; 374 375 struct ListBase *effectors; 376 377 ParticleSpring *fluid_springs; 378 int tot_fluidsprings, alloc_fluidsprings; 379 380 /** Used for interactions with self and other systems. */ 381 struct KDTree_3d *tree; 382 /** Used for interactions with self and other systems. */ 383 struct BVHTree *bvhtree; 384 385 struct ParticleDrawData *pdd; 386 387 /** Current time step, as a fraction of a frame. */ 388 float dt_frac; 389 /** Influence of the lattice modifier. */ 390 float lattice_strength; 391 392 void *batch_cache; 393 394 /* Set by dependency graph's copy-on-write, allows to quickly go 395 * from evaluated particle system to original one. 396 * 397 * Original system will have this set to NULL. 398 * 399 * Use psys_orig_get() function to access, 400 */ 401 struct ParticleSystem *orig_psys; 402 } ParticleSystem; 403 404 typedef enum eParticleDrawFlag { 405 PART_DRAW_VEL = (1 << 0), 406 PART_DRAW_GLOBAL_OB = (1 << 1), 407 PART_DRAW_SIZE = (1 << 2), 408 #ifdef DNA_DEPRECATED_ALLOW 409 /** Render emitter as well. */ 410 PART_DRAW_EMITTER = (1 << 3), /* DEPRECATED */ 411 #endif 412 PART_DRAW_HEALTH = (1 << 4), 413 PART_ABS_PATH_TIME = (1 << 5), 414 PART_DRAW_COUNT_GR = (1 << 6), 415 /* PART_DRAW_BB_LOCK = (1 << 7), */ /* DEPRECATED */ 416 /* used with billboards */ /* DEPRECATED */ 417 PART_DRAW_ROTATE_OB = (1 << 7), /* used with instance object/collection */ 418 PART_DRAW_PARENT = (1 << 8), 419 PART_DRAW_NUM = (1 << 9), 420 PART_DRAW_RAND_GR = (1 << 10), 421 PART_DRAW_REN_ADAPT = (1 << 11), 422 PART_DRAW_VEL_LENGTH = (1 << 12), 423 PART_DRAW_MAT_COL = (1 << 13), /* deprecated, but used in do_versions */ 424 PART_DRAW_WHOLE_GR = (1 << 14), 425 PART_DRAW_REN_STRAND = (1 << 15), 426 PART_DRAW_NO_SCALE_OB = (1 << 16), /* used with instance object/collection */ 427 PART_DRAW_GUIDE_HAIRS = (1 << 17), 428 PART_DRAW_HAIR_GRID = (1 << 18), 429 } eParticleDrawFlag; 430 431 /* part->type 432 * Hair is always baked static in object/geometry space. 433 * Other types (normal particles) are in global space and not static baked. */ 434 enum { 435 PART_EMITTER = 0, 436 /* REACTOR type currently unused */ 437 /* PART_REACTOR = 1, */ 438 PART_HAIR = 2, 439 PART_FLUID = 3, /* deprecated (belonged to elbeem) */ 440 PART_FLUID_FLIP = 4, 441 PART_FLUID_SPRAY = 5, 442 PART_FLUID_BUBBLE = 6, 443 PART_FLUID_FOAM = 7, 444 PART_FLUID_TRACER = 8, 445 PART_FLUID_SPRAYFOAM = 9, 446 PART_FLUID_SPRAYBUBBLE = 10, 447 PART_FLUID_FOAMBUBBLE = 11, 448 PART_FLUID_SPRAYFOAMBUBBLE = 12, 449 }; 450 451 /* Mirroring Mantaflow particle types from particle.h (Mantaflow header). */ 452 enum { 453 /* PARTICLE_TYPE_NONE = (0 << 0), */ /* UNUSED */ 454 /* PARTICLE_TYPE_NEW = (1 << 0), */ /* UNUSED */ 455 PARTICLE_TYPE_SPRAY = (1 << 1), 456 PARTICLE_TYPE_BUBBLE = (1 << 2), 457 PARTICLE_TYPE_FOAM = (1 << 3), 458 PARTICLE_TYPE_TRACER = (1 << 4), 459 PARTICLE_TYPE_DELETE = (1 << 10), 460 /* PARTICLE_TYPE_INVALID = (1 << 30), */ /* UNUSED */ 461 }; 462 463 /* part->flag */ 464 #define PART_REACT_STA_END 1 465 #define PART_REACT_MULTIPLE 2 466 467 //#define PART_LOOP 4 /* not used anymore */ 468 /* for dopesheet */ 469 #define PART_DS_EXPAND 8 470 471 #define PART_HAIR_REGROW 16 /* regrow hair for each frame */ 472 473 #define PART_UNBORN 32 /*show unborn particles*/ 474 #define PART_DIED 64 /*show died particles*/ 475 476 #define PART_TRAND 128 477 #define PART_EDISTR 256 /* particle/face from face areas */ 478 479 #define PART_ROTATIONS 512 /* calculate particle rotations (and store them in pointcache) */ 480 #define PART_DIE_ON_COL (1 << 12) 481 #define PART_SIZE_DEFL (1 << 13) /* swept sphere deflections */ 482 #define PART_ROT_DYN (1 << 14) /* dynamic rotation */ 483 #define PART_SIZEMASS (1 << 16) 484 485 #define PART_HIDE_ADVANCED_HAIR (1 << 15) 486 487 //#define PART_ABS_TIME (1 << 17) 488 //#define PART_GLOB_TIME (1 << 18) 489 490 #define PART_BOIDS_2D (1 << 19) 491 492 //#define PART_BRANCHING (1 << 20) 493 //#define PART_ANIM_BRANCHING (1 << 21) 494 495 #define PART_HAIR_BSPLINE 1024 496 497 #define PART_GRID_HEXAGONAL (1 << 24) 498 #define PART_GRID_INVERT (1 << 26) 499 500 #define PART_CHILD_EFFECT (1 << 27) 501 #define PART_CHILD_LONG_HAIR (1 << 28) 502 /* #define PART_CHILD_RENDER (1 << 29) */ /*UNUSED*/ 503 #define PART_CHILD_GUIDE (1 << 30) 504 505 #define PART_SELF_EFFECT (1 << 22) 506 507 /* part->from */ 508 #define PART_FROM_VERT 0 509 #define PART_FROM_FACE 1 510 #define PART_FROM_VOLUME 2 511 /* #define PART_FROM_PARTICLE 3 deprecated! */ 512 #define PART_FROM_CHILD 4 513 514 /* part->distr */ 515 #define PART_DISTR_JIT 0 516 #define PART_DISTR_RAND 1 517 #define PART_DISTR_GRID 2 518 519 /* part->phystype */ 520 #define PART_PHYS_NO 0 521 #define PART_PHYS_NEWTON 1 522 #define PART_PHYS_KEYED 2 523 #define PART_PHYS_BOIDS 3 524 #define PART_PHYS_FLUID 4 525 526 /* part->kink */ 527 typedef enum eParticleKink { 528 PART_KINK_NO = 0, 529 PART_KINK_CURL = 1, 530 PART_KINK_RADIAL = 2, 531 PART_KINK_WAVE = 3, 532 PART_KINK_BRAID = 4, 533 PART_KINK_SPIRAL = 5, 534 } eParticleKink; 535 536 /* part->child_flag */ 537 typedef enum eParticleChildFlag { 538 PART_CHILD_USE_CLUMP_NOISE = (1 << 0), 539 PART_CHILD_USE_CLUMP_CURVE = (1 << 1), 540 PART_CHILD_USE_ROUGH_CURVE = (1 << 2), 541 PART_CHILD_USE_TWIST_CURVE = (1 << 3), 542 } eParticleChildFlag; 543 544 /* part->shape_flag */ 545 typedef enum eParticleShapeFlag { 546 PART_SHAPE_CLOSE_TIP = (1 << 0), 547 } eParticleShapeFlag; 548 549 /* part->draw_col */ 550 #define PART_DRAW_COL_NONE 0 551 #define PART_DRAW_COL_MAT 1 552 #define PART_DRAW_COL_VEL 2 553 #define PART_DRAW_COL_ACC 3 554 555 /* part->time_flag */ 556 #define PART_TIME_AUTOSF 1 /* Automatic subframes */ 557 558 /* part->draw_as */ 559 /* part->ren_as*/ 560 #define PART_DRAW_NOT 0 561 #define PART_DRAW_DOT 1 562 #define PART_DRAW_HALO 1 563 #define PART_DRAW_CIRC 2 564 #define PART_DRAW_CROSS 3 565 #define PART_DRAW_AXIS 4 566 #define PART_DRAW_LINE 5 567 #define PART_DRAW_PATH 6 568 #define PART_DRAW_OB 7 569 #define PART_DRAW_GR 8 570 #define PART_DRAW_BB 9 /* deprecated */ 571 #define PART_DRAW_REND 10 572 573 /* part->integrator */ 574 #define PART_INT_EULER 0 575 #define PART_INT_MIDPOINT 1 576 #define PART_INT_RK4 2 577 #define PART_INT_VERLET 3 578 579 /* part->rotmode */ 580 #define PART_ROT_NOR 1 581 #define PART_ROT_VEL 2 582 #define PART_ROT_GLOB_X 3 583 #define PART_ROT_GLOB_Y 4 584 #define PART_ROT_GLOB_Z 5 585 #define PART_ROT_OB_X 6 586 #define PART_ROT_OB_Y 7 587 #define PART_ROT_OB_Z 8 588 #define PART_ROT_NOR_TAN 9 589 590 /* part->avemode */ 591 #define PART_AVE_VELOCITY 1 592 #define PART_AVE_RAND 2 593 #define PART_AVE_HORIZONTAL 3 594 #define PART_AVE_VERTICAL 4 595 #define PART_AVE_GLOBAL_X 5 596 #define PART_AVE_GLOBAL_Y 6 597 #define PART_AVE_GLOBAL_Z 7 598 599 /* part->reactevent */ 600 #define PART_EVENT_DEATH 0 601 #define PART_EVENT_COLLIDE 1 602 #define PART_EVENT_NEAR 2 603 604 /* part->childtype */ 605 #define PART_CHILD_PARTICLES 1 606 #define PART_CHILD_FACES 2 607 608 /* psys->flag */ 609 #define PSYS_CURRENT 1 610 #define PSYS_GLOBAL_HAIR 2 611 #define PSYS_HAIR_DYNAMICS 4 612 #define PSYS_KEYED_TIMING 8 613 //#define PSYS_ENABLED 16 /* deprecated */ 614 #define PSYS_HAIR_UPDATED 32 /* signal for updating hair particle mode */ 615 /* #define PSYS_DRAWING 64 */ /* deprecated */ 616 /* #define PSYS_USE_IMAT 128 */ /* deprecated */ 617 #define PSYS_DELETE 256 /* remove particlesystem as soon as possible */ 618 #define PSYS_HAIR_DONE 512 619 #define PSYS_KEYED 1024 620 #define PSYS_EDITED 2048 621 //#define PSYS_PROTECT_CACHE 4096 /* deprecated */ 622 #define PSYS_DISABLED 8192 623 #define PSYS_OB_ANIM_RESTORE 16384 /* runtime flag */ 624 #define PSYS_SHARED_CACHES 32768 625 626 /* pars->flag */ 627 #define PARS_UNEXIST 1 628 #define PARS_NO_DISP 2 629 //#define PARS_STICKY 4 /* deprecated */ 630 #define PARS_REKEY 8 631 632 /* pars->alive */ 633 //#define PARS_KILLED 0 /* deprecated */ 634 #define PARS_DEAD 1 635 #define PARS_UNBORN 2 636 #define PARS_ALIVE 3 637 #define PARS_DYING 4 638 639 /* ParticleDupliWeight->flag */ 640 #define PART_DUPLIW_CURRENT 1 641 642 /* psys->vg */ 643 #define PSYS_TOT_VG 13 644 645 #define PSYS_VG_DENSITY 0 646 #define PSYS_VG_VEL 1 647 #define PSYS_VG_LENGTH 2 648 #define PSYS_VG_CLUMP 3 649 #define PSYS_VG_KINK 4 650 #define PSYS_VG_ROUGH1 5 651 #define PSYS_VG_ROUGH2 6 652 #define PSYS_VG_ROUGHE 7 653 #define PSYS_VG_SIZE 8 654 #define PSYS_VG_TAN 9 655 #define PSYS_VG_ROT 10 656 #define PSYS_VG_EFFECTOR 11 657 #define PSYS_VG_TWIST 12 658 659 /* ParticleTarget->flag */ 660 #define PTARGET_CURRENT 1 661 #define PTARGET_VALID 2 662 663 /* ParticleTarget->mode */ 664 #define PTARGET_MODE_NEUTRAL 0 665 #define PTARGET_MODE_FRIEND 1 666 #define PTARGET_MODE_ENEMY 2 667 668 /* mapto */ 669 typedef enum eParticleTextureInfluence { 670 /* init */ 671 PAMAP_TIME = (1 << 0), /* emission time */ 672 PAMAP_LIFE = (1 << 1), /* life time */ 673 PAMAP_DENS = (1 << 2), /* density */ 674 PAMAP_SIZE = (1 << 3), /* physical size */ 675 PAMAP_INIT = (PAMAP_TIME | PAMAP_LIFE | PAMAP_DENS | PAMAP_SIZE), 676 /* reset */ 677 PAMAP_IVEL = (1 << 5), /* initial velocity */ 678 /* physics */ 679 PAMAP_FIELD = (1 << 6), /* force fields */ 680 PAMAP_GRAVITY = (1 << 10), 681 PAMAP_DAMP = (1 << 11), 682 PAMAP_PHYSICS = (PAMAP_FIELD | PAMAP_GRAVITY | PAMAP_DAMP), 683 /* children */ 684 PAMAP_CLUMP = (1 << 7), 685 PAMAP_KINK_FREQ = (1 << 8), 686 PAMAP_KINK_AMP = (1 << 12), 687 PAMAP_ROUGH = (1 << 9), 688 PAMAP_LENGTH = (1 << 4), 689 PAMAP_TWIST = (1 << 13), 690 PAMAP_CHILD = (PAMAP_CLUMP | PAMAP_KINK_FREQ | PAMAP_KINK_AMP | PAMAP_ROUGH | PAMAP_LENGTH | 691 PAMAP_TWIST), 692 } eParticleTextureInfluence; 693