Dynamic Paint:
[blender.git] / source / blender / makesdna / DNA_dynamicpaint_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 * Contributor(s): Miika Hämäläinen
10 *
11 * ***** END GPL LICENSE BLOCK *****
12 */
13 #ifndef DNA_DYNAMICPAINT_TYPES_H
14 #define DNA_DYNAMICPAINT_TYPES_H
15
16 #include "DNA_listBase.h"
17 struct CurveMapping;
18 struct PaintSurfaceData;
19
20 /* surface format */
21 #define MOD_DPAINT_SURFACE_F_PTEX 0
22 #define MOD_DPAINT_SURFACE_F_VERTEX 1
23 #define MOD_DPAINT_SURFACE_F_IMAGESEQ 2
24
25 /* surface type */
26 #define MOD_DPAINT_SURFACE_T_PAINT 0
27 #define MOD_DPAINT_SURFACE_T_DISPLACE 1
28 #define MOD_DPAINT_SURFACE_T_WEIGHT 2
29 #define MOD_DPAINT_SURFACE_T_WAVE 3
30
31 /* surface flags */
32 #define MOD_DPAINT_ACTIVE (1<<0) /* Is surface enabled */
33
34 #define MOD_DPAINT_ANTIALIAS (1<<1) /* do antialiasing */
35 #define MOD_DPAINT_DISSOLVE (1<<2) /* do dissolve */
36 #define MOD_DPAINT_MULALPHA (1<<3) /* Multiply color by alpha when saving image */
37 #define MOD_DPAINT_DISSOLVE_LOG (1<<4) /* Use 1/x for surface dissolve */
38 #define MOD_DPAINT_DRY_LOG (1<<5) /* Use 1/x for drying paint */
39 #define MOD_DPAINT_PREVIEW (1<<6) /* preview this surface on viewport*/
40
41 #define MOD_DPAINT_WAVE_OPEN_BORDERS (1<<7) /* passes waves through mesh edges */
42 #define MOD_DPAINT_DISP_INCREMENTAL (1<<8) /* builds displace on top of earlier values */
43
44 #define MOD_DPAINT_OUT1 (1<<10) /* output primary surface */
45 #define MOD_DPAINT_OUT2 (1<<11) /* output secondary surface */
46
47 /* image_fileformat */
48 #define MOD_DPAINT_IMGFORMAT_PNG 0
49 #define MOD_DPAINT_IMGFORMAT_OPENEXR 1
50
51 /* disp_format */
52 #define MOD_DPAINT_DISP_DISPLACE 0 /* displacement output displace map */
53 #define MOD_DPAINT_DISP_DEPTH 1 /* displacement output depth data */
54
55 /* effect */
56 #define MOD_DPAINT_EFFECT_DO_SPREAD (1<<0) /* do spread effect */
57 #define MOD_DPAINT_EFFECT_DO_DRIP (1<<1) /* do spread effect */
58 #define MOD_DPAINT_EFFECT_DO_SHRINK (1<<2) /* do spread effect */
59
60 /* preview_id */
61 #define MOD_DPAINT_SURFACE_PREV_PAINT 0
62 #define MOD_DPAINT_SURFACE_PREV_WETMAP 1
63
64 /* init_color_type */
65 #define MOD_DPAINT_INITIAL_NONE 0
66 #define MOD_DPAINT_INITIAL_COLOR 1
67 #define MOD_DPAINT_INITIAL_TEXTURE 2
68 #define MOD_DPAINT_INITIAL_VERTEXCOLOR 3
69
70 typedef struct DynamicPaintSurface {
71         
72         struct DynamicPaintSurface *next, *prev;
73         struct DynamicPaintCanvasSettings *canvas; /* for fast RNA access */
74         struct PaintSurfaceData *data;
75
76         struct Group *brush_group;
77         struct EffectorWeights *effector_weights;
78
79         /* cache */
80         struct PointCache *pointcache;
81         struct ListBase ptcaches;
82         int current_frame;
83
84         /* surface */
85         char name[64];
86         short format, type;
87         short disp_type, image_fileformat;
88         short effect_ui;        /* ui selection box */
89         short preview_id;       /* surface output id to preview */
90         short init_color_type, pad_s;
91         int flags, effect;
92
93         int image_resolution, substeps;
94         int start_frame, end_frame;
95         int pad;
96
97         /* initial color */
98         float init_color[4];
99         struct Tex *init_texture;
100         char init_layername[40];
101
102         int dry_speed, diss_speed;
103         float disp_clamp;
104
105         float spread_speed, color_spread_speed, shrink_speed;
106         float drip_vel, drip_acc;
107
108         /* wave settings */
109         float wave_damping, wave_speed, wave_timescale, wave_spring;
110
111         char uvlayer_name[32];
112         char image_output_path[240];
113         char output_name[40];
114         char output_name2[40]; /* some surfaces have 2 outputs */
115
116 } DynamicPaintSurface;
117
118 /* canvas flags */
119 #define MOD_DPAINT_PREVIEW_READY (1<<0) /* if viewport preview is ready */
120 #define MOD_DPAINT_BAKING (1<<1) /* surface is already baking, so it wont get updated (loop) */
121
122 /* Canvas settings */
123 typedef struct DynamicPaintCanvasSettings {
124         struct DynamicPaintModifierData *pmd; /* for fast RNA access */
125         struct DerivedMesh *dm;
126
127         struct ListBase surfaces;
128         short active_sur, flags;
129         int pad;
130
131         
132         char ui_info[128];      // UI info text
133         char error[64];         // Bake error description
134
135 } DynamicPaintCanvasSettings;
136
137
138 /* flags */
139 #define MOD_DPAINT_PART_RAD (1<<0) /* use particle radius */
140 #define MOD_DPAINT_USE_MATERIAL (1<<1) /* use object material */
141 #define MOD_DPAINT_ABS_ALPHA (1<<2) /* don't increase alpha unless
142                                                                         paint alpha is higher than existing */
143 #define MOD_DPAINT_ERASE (1<<3) /* removes paint */
144
145 #define MOD_DPAINT_RAMP_ALPHA (1<<4) /* only read falloff ramp alpha */
146 #define MOD_DPAINT_PROX_PROJECT (1<<5) /* do proximity check only in defined dir */
147 #define MOD_DPAINT_INVERSE_PROX (1<<6) /* inverse proximity painting */
148
149 #define MOD_DPAINT_DO_SMUDGE (1<<8) /* brush smudges existing paint */
150 #define MOD_DPAINT_VELOCITY_ALPHA (1<<9) /* multiply brush influence by velocity */
151 #define MOD_DPAINT_VELOCITY_COLOR (1<<10) /* replace brush color by velocity color ramp */
152 #define MOD_DPAINT_VELOCITY_DEPTH (1<<11) /* multiply brush intersection depth by velocity */
153
154 #define MOD_DPAINT_USES_VELOCITY ((1<<8)|(1<<9)|(1<<10)|(1<<11))
155
156 /* collision type */
157 #define MOD_DPAINT_COL_VOLUME 0 /* paint with mesh volume */
158 #define MOD_DPAINT_COL_DIST 1 /* paint using distance to mesh surface */
159 #define MOD_DPAINT_COL_VOLDIST 2 /* use both volume and distance */
160 #define MOD_DPAINT_COL_PSYS 3 /* use particle system */
161 #define MOD_DPAINT_COL_POINT 4 /* use distance to object center point */
162
163 /* proximity_falloff */
164 #define MOD_DPAINT_PRFALL_SHARP 0 /* no-falloff */
165 #define MOD_DPAINT_PRFALL_SMOOTH 1 /* smooth, linear falloff */
166 #define MOD_DPAINT_PRFALL_RAMP 2 /* use color ramp */
167
168 /* wave_brush_type */
169 #define MOD_DPAINT_WAVEB_DEPTH 0 /* use intersection depth */
170 #define MOD_DPAINT_WAVEB_FORCE 1 /* act as a force on intersection area */
171 #define MOD_DPAINT_WAVEB_REFLECT 2 /* obstacle that reflects waves */
172
173 /* brush ray_dir */
174 #define MOD_DPAINT_RAY_CANVAS 0
175 #define MOD_DPAINT_RAY_BRUSH_AVG 1
176 #define MOD_DPAINT_RAY_ZPLUS 2
177
178
179 /* Brush settings */
180 typedef struct DynamicPaintBrushSettings {
181         struct DynamicPaintModifierData *pmd; /* for fast RNA access */
182         struct DerivedMesh *dm;
183         struct ParticleSystem *psys;
184         struct Material *mat;
185
186         int flags;
187         int collision;
188
189         float r, g, b, alpha;
190         float wetness;
191
192         float particle_radius, particle_smooth;
193         float paint_distance;
194
195         /* color ramps */
196         struct ColorBand *paint_ramp;   /* Proximity paint falloff */
197         struct ColorBand *vel_ramp;             /* Velocity paint ramp */
198
199         short proximity_falloff;
200         short brush_settings_context;   /* ui settings display */
201         short wave_type;
202         short ray_dir;
203
204         float wave_factor, wave_clamp;
205         float max_velocity, smudge_strength;
206 } DynamicPaintBrushSettings;
207
208 #endif