Merged changes in the trunk up to revision 34996.
[blender.git] / source / blender / makesdna / DNA_material_types.h
1 /*
2  * $Id$ 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29 #ifndef DNA_MATERIAL_TYPES_H
30 #define DNA_MATERIAL_TYPES_H
31
32 /** \file DNA_material_types.h
33  *  \ingroup DNA
34  */
35
36 #include "DNA_ID.h"
37 #include "DNA_listBase.h"
38
39 #ifndef MAX_MTEX
40 #define MAX_MTEX        18
41 #endif
42
43 struct MTex;
44 struct ColorBand;
45 struct Group;
46 struct bNodeTree;
47 struct AnimData;
48 struct Ipo;
49
50 /* WATCH IT: change type? also make changes in ipo.h  */
51
52 typedef struct VolumeSettings {
53         float density;
54         float emission;
55         float scattering;
56         float reflection;
57
58         float emission_col[3];
59         float transmission_col[3];
60         float reflection_col[3];
61
62         float density_scale;
63         float depth_cutoff;
64         float asymmetry;
65         
66         short stepsize_type;
67         short shadeflag;
68         short shade_type;
69         short precache_resolution;
70
71         float stepsize;
72         float ms_diff;
73         float ms_intensity;
74         float ms_spread;
75 } VolumeSettings;
76
77 typedef struct Material {
78         ID id;
79         struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */ 
80         
81         short material_type, flag;      
82         /* note, keep this below synced with render_types.h */
83         float r, g, b;
84         float specr, specg, specb;
85         float mirr, mirg, mirb;
86         float ambr, ambb, ambg;
87         float amb, emit, ang, spectra, ray_mirror;
88         float alpha, ref, spec, zoffs, add;
89         float translucency;
90         /* end synced with render_types.h */
91         
92         struct VolumeSettings vol;
93
94         float fresnel_mir, fresnel_mir_i;
95         float fresnel_tra, fresnel_tra_i;
96         float filter;           /* filter added, for raytrace transparency and transmissivity */
97         float tx_limit, tx_falloff;
98         short ray_depth, ray_depth_tra;
99         short har;
100         char seed1, seed2;
101         
102         float gloss_mir, gloss_tra;
103         short samp_gloss_mir, samp_gloss_tra;
104         float adapt_thresh_mir, adapt_thresh_tra;
105         float aniso_gloss_mir;
106         float dist_mir;
107         short fadeto_mir;
108         short shade_flag;               /* like Cubic interpolation */
109                 
110         int mode, mode_l;               /* mode_l is the or-ed result of all layer modes */
111         short flarec, starc, linec, ringc;
112         float hasize, flaresize, subsize, flareboost;
113         float strand_sta, strand_end, strand_ease, strand_surfnor;
114         float strand_min, strand_widthfade;
115         char strand_uvname[32];
116         
117         float sbias;                    /* shadow bias to prevent terminator prob */
118         float lbias;                    /* factor to multiply lampbias with (0.0 = no mult) */
119         float shad_alpha;               /* in use for irregular shadowbuffer */
120         int     septex;
121         
122         /* for buttons and render*/
123         char rgbsel, texact, pr_type, use_nodes;
124         short pr_back, pr_lamp, pr_texture, ml_flag;    /* ml_flag is for disable base material */
125         
126         /* shaders */
127         short diff_shader, spec_shader;
128         float roughness, refrac;
129         /* XXX param[4] needs review and improvement (shader system as whole anyway)
130            This is nasty reused variable for different goals and not easy to RNAify nicely. -jesterKing */
131         float param[4];         /* size, smooth, size, smooth, for toonshader, 0 (fac) and 1 (fresnel) also for fresnel shader */
132         float rms;
133         float darkness;
134         short texco, mapto;
135         
136         /* ramp colors */
137         struct ColorBand *ramp_col;
138         struct ColorBand *ramp_spec;
139         char rampin_col, rampin_spec;
140         char rampblend_col, rampblend_spec;
141         short ramp_show, pad3;
142         float rampfac_col, rampfac_spec;
143
144         struct MTex *mtex[18];          /* MAX_MTEX */
145         struct bNodeTree *nodetree;     
146         struct Ipo *ipo;                // XXX depreceated... old animation system
147         struct Group *group;    /* light group */
148         struct PreviewImage * preview;
149
150         /* dynamic properties */
151         float friction, fh, reflect;
152         float fhdist, xyfrict;
153         short dynamode, pad2;
154
155         /* subsurface scattering */
156         float sss_radius[3], sss_col[3];
157         float sss_error, sss_scale, sss_ior;
158         float sss_colfac, sss_texfac;
159         float sss_front, sss_back;
160         short sss_flag, sss_preset;
161
162         int mapto_textured;     /* render-time cache to optimise texture lookups */
163         short vcol_alpha, pad4;
164
165         ListBase gpumaterial;           /* runtime */
166 } Material;
167
168 /* **************** MATERIAL ********************* */
169
170 /* maximum number of materials per material array.
171  * (on object, mesh, lamp, etc.). limited by
172  * short mat_nr in verts, faces. */
173 #define MAXMAT                  32767
174
175 /* material_type */
176 #define MA_TYPE_SURFACE 0
177 #define MA_TYPE_HALO    1
178 #define MA_TYPE_VOLUME  2
179 #define MA_TYPE_WIRE    3
180
181 /* flag */
182                 /* for render */
183 #define MA_IS_USED              1
184                 /* for dopesheet */
185 #define MA_DS_EXPAND    2
186                 /* for dopesheet (texture stack expander)
187                  * NOTE: this must have the same value as other texture stacks, 
188                  * otherwise anim-editors will not read correctly
189                  */
190 #define MA_DS_SHOW_TEXS 4
191
192 /* mode (is int) */
193 #define MA_TRACEBLE             1
194 #define MA_SHADOW               2
195 #define MA_SHLESS               4
196 #define MA_WIRE                 8                       /* deprecated */
197 #define MA_VERTEXCOL    16
198 #define MA_HALO_SOFT    16
199 #define MA_HALO                 32                      /* deprecated */
200 #define MA_ZTRANSP              64
201 #define MA_VERTEXCOLP   128
202 #define MA_ZINV                 256
203 #define MA_HALO_RINGS   256
204 #define MA_ENV                  512
205 #define MA_HALO_LINES   512
206 #define MA_ONLYSHADOW   1024
207 #define MA_HALO_XALPHA  1024
208 #define MA_STAR                 0x800
209 #define MA_FACETEXTURE  0x800
210 #define MA_HALOTEX              0x1000
211 #define MA_HALOPUNO             0x2000
212 #define MA_ONLYCAST             0x2000
213 #define MA_NOMIST               0x4000
214 #define MA_HALO_SHADE   0x4000
215 #define MA_HALO_FLARE   0x8000
216 #define MA_TRANSP               0x10000
217 #define MA_RAYTRANSP    0x20000
218 #define MA_RAYMIRROR    0x40000
219 #define MA_SHADOW_TRA   0x80000
220 #define MA_RAMP_COL             0x100000
221 #define MA_RAMP_SPEC    0x200000
222 #define MA_RAYBIAS              0x400000
223 #define MA_FULL_OSA             0x800000
224 #define MA_TANGENT_STR  0x1000000
225 #define MA_SHADBUF              0x2000000
226                 /* note; we drop MA_TANGENT_STR later to become tangent_u */
227 #define MA_TANGENT_V    0x4000000
228 /* qdn: a bit clumsy this, tangents needed for normal maps separated from shading */
229 #define MA_NORMAP_TANG  0x8000000
230 #define MA_GROUP_NOLAY  0x10000000
231 #define MA_FACETEXTURE_ALPHA    0x20000000
232 #define MA_STR_B_UNITS  0x40000000
233 #define MA_STR_SURFDIFF 0x80000000
234
235 #define MA_MODE_MASK    0x6fffffff      /* all valid mode bits */
236
237 /* ray mirror fadeout */
238 #define MA_RAYMIR_FADETOSKY     0
239 #define MA_RAYMIR_FADETOMAT     1
240
241 /* shade_flag */
242 #define MA_CUBIC                        1
243 #define MA_OBCOLOR                      2
244 #define MA_APPROX_OCCLUSION     4
245
246 /* diff_shader */
247 #define MA_DIFF_LAMBERT         0
248 #define MA_DIFF_ORENNAYAR       1
249 #define MA_DIFF_TOON            2
250 #define MA_DIFF_MINNAERT    3
251 #define MA_DIFF_FRESNEL     4
252
253 /* spec_shader */
254 #define MA_SPEC_COOKTORR        0
255 #define MA_SPEC_PHONG           1
256 #define MA_SPEC_BLINN           2
257 #define MA_SPEC_TOON            3
258 #define MA_SPEC_WARDISO         4
259
260 /* dynamode */
261 #define MA_DRAW_DYNABUTS    1           /* deprecated */
262 #define MA_FH_NOR               2
263
264 /* ramps */
265 #define MA_RAMP_IN_SHADER       0
266 #define MA_RAMP_IN_ENERGY       1
267 #define MA_RAMP_IN_NOR          2
268 #define MA_RAMP_IN_RESULT       3
269
270 #define MA_RAMP_BLEND           0
271 #define MA_RAMP_ADD                     1
272 #define MA_RAMP_MULT            2
273 #define MA_RAMP_SUB                     3
274 #define MA_RAMP_SCREEN          4
275 #define MA_RAMP_DIV                     5
276 #define MA_RAMP_DIFF            6
277 #define MA_RAMP_DARK            7
278 #define MA_RAMP_LIGHT           8
279 #define MA_RAMP_OVERLAY         9
280 #define MA_RAMP_DODGE           10
281 #define MA_RAMP_BURN            11
282 #define MA_RAMP_HUE                     12
283 #define MA_RAMP_SAT                     13
284 #define MA_RAMP_VAL                     14
285 #define MA_RAMP_COLOR           15
286 #define MA_RAMP_SOFT        16 
287 #define MA_RAMP_LINEAR      17 
288
289 /* texco */
290 #define TEXCO_ORCO              1
291 #define TEXCO_REFL              2
292 #define TEXCO_NORM              4
293 #define TEXCO_GLOB              8
294 #define TEXCO_UV                16
295 #define TEXCO_OBJECT    32
296 #define TEXCO_LAVECTOR  64
297 #define TEXCO_VIEW              128
298 #define TEXCO_STICKY    256
299 #define TEXCO_OSA               512
300 #define TEXCO_WINDOW    1024
301 #define NEED_UV                 2048
302 #define TEXCO_TANGENT   4096
303         /* still stored in vertex->accum, 1 D */
304 #define TEXCO_STRAND    8192
305 #define TEXCO_PARTICLE  8192 /* strand is used for normal materials, particle for halo materials */
306 #define TEXCO_STRESS    16384
307 #define TEXCO_SPEED             32768
308
309 /* mapto */
310 #define MAP_COL                 1
311 #define MAP_NORM                2
312 #define MAP_COLSPEC             4
313 #define MAP_COLMIR              8
314 #define MAP_VARS                (0xFFF0)
315 #define MAP_REF                 16
316 #define MAP_SPEC                32
317 #define MAP_EMIT                64
318 #define MAP_ALPHA               128
319 #define MAP_HAR                 256
320 #define MAP_RAYMIRR             512
321 #define MAP_TRANSLU             1024
322 #define MAP_AMB                 2048
323 #define MAP_DISPLACE    4096
324 #define MAP_WARP                8192
325 #define MAP_LAYER               16384           /* unused */
326
327 /* volume mapto - reuse definitions for now - a bit naughty! */
328 #define MAP_DENSITY                             128
329 #define MAP_EMISSION                    64
330 #define MAP_EMISSION_COL                1
331 #define MAP_SCATTERING                  16
332 #define MAP_TRANSMISSION_COL    8
333 #define MAP_REFLECTION_COL              4
334 #define MAP_REFLECTION                  32
335
336
337 /* mapto for halo */
338 //#define MAP_HA_COL            1
339 //#define MAP_HA_ALPHA  128
340 //#define MAP_HA_HAR            256
341 //#define MAP_HA_SIZE           2
342 //#define MAP_HA_ADD            64
343
344 /* pmapto */
345 /* init */
346 #define MAP_PA_INIT             31
347 #define MAP_PA_TIME             1
348 #define MAP_PA_LIFE             2
349 #define MAP_PA_DENS             4
350 #define MAP_PA_SIZE             8
351 #define MAP_PA_LENGTH   16
352 /* reset */
353 #define MAP_PA_IVEL             32
354 /* physics */
355 #define MAP_PA_PVEL             64
356 /* path cache */
357 #define MAP_PA_CACHE    912
358 #define MAP_PA_CLUMP    128
359 #define MAP_PA_KINK             256
360 #define MAP_PA_ROUGH    512
361
362 /* pr_type */
363 #define MA_FLAT                 0
364 #define MA_SPHERE               1
365 #define MA_CUBE                 2
366 #define MA_MONKEY               3
367 #define MA_SPHERE_A             4
368 #define MA_TEXTURE              5
369 #define MA_LAMP                 6
370 #define MA_SKY                  7
371 #define MA_HAIR                 10
372 #define MA_ATMOS                11
373
374 /* pr_back */
375 #define MA_DARK                 1
376
377 /* sss_flag */
378 #define MA_DIFF_SSS             1
379
380 /* vol_stepsize_type */
381 #define MA_VOL_STEP_RANDOMIZED  0
382 #define MA_VOL_STEP_CONSTANT    1
383 #define MA_VOL_STEP_ADAPTIVE    2
384
385 /* vol_shadeflag */
386 #define MA_VOL_RECV_EXT_SHADOW  1
387 #define MA_VOL_PRECACHESHADING  8
388
389 /* vol_shading_type */
390 #define MA_VOL_SHADE_SHADELESS                                  0
391 #define MA_VOL_SHADE_SHADOWED                                   2
392 #define MA_VOL_SHADE_SHADED                                             1
393 #define MA_VOL_SHADE_MULTIPLE                                   3
394 #define MA_VOL_SHADE_SHADEDPLUSMULTIPLE                 4
395
396 #endif
397