Preferences: remove author field
[blender.git] / source / blender / makesdna / DNA_particle_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2007 by Janne Karhu.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_particle_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_PARTICLE_TYPES_H__
33 #define __DNA_PARTICLE_TYPES_H__
34
35 #include "DNA_defs.h"
36 #include "DNA_ID.h"
37 #include "DNA_boid_types.h"
38
39 struct AnimData;
40
41 typedef struct HairKey {
42         /** Location of hair vertex. */
43         float co[3];
44         /** Time along hair, default 0-100. */
45         float time;
46         /** Softbody weight. */
47         float weight;
48         /** Saved particled edit mode flags. */
49         short editflag;
50         short pad;
51         float world_co[3];
52 } HairKey;
53
54 typedef struct ParticleKey {    /* when changed update size of struct to copy_particleKey()!! */
55         /** Location. */
56         float co[3];
57         /** Velocity. */
58         float vel[3];
59         /** Rotation quaternion. */
60         float rot[4];
61         /** Angular velocity. */
62         float ave[3];
63         /** When this key happens. */
64         float time;
65 } ParticleKey;
66
67 typedef struct BoidParticle {
68         struct Object *ground;
69         struct BoidData data;
70         float gravity[3];
71         float wander[3];
72         float rt;
73 } BoidParticle;
74
75 typedef struct ParticleSpring {
76         float rest_length;
77         unsigned int particle_index[2], delete_flag;
78 } ParticleSpring;
79
80 /* Child particles are created around or between parent particles */
81 typedef struct ChildParticle {
82         /** Num is face index on the final derived mesh. */
83         int num, parent;
84         /** Nearest particles to the child, used for the interpolation. */
85         int pa[4];
86         /** Interpolation weights for the above particles. */
87         float w[4];
88         /** Face vertex weights and offset. */
89         float fuv[4], foffset;
90         float rt;
91 } ChildParticle;
92
93 typedef struct ParticleTarget {
94         struct ParticleTarget *next, *prev;
95         struct Object *ob;
96         int psys;
97         short flag, mode;
98         float time, duration;
99 } ParticleTarget;
100
101 typedef struct ParticleDupliWeight {
102         struct ParticleDupliWeight *next, *prev;
103         struct Object *ob;
104         short count;
105         short flag;
106         /** Only updated on file save and used on file load. */
107         short index, rt;
108 } ParticleDupliWeight;
109
110 typedef struct ParticleData {
111         /** Current global coordinates. */
112         ParticleKey state;
113
114         /** Previous state. */
115         ParticleKey prev_state;
116
117         /** Hair vertices. */
118         HairKey *hair;
119
120         /** Keyed keys. */
121         ParticleKey *keys;
122
123         /** Boids data. */
124         BoidParticle *boid;
125
126         /** Amount of hair or keyed key.s*/
127         int totkey;
128
129         /** Dietime is not necessarily time+lifetime as. */
130         float time, lifetime;
131         /** Particles can die unnaturally (collision). */
132         float dietime;
133
134         /**
135          * WARNING! Those two indices,
136          * when not affected to vertices, are for !!! TESSELLATED FACES !!!, not POLYGONS!
137          */
138         /** Index to vert/edge/face. */
139         int num;
140         /** Index to derived mesh data (face) to avoid slow lookups. */
141         int num_dmcache;
142
143         /** Coordinates on face/edge number "num" and depth alon.g*/
144         float fuv[4], foffset;
145                                                         /* face normal for volume emission. */
146
147         /** Size and multiplier so that we can update size when ever. */
148         float size;
149
150         /** Density of sph particle. */
151         float sphdensity;
152         int pad;
153
154         int hair_index;
155         short flag;
156         /** The life state of a particle. */
157         short alive;
158 } ParticleData;
159
160 typedef struct SPHFluidSettings {
161         /*Particle Fluid*/
162         float radius, spring_k, rest_length;
163         float plasticity_constant, yield_ratio;
164         float plasticity_balance, yield_balance;
165         float viscosity_omega, viscosity_beta;
166         float stiffness_k, stiffness_knear, rest_density;
167         float buoyancy;
168         int flag, spring_frames;
169         short solver;
170         short pad[3];
171 } SPHFluidSettings;
172
173 /* fluid->flag */
174 #define SPH_VISCOELASTIC_SPRINGS        1
175 #define SPH_CURRENT_REST_LENGTH         2
176 #define SPH_FAC_REPULSION                       4
177 #define SPH_FAC_DENSITY                         8
178 #define SPH_FAC_RADIUS                          16
179 #define SPH_FAC_VISCOSITY                       32
180 #define SPH_FAC_REST_LENGTH                     64
181
182 /* fluid->solver (numerical ID field, not bitfield) */
183 #define SPH_SOLVER_DDR                                  0
184 #define SPH_SOLVER_CLASSICAL                    1
185
186 typedef struct ParticleSettings {
187         ID id;
188         struct AnimData *adt;
189
190         struct BoidSettings *boids;
191         struct SPHFluidSettings *fluid;
192
193         struct EffectorWeights *effector_weights;
194         struct Collection *collision_group;
195
196         int flag, rt;
197         short type, from, distr, texact;
198         /* physics modes */
199         short phystype, rotmode, avemode, reactevent;
200         int draw;
201         float draw_size;
202         short draw_as, pad1, childtype, pad2;
203         short ren_as, subframes, draw_col;
204         /* number of path segments, power of 2 except */
205         short draw_step, ren_step;
206         short hair_step, keys_step;
207
208         /* adaptive path rendering */
209         short adapt_angle, adapt_pix;
210
211         short disp, omat, interpolation, integrator;
212         short rotfrom DNA_DEPRECATED;
213         short kink, kink_axis;
214
215         /* billboards */
216         short bb_align, bb_uv_split, bb_anim, bb_split_offset;
217         float bb_tilt, bb_rand_tilt, bb_offset[2], bb_size[2], bb_vel_head, bb_vel_tail;
218
219         /* draw color */
220         float color_vec_max;
221
222         /* time and emission */
223         float sta, end, lifetime, randlife;
224         float timetweak, courant_target;
225         float jitfac, eff_hair, grid_rand, ps_offset[1];
226         int totpart, userjit, grid_res, effector_amount;
227         short time_flag, time_pad[3];
228
229         /* initial velocity factors */
230         float normfac, obfac, randfac, partfac, tanfac, tanphase, reactfac;
231         float ob_vel[3];
232         float avefac, phasefac, randrotfac, randphasefac;
233         /* physical properties */
234         float mass, size, randsize;
235         /* global physical properties */
236         float acc[3], dragfac, brownfac, dampfac;
237         /* length */
238         float randlength;
239         /* children */
240         int child_flag;
241         int pad3;
242         int child_nbr, ren_child_nbr;
243         float parents, childsize, childrandsize;
244         float childrad, childflat;
245         /* clumping */
246         float clumpfac, clumppow;
247         /* kink */
248         float kink_amp, kink_freq, kink_shape, kink_flat;
249         float kink_amp_clump;
250         int kink_extra_steps, pad4;
251         float kink_axis_random, kink_amp_random;
252         /* rough */
253         float rough1, rough1_size;
254         float rough2, rough2_size, rough2_thres;
255         float rough_end, rough_end_shape;
256         /* length */
257         float clength, clength_thres;
258         /* parting */
259         float parting_fac;
260         float parting_min, parting_max;
261         /* branching */
262         float branch_thres;
263         /* drawing stuff */
264         float draw_line[2];
265         float path_start, path_end;
266         int trail_count;
267         /* keyed particles */
268         int keyed_loops;
269         struct CurveMapping *clumpcurve;
270         struct CurveMapping *roughcurve;
271         float clump_noise_size;
272
273         /* hair dynamics */
274         float bending_random;
275
276         /** MAX_MTEX. */
277         struct MTex *mtex[18];
278
279         struct Collection *dup_group;
280         struct ListBase dupliweights;
281         struct Collection *eff_group  DNA_DEPRECATED;           // deprecated
282         struct Object *dup_ob;
283         struct Object *bb_ob;
284         /** Old animation system, deprecated for 2.5. */
285         struct Ipo *ipo  DNA_DEPRECATED;
286         struct PartDeflect *pd;
287         struct PartDeflect *pd2;
288
289         /* modified dm support */
290         short use_modifier_stack;
291         short pad5;
292
293         /* hair shape */
294         short shape_flag;
295         short pad6;
296
297         float twist, pad8;
298
299         /* hair thickness shape */
300         float shape;
301         float rad_root, rad_tip, rad_scale;
302
303         struct CurveMapping *twistcurve;
304         void *pad7;
305 } ParticleSettings;
306
307 typedef struct ParticleSystem {
308         /* note1: make sure all (runtime) are NULL's in 'copy_particlesystem' XXX, this function is no more! - need to invstigate */
309         /* note2: make sure any uses of this struct in DNA are accounted for in 'BKE_object_copy_particlesystems' */
310
311         struct ParticleSystem *next, *prev;
312
313         /** Particle settings. */
314         ParticleSettings *part;
315
316         /** (parent) particles. */
317         ParticleData *particles;
318         /** Child particles. */
319         ChildParticle *child;
320
321         /** Particle editmode (runtime). */
322         struct PTCacheEdit *edit;
323         /** Free callback. */
324         void (*free_edit)(struct PTCacheEdit *edit);
325
326         /** Path cache (runtime). */
327         struct ParticleCacheKey **pathcache;
328         /** Child cache (runtime). */
329         struct ParticleCacheKey **childcache;
330         /** Buffers for the above. */
331         ListBase pathcachebufs, childcachebufs;
332
333         /** Cloth simulation for hair. */
334         struct ClothModifierData *clmd;
335         /** Input/output for cloth simulation. */
336         struct Mesh *hair_in_mesh, *hair_out_mesh;
337
338         struct Object *target_ob;
339
340         /** Run-time only lattice deformation data. */
341         struct LatticeDeformData *lattice_deform_data;
342
343         /** Particles from global space -> parent space. */
344         struct Object *parent;
345
346         /** Used for keyed and boid physics. */
347         struct ListBase targets;
348
349         /** Particle system name, MAX_NAME. */
350         char name[64];
351
352         /** Used for duplicators. */
353         float imat[4][4];
354         float cfra, tree_frame, bvhtree_frame;
355         int seed, child_seed;
356         int flag, totpart, totunexist, totchild, totcached, totchildcache;
357         /* NOTE: Recalc is one of ID_RECALC_PSYS_ALL flags.
358          *
359          * TODO(sergey): Use part->id.recalc instead of this duplicated flag
360          * somehow. */
361         int recalc;
362         int pad1;
363         short target_psys, totkeyed, bakespace;
364         short pad2;
365
366         /** Billboard uv name, MAX_CUSTOMDATA_LAYER_NAME. */
367         char bb_uvname[3][64];
368
369         /* if you change these remember to update array lengths to PSYS_TOT_VG! */
370         /** Vertex groups, 0==disable, 1==starting index. */
371         short vgroup[13], vg_neg, rt3;
372         char pad[6];
373
374         /* point cache */
375         struct PointCache *pointcache;
376         struct ListBase ptcaches;
377
378         struct ListBase *effectors;
379
380         ParticleSpring *fluid_springs;
381         int tot_fluidsprings, alloc_fluidsprings;
382
383         /** Used for interactions with self and other systems. */
384         struct KDTree *tree;
385         /** Used for interactions with self and other systems. */
386         struct BVHTree *bvhtree;
387
388         struct ParticleDrawData *pdd;
389
390         /** Current time step, as a fraction of a frame. */
391         float dt_frac;
392         /** Influence of the lattice modifier. */
393         float lattice_strength;
394
395         void *batch_cache;
396
397         /* Set by dependency graph's copy-on-write, allows to quickly go
398          * from evaluated particle system to original one.
399          *
400          * Original system will have this set to NULL.
401          *
402          * Use psys_orig_get() function to access,
403          */
404         struct ParticleSystem *orig_psys;
405 } ParticleSystem;
406
407 typedef enum eParticleDrawFlag {
408         PART_DRAW_VEL           = (1 << 0),
409         PART_DRAW_GLOBAL_OB         = (1 << 1),
410         PART_DRAW_SIZE          = (1 << 2),
411 #ifdef DNA_DEPRECATED
412         PART_DRAW_EMITTER       = (1 << 3),  /* render emitter also */ /* DEPRECATED */
413 #endif
414         PART_DRAW_HEALTH        = (1 << 4),
415         PART_ABS_PATH_TIME      = (1 << 5),
416         PART_DRAW_COUNT_GR      = (1 << 6),
417         PART_DRAW_BB_LOCK       = (1 << 7), /* used with billboards */
418         PART_DRAW_ROTATE_OB     = (1 << 7), /* used with dupliobjects/groups */
419         PART_DRAW_PARENT        = (1 << 8),
420         PART_DRAW_NUM           = (1 << 9),
421         PART_DRAW_RAND_GR       = (1 << 10),
422         PART_DRAW_REN_ADAPT     = (1 << 11),
423         PART_DRAW_VEL_LENGTH    = (1 << 12),
424         PART_DRAW_MAT_COL       = (1 << 13), /* deprecated, but used in do_versions */
425         PART_DRAW_WHOLE_GR      = (1 << 14),
426         PART_DRAW_REN_STRAND    = (1 << 15),
427         PART_DRAW_NO_SCALE_OB   = (1 << 16), /* used with dupliobjects/groups */
428         PART_DRAW_GUIDE_HAIRS   = (1 << 17),
429         PART_DRAW_HAIR_GRID     = (1 << 18),
430 } eParticleDrawFlag;
431
432 /* part->type */
433 /* hair is always baked static in object/geometry space */
434 /* other types (normal particles) are in global space and not static baked */
435 #define PART_EMITTER            0
436 //#define PART_REACTOR          1
437 #define PART_HAIR                       2
438 #define PART_FLUID                      3
439
440 /* part->flag */
441 #define PART_REACT_STA_END      1
442 #define PART_REACT_MULTIPLE     2
443
444 //#define PART_LOOP                     4       /* not used anymore */
445                 /* for dopesheet */
446 #define PART_DS_EXPAND          8
447
448 #define PART_HAIR_REGROW        16      /* regrow hair for each frame */
449
450 #define PART_UNBORN                     32      /*show unborn particles*/
451 #define PART_DIED                       64      /*show died particles*/
452
453 #define PART_TRAND                      128
454 #define PART_EDISTR                     256     /* particle/face from face areas */
455
456 #define PART_ROTATIONS          512     /* calculate particle rotations (and store them in pointcache) */
457 #define PART_DIE_ON_COL         (1<<12)
458 #define PART_SIZE_DEFL          (1<<13) /* swept sphere deflections */
459 #define PART_ROT_DYN            (1<<14) /* dynamic rotation */
460 #define PART_SIZEMASS           (1<<16)
461
462 #define PART_HIDE_ADVANCED_HAIR (1<<15)
463
464 //#define PART_ABS_TIME         (1<<17)
465 //#define PART_GLOB_TIME                (1<<18)
466
467 #define PART_BOIDS_2D           (1<<19)
468
469 //#define PART_BRANCHING                (1<<20)
470 //#define PART_ANIM_BRANCHING   (1<<21)
471
472 #define PART_HAIR_BSPLINE       1024
473
474 #define PART_GRID_HEXAGONAL     (1<<24)
475 #define PART_GRID_INVERT        (1<<26)
476
477 #define PART_CHILD_EFFECT               (1<<27)
478 #define PART_CHILD_LONG_HAIR    (1<<28)
479 /* #define PART_CHILD_RENDER            (1<<29) */ /*UNUSED*/
480 #define PART_CHILD_GUIDE                (1<<30)
481
482 #define PART_SELF_EFFECT        (1<<22)
483
484 /* part->from */
485 #define PART_FROM_VERT          0
486 #define PART_FROM_FACE          1
487 #define PART_FROM_VOLUME        2
488 /* #define PART_FROM_PARTICLE   3  deprecated! */
489 #define PART_FROM_CHILD         4
490
491 /* part->distr */
492 #define PART_DISTR_JIT          0
493 #define PART_DISTR_RAND         1
494 #define PART_DISTR_GRID         2
495
496 /* part->phystype */
497 #define PART_PHYS_NO            0
498 #define PART_PHYS_NEWTON        1
499 #define PART_PHYS_KEYED         2
500 #define PART_PHYS_BOIDS         3
501 #define PART_PHYS_FLUID         4
502
503 /* part->kink */
504 typedef enum eParticleKink {
505         PART_KINK_NO            = 0,
506         PART_KINK_CURL          = 1,
507         PART_KINK_RADIAL        = 2,
508         PART_KINK_WAVE          = 3,
509         PART_KINK_BRAID         = 4,
510         PART_KINK_SPIRAL        = 5,
511 } eParticleKink;
512
513 /* part->child_flag */
514 typedef enum eParticleChildFlag {
515         PART_CHILD_USE_CLUMP_NOISE  = (1<<0),
516         PART_CHILD_USE_CLUMP_CURVE  = (1<<1),
517         PART_CHILD_USE_ROUGH_CURVE  = (1<<2),
518         PART_CHILD_USE_TWIST_CURVE  = (1<<3),
519 } eParticleChildFlag;
520
521 /* part->shape_flag */
522 typedef enum eParticleShapeFlag {
523         PART_SHAPE_CLOSE_TIP     = (1<<0),
524 } eParticleShapeFlag;
525
526 /* part->draw_col */
527 #define PART_DRAW_COL_NONE              0
528 #define PART_DRAW_COL_MAT               1
529 #define PART_DRAW_COL_VEL               2
530 #define PART_DRAW_COL_ACC               3
531
532
533 /* part->simplify_flag */
534 #define PART_SIMPLIFY_ENABLE    1
535 #define PART_SIMPLIFY_VIEWPORT  2
536
537 /* part->time_flag */
538 #define PART_TIME_AUTOSF        1 /* Automatic subframes */
539
540 /* part->bb_align */
541 #define PART_BB_X               0
542 #define PART_BB_Y               1
543 #define PART_BB_Z               2
544 #define PART_BB_VIEW    3
545 #define PART_BB_VEL             4
546
547 /* part->bb_anim */
548 #define PART_BB_ANIM_NONE       0
549 #define PART_BB_ANIM_AGE        1
550 #define PART_BB_ANIM_ANGLE      2
551 #define PART_BB_ANIM_FRAME      3
552
553 /* part->bb_split_offset */
554 #define PART_BB_OFF_NONE        0
555 #define PART_BB_OFF_LINEAR      1
556 #define PART_BB_OFF_RANDOM      2
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
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
616 #define PSYS_USE_IMAT           128
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 | PAMAP_TWIST),
691 } eParticleTextureInfluence;
692
693 #endif