* Volume colour absorption
[blender-staging.git] / source / blender / makesdna / DNA_material_types.h
1 /**
2  * blenlib/DNA_material_types.h (mar-2001 nzc)
3  *
4  * $Id$ 
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31 #ifndef DNA_MATERIAL_TYPES_H
32 #define DNA_MATERIAL_TYPES_H
33
34 #include "DNA_ID.h"
35 #include "DNA_scriptlink_types.h"
36 #include "DNA_listBase.h"
37
38 #ifndef MAX_MTEX
39 #define MAX_MTEX        18
40 #endif
41
42 struct MTex;
43 struct Ipo;
44 struct Material;
45 struct ColorBand;
46 struct Group;
47 struct bNodeTree;
48
49 /* WATCH IT: change type? also make changes in ipo.h  */
50
51 typedef struct Material {
52         ID id;
53         
54         short colormodel, flag; 
55         /* note, keep this below synced with render_types.h */
56         float r, g, b;
57         float specr, specg, specb;
58         float mirr, mirg, mirb;
59         float ambr, ambb, ambg;
60         float amb, emit, ang, spectra, ray_mirror;
61         float alpha, ref, spec, zoffs, add;
62         float translucency;
63         /* end synced with render_types.h */
64         
65         short material_type; /* solid, halo, volumetric */
66         short pad5[3];
67         
68         /* volumetrics */
69         float vol_alphathresh;
70         float vol_stepsize, vol_shade_stepsize;
71         float vol_absorption, vol_scattering;
72         float vol_absorption_col[3];
73         float vpad2;
74         short vol_shadeflag;
75         short vpad;
76         
77         float fresnel_mir, fresnel_mir_i;
78         float fresnel_tra, fresnel_tra_i;
79         float filter;           /* filter added, for raytrace transparency and transmissivity */
80         float tx_limit, tx_falloff;
81         short ray_depth, ray_depth_tra;
82         short har;
83         char seed1, seed2;
84         
85         float gloss_mir, gloss_tra;
86         short samp_gloss_mir, samp_gloss_tra;
87         float adapt_thresh_mir, adapt_thresh_tra;
88         float aniso_gloss_mir;
89         float dist_mir;
90         short fadeto_mir;
91         short shade_flag;               /* like Cubic interpolation */
92                 
93         int mode, mode_l;               /* mode_l is the or-ed result of all layer modes */
94         short flarec, starc, linec, ringc;
95         float hasize, flaresize, subsize, flareboost;
96         float strand_sta, strand_end, strand_ease, strand_surfnor;
97         float strand_min, strand_widthfade;
98         char strand_uvname[32];
99         
100         float sbias;                    /* shadow bias to prevent terminator prob */
101         float lbias;                    /* factor to multiply lampbias with (0.0 = no mult) */
102         float shad_alpha;               /* in use for irregular shadowbuffer */
103         int     septex;
104         
105         /* for buttons and render*/
106         char rgbsel, texact, pr_type, use_nodes;
107         short pr_back, pr_lamp, pad4, ml_flag;  /* ml_flag is for disable base material */
108         
109         /* shaders */
110         short diff_shader, spec_shader;
111         float roughness, refrac;
112         float param[4];         /* size, smooth, size, smooth, for toonshader */
113         float rms;
114         float darkness;
115         short texco, mapto;
116         
117         /* ramp colors */
118         struct ColorBand *ramp_col;
119         struct ColorBand *ramp_spec;
120         char rampin_col, rampin_spec;
121         char rampblend_col, rampblend_spec;
122         short ramp_show, pad3;
123         float rampfac_col, rampfac_spec;
124
125         struct MTex *mtex[18];          /* MAX_MTEX */
126         struct bNodeTree *nodetree;     
127         struct Ipo *ipo;
128         struct Group *group;    /* light group */
129         struct PreviewImage * preview;
130
131         /* dynamic properties */
132         float friction, fh, reflect;
133         float fhdist, xyfrict;
134         short dynamode, pad2;
135
136         /* subsurface scattering */
137         float sss_radius[3], sss_col[3];
138         float sss_error, sss_scale, sss_ior;
139         float sss_colfac, sss_texfac;
140         float sss_front, sss_back;
141         short sss_flag, sss_preset;
142
143         /* yafray: absorption color, dispersion parameters and material preset menu */
144         float YF_ar, YF_ag, YF_ab, YF_dscale, YF_dpwr;
145         int YF_dsmp, YF_preset, YF_djit;
146         
147         ScriptLink scriptlink;
148
149         ListBase gpumaterial;           /* runtime */
150 } Material;
151
152 /* **************** MATERIAL ********************* */
153
154         /* maximum number of materials per material array
155          * (on object, mesh, lamp, etc.)
156          */
157 #define MAXMAT                  16
158
159 /* colormodel */
160 #define MA_RGB                  0
161 #define MA_CMYK                 1
162 #define MA_YUV                  2
163 #define MA_HSV                  3
164
165 /* flag */
166                 /* for render */
167 #define MA_IS_USED              1
168 #define MA_IS_TEXTURED  2
169
170 /* material_type */
171 #define MA_SOLID                0
172 #define MA_PTHALO               1
173 #define MA_VOLUME               2
174 #define MA_VOLUMESOLID  3
175
176 /* mode (is int) */
177 #define MA_TRACEBLE             1
178 #define MA_SHADOW               2
179 #define MA_SHLESS               4
180 #define MA_WIRE                 8
181 #define MA_VERTEXCOL    16
182 #define MA_HALO_SOFT    16
183 #define MA_HALO                 32
184 #define MA_ZTRA                 64
185 #define MA_VERTEXCOLP   128
186 #define MA_ZINV                 256
187 #define MA_HALO_RINGS   256
188 #define MA_ENV                  512
189 #define MA_HALO_LINES   512
190 #define MA_ONLYSHADOW   1024
191 #define MA_HALO_XALPHA  1024
192 #define MA_STAR                 0x800
193 #define MA_FACETEXTURE  0x800
194 #define MA_HALOTEX              0x1000
195 #define MA_HALOPUNO             0x2000
196 #define MA_ONLYCAST             0x2000
197 #define MA_NOMIST               0x4000
198 #define MA_HALO_SHADE   0x4000
199 #define MA_HALO_FLARE   0x8000
200 #define MA_RADIO                0x10000
201 #define MA_RAYTRANSP    0x20000
202 #define MA_RAYMIRROR    0x40000
203 #define MA_SHADOW_TRA   0x80000
204 #define MA_RAMP_COL             0x100000
205 #define MA_RAMP_SPEC    0x200000
206 #define MA_RAYBIAS              0x400000
207 #define MA_FULL_OSA             0x800000
208 #define MA_TANGENT_STR  0x1000000
209 #define MA_SHADBUF              0x2000000
210                 /* note; we drop MA_TANGENT_STR later to become tangent_u */
211 #define MA_TANGENT_V    0x4000000
212 /* qdn: a bit clumsy this, tangents needed for normal maps separated from shading */
213 #define MA_NORMAP_TANG  0x8000000
214 #define MA_GROUP_NOLAY  0x10000000
215 #define MA_FACETEXTURE_ALPHA    0x20000000
216 #define MA_STR_B_UNITS  0x40000000
217 #define MA_STR_SURFDIFF 0x80000000
218
219 #define MA_MODE_MASK    0x6fffffff      /* all valid mode bits */
220
221 /* ray mirror fadeout */
222 #define MA_RAYMIR_FADETOSKY     0
223 #define MA_RAYMIR_FADETOMAT     1
224
225 /* shade_flag */
226 #define MA_CUBIC                        1
227 #define MA_OBCOLOR                      2
228
229 /* diff_shader */
230 #define MA_DIFF_LAMBERT         0
231 #define MA_DIFF_ORENNAYAR       1
232 #define MA_DIFF_TOON            2
233 #define MA_DIFF_MINNAERT    3
234 #define MA_DIFF_FRESNEL     4
235
236 /* spec_shader */
237 #define MA_SPEC_COOKTORR        0
238 #define MA_SPEC_PHONG           1
239 #define MA_SPEC_BLINN           2
240 #define MA_SPEC_TOON            3
241 #define MA_SPEC_WARDISO         4
242
243 /* dynamode */
244 #define MA_DRAW_DYNABUTS    1
245 #define MA_FH_NOR               2
246
247 /* ramps */
248 #define MA_RAMP_IN_SHADER       0
249 #define MA_RAMP_IN_ENERGY       1
250 #define MA_RAMP_IN_NOR          2
251 #define MA_RAMP_IN_RESULT       3
252
253 #define MA_RAMP_BLEND           0
254 #define MA_RAMP_ADD                     1
255 #define MA_RAMP_MULT            2
256 #define MA_RAMP_SUB                     3
257 #define MA_RAMP_SCREEN          4
258 #define MA_RAMP_DIV                     5
259 #define MA_RAMP_DIFF            6
260 #define MA_RAMP_DARK            7
261 #define MA_RAMP_LIGHT           8
262 #define MA_RAMP_OVERLAY         9
263 #define MA_RAMP_DODGE           10
264 #define MA_RAMP_BURN            11
265 #define MA_RAMP_HUE                     12
266 #define MA_RAMP_SAT                     13
267 #define MA_RAMP_VAL                     14
268 #define MA_RAMP_COLOR           15
269
270 /* texco */
271 #define TEXCO_ORCO              1
272 #define TEXCO_REFL              2
273 #define TEXCO_NORM              4
274 #define TEXCO_GLOB              8
275 #define TEXCO_UV                16
276 #define TEXCO_OBJECT    32
277 #define TEXCO_LAVECTOR  64
278 #define TEXCO_VIEW              128
279 #define TEXCO_STICKY    256
280 #define TEXCO_OSA               512
281 #define TEXCO_WINDOW    1024
282 #define NEED_UV                 2048
283 #define TEXCO_TANGENT   4096
284         /* still stored in vertex->accum, 1 D */
285 #define TEXCO_STRAND    8192
286 #define TEXCO_STRESS    16384
287 #define TEXCO_SPEED             32768
288
289 /* mapto */
290 #define MAP_COL                 1
291 #define MAP_NORM                2
292 #define MAP_COLSPEC             4
293 #define MAP_COLMIR              8
294 #define MAP_VARS                (0xFFF0)
295 #define MAP_REF                 16
296 #define MAP_SPEC                32
297 #define MAP_EMIT                64
298 #define MAP_ALPHA               128
299 #define MAP_HAR                 256
300 #define MAP_RAYMIRR             512
301 #define MAP_TRANSLU             1024
302 #define MAP_AMB                 2048
303 #define MAP_DISPLACE    4096
304 #define MAP_WARP                8192
305 #define MAP_LAYER               16384   
306
307 /* mapto for halo */
308 //#define MAP_HA_COL            1
309 //#define MAP_HA_ALPHA  128
310 //#define MAP_HA_HAR            256
311 //#define MAP_HA_SIZE           2
312 //#define MAP_HA_ADD            64
313
314 /* pmapto */
315 /* init */
316 #define MAP_PA_INIT             31
317 #define MAP_PA_TIME             1
318 #define MAP_PA_LIFE             2
319 #define MAP_PA_DENS             4
320 #define MAP_PA_SIZE             8
321 #define MAP_PA_LENGTH   16
322 /* reset */
323 #define MAP_PA_IVEL             32
324 /* physics */
325 #define MAP_PA_PVEL             64
326 /* path cache */
327 #define MAP_PA_CACHE    912
328 #define MAP_PA_CLUMP    128
329 #define MAP_PA_KINK             256
330 #define MAP_PA_ROUGH    512
331
332 /* pr_type */
333 #define MA_FLAT                 0
334 #define MA_SPHERE               1
335 #define MA_CUBE                 2
336 #define MA_MONKEY               3
337 #define MA_SPHERE_A             4
338 #define MA_TEXTURE              5
339 #define MA_LAMP                 6
340 #define MA_SKY                  7
341 #define MA_HAIR                 10
342 #define MA_ATMOS                11
343
344 /* pr_back */
345 #define MA_DARK                 1
346
347 /* sss_flag */
348 #define MA_DIFF_SSS             1
349
350 /* vol_shadeflag */
351 #define MA_VOL_SHADED           1
352 #define MA_VOL_ATTENUATED       2
353 #define MA_VOL_SHADOWED         4
354
355 #endif
356