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