MeshBatchCache: Speedup: Do not return valid batch if geometry is empty
[blender.git] / source / blender / makesdna / DNA_cloth_types.h
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) 2006 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_CLOTH_TYPES_H__
25 #define __DNA_CLOTH_TYPES_H__
26
27 #include "DNA_defs.h"
28
29 /**
30  * This struct contains all the global data required to run a simulation.
31  * At the time of this writing, this structure contains data appropriate
32  * to run a simulation as described in Deformation Constraints in a
33  * Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
34  *
35  * I've tried to keep similar, if not exact names for the variables as
36  * are presented in the paper.  Where I've changed the concept slightly,
37  * as in stepsPerFrame compared to the time step in the paper, I've used
38  * variables with different names to minimize confusion.
39  */
40
41 typedef struct ClothSimSettings {
42   /** UNUSED atm. */
43   struct LinkNode *cache;
44   /** See SB. */
45   float mingoal;
46   /** Mechanical damping of springs. */
47   float Cdis DNA_DEPRECATED;
48   /** Viscous/fluid damping. */
49   float Cvi;
50   /** Gravity/external force vector. */
51   float gravity[3];
52   /** This is the duration of our time step, computed..   */
53   float dt;
54   /** The mass of the entire cloth. */
55   float mass;
56   /** Structural spring stiffness. */
57   float structural DNA_DEPRECATED;
58   /** Shear spring stiffness. */
59   float shear;
60   /** Flexion spring stiffness. */
61   float bending;
62   /** Max bending scaling value, min is "bending". */
63   float max_bend;
64   /** Max structural scaling value, min is "structural". */
65   float max_struct DNA_DEPRECATED;
66   /** Max shear scaling value. */
67   float max_shear;
68   /** Max sewing force. */
69   float max_sewing;
70   /** Used for normalized springs. */
71   float avg_spring_len;
72   /** Parameter how fast cloth runs. */
73   float timescale;
74   /** Multiplies cloth speed. */
75   float time_scale;
76   /** See SB. */
77   float maxgoal;
78   /** Scaling of effector forces (see softbody_calc_forces)..*/
79   float eff_force_scale;
80   /** Scaling of effector wind (see softbody_calc_forces)..   */
81   float eff_wind_scale;
82   float sim_time_old;
83   float defgoal;
84   float goalspring;
85   float goalfrict;
86   /** Smoothing of velocities for hair. */
87   float velocity_smooth;
88   /** Minimum density for hair. */
89   float density_target;
90   /** Influence of hair density. */
91   float density_strength;
92   /** Friction with colliders. */
93   float collider_friction;
94   /** Damp the velocity to speed up getting to the resting position. */
95   float vel_damping DNA_DEPRECATED;
96   /** Min amount to shrink cloth by 0.0f (no shrink) - 1.0f (shrink to nothing). */
97   float shrink_min;
98   /** Max amount to shrink cloth by 0.0f (no shrink) - 1.0f (shrink to nothing). */
99   float shrink_max;
100
101   /* XXX various hair stuff
102    * should really be separate, this struct is a horrible mess already
103    */
104   /** Damping of bending springs. */
105   float bending_damping;
106   /** Size of voxel grid cells for continuum dynamics. */
107   float voxel_cell_size;
108   char _pad[4];
109
110   /** Number of time steps per frame. */
111   int stepsPerFrame;
112   /** Flags, see CSIMSETT_FLAGS enum above. */
113   int flags;
114   /** How many frames of simulation to do before we start. */
115   int preroll DNA_DEPRECATED;
116   /** In percent!; if tearing enabled, a spring will get cut. */
117   int maxspringlen;
118   /** Which solver should be used? txold. */
119   short solver_type;
120   /** Vertex group for scaling bending stiffness. */
121   short vgroup_bend;
122   /** Optional vertexgroup name for assigning weight..*/
123   short vgroup_mass;
124   /** Vertex group for scaling structural stiffness. */
125   short vgroup_struct;
126   /** Vertex group for shrinking cloth. */
127   short vgroup_shrink;
128   /** Vertex group for scaling structural stiffness. */
129   short shapekey_rest;
130   /** Used for presets on GUI. */
131   short presets;
132   short reset;
133
134   char _pad0[4];
135   struct EffectorWeights *effector_weights;
136
137   short bending_model;
138   /** Vertex group for scaling structural stiffness. */
139   short vgroup_shear;
140   float tension;
141   float compression;
142   float max_tension;
143   float max_compression;
144   /** Mechanical damping of tension springs. */
145   float tension_damp;
146   /** Mechanical damping of compression springs. */
147   float compression_damp;
148   /** Mechanical damping of shear springs. */
149   float shear_damp;
150 } ClothSimSettings;
151
152 typedef struct ClothCollSettings {
153   /** E.g. pointer to temp memory for collisions. */
154   struct LinkNode *collision_list;
155   /** Min distance for collisions. */
156   float epsilon;
157   /** Fiction/damping with self contact. */
158   float self_friction;
159   /** Friction/damping applied on contact with other object. */
160   float friction;
161   /** Collision restitution on contact with other object. */
162   float damping;
163   /** For selfcollision. */
164   float selfepsilon;
165   float repel_force DNA_DEPRECATED;
166   float distance_repel DNA_DEPRECATED;
167   /** Collision flags defined in BKE_cloth.h. */
168   int flags;
169   /** How many iterations for the selfcollision loop. */
170   short self_loop_count DNA_DEPRECATED;
171   /** How many iterations for the collision loop. */
172   short loop_count;
173   char _pad[4];
174   /** Only use colliders from this group of objects. */
175   struct Collection *group;
176   /** Vgroup to paint which vertices are used for self collisions. */
177   short vgroup_selfcol;
178   char _pad2[6];
179   /** Impulse clamp for object collisions. */
180   float clamp;
181   /** Impulse clamp for self collisions. */
182   float self_clamp;
183 } ClothCollSettings;
184
185 #endif