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