2 * ***** BEGIN GPL LICENSE BLOCK *****
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.
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.
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.
18 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19 * All rights reserved.
21 * The Original Code is: all of this file.
23 * Contributor(s): none yet.
25 * ***** END GPL LICENSE BLOCK *****
28 /** \file DNA_material_types.h
32 #ifndef __DNA_MATERIAL_TYPES_H__
33 #define __DNA_MATERIAL_TYPES_H__
37 #include "DNA_listBase.h"
50 /* WATCH IT: change type? also make changes in ipo.h */
52 typedef struct VolumeSettings {
58 float emission_col[3];
59 float transmission_col[3];
60 float reflection_col[3];
69 short precache_resolution;
77 /* Game Engine Options (old Texface mode, transp and flag) */
78 typedef struct GameSettings {
85 typedef struct Material {
87 struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */
89 short material_type, flag;
90 /* note, keep this below synced with render_types.h */
92 float specr, specg, specb;
93 float mirr, mirg, mirb;
94 float ambr, ambb, ambg;
95 float amb, emit, ang, spectra, ray_mirror;
96 float alpha, ref, spec, zoffs, add;
98 /* end synced with render_types.h */
100 struct VolumeSettings vol;
101 struct GameSettings game;
103 float fresnel_mir, fresnel_mir_i;
104 float fresnel_tra, fresnel_tra_i;
105 float filter; /* filter added, for raytrace transparency and transmissivity */
106 float tx_limit, tx_falloff;
107 short ray_depth, ray_depth_tra;
111 float gloss_mir, gloss_tra;
112 short samp_gloss_mir, samp_gloss_tra;
113 float adapt_thresh_mir, adapt_thresh_tra;
114 float aniso_gloss_mir;
117 short shade_flag; /* like Cubic interpolation */
119 int mode, mode_l; /* mode_l is the or-ed result of all layer modes */
120 int mode2, mode2_l; /* additional mode flags */
121 short flarec, starc, linec, ringc;
122 float hasize, flaresize, subsize, flareboost;
123 float strand_sta, strand_end, strand_ease, strand_surfnor;
124 float strand_min, strand_widthfade;
125 char strand_uvname[64]; /* MAX_CUSTOMDATA_LAYER_NAME */
127 float sbias; /* shadow bias to prevent terminator prob */
128 float lbias; /* factor to multiply lampbias with (0.0 = no mult) */
129 float shad_alpha; /* in use for irregular shadowbuffer */
132 /* for buttons and render*/
133 char rgbsel, texact, pr_type, use_nodes;
134 short pr_lamp, pr_texture, ml_flag; /* ml_flag is for disable base material */
140 short diff_shader, spec_shader;
141 float roughness, refrac;
142 /* XXX param[4] needs review and improvement (shader system as whole anyway)
143 * This is nasty reused variable for different goals and not easy to RNAify nicely. -jesterKing */
144 float param[4]; /* size, smooth, size, smooth, for toonshader, 0 (fac) and 1 (fresnel) also for fresnel shader */
148 /* runtime - OR'd from 'mtex' */
152 struct ColorBand *ramp_col;
153 struct ColorBand *ramp_spec;
154 char rampin_col, rampin_spec;
155 char rampblend_col, rampblend_spec;
156 short ramp_show, pad3;
157 float rampfac_col, rampfac_spec;
159 struct MTex *mtex[18]; /* MAX_MTEX */
160 struct bNodeTree *nodetree;
161 struct Ipo *ipo DNA_DEPRECATED; /* old animation system, deprecated for 2.5 */
162 struct Group *group; /* light group */
163 struct PreviewImage *preview;
165 /* dynamic properties */
166 float friction, fh, reflect;
167 float fhdist, xyfrict;
168 short dynamode, pad2;
170 /* subsurface scattering */
171 float sss_radius[3], sss_col[3];
172 float sss_error, sss_scale, sss_ior;
173 float sss_colfac, sss_texfac;
174 float sss_front, sss_back;
175 short sss_flag, sss_preset;
177 int mapto_textured; /* render-time cache to optimize texture lookups */
178 short shadowonly_flag; /* "shadowsonly" type */
179 short index; /* custom index for render passes */
184 ListBase gpumaterial; /* runtime */
188 /* **************** GAME PROPERTIES ********************* */
189 // Blend Transparency Options - alpha_blend /* match GPU_material::GPUBlendMode */
190 #define GEMAT_SOLID 0 /* GPU_BLEND_SOLID */
191 #define GEMAT_ADD 1 /* GPU_BLEND_ADD */
192 #define GEMAT_ALPHA 2 /* GPU_BLEND_ALPHA */
193 #define GEMAT_CLIP 4 /* GPU_BLEND_CLIP */
194 #define GEMAT_ALPHA_SORT 8 /* GPU_BLEND_ALPHA_SORT */
196 // Game Options - flag
197 #define GEMAT_BACKCULL 16 /* KX_BACKCULL */
198 #define GEMAT_SHADED 32 /* KX_LIGHT */
199 #define GEMAT_TEXT 64 /* RAS_RENDER_3DPOLYGON_TEXT */
200 #define GEMAT_NOPHYSICS 128
201 #define GEMAT_INVISIBLE 256
203 // Face Orientation Options - face_orientation
204 #define GEMAT_NORMAL 0
205 #define GEMAT_HALO 512 /* BILLBOARD_SCREENALIGNED */
206 #define GEMAT_BILLBOARD 1024 /* BILLBOARD_AXISALIGNED */
207 #define GEMAT_SHADOW 2048 /* SHADOW */
209 // Use Textures - not defined directly in the UI
210 #define GEMAT_TEX 4096 /* KX_TEX */
213 /* **************** MATERIAL ********************* */
215 /* maximum number of materials per material array.
216 * (on object, mesh, lamp, etc.). limited by
217 * short mat_nr in verts, faces.
218 * -1 because for active material we store the index + 1 */
219 #define MAXMAT (32767-1)
222 #define MA_TYPE_SURFACE 0
223 #define MA_TYPE_HALO 1
224 #define MA_TYPE_VOLUME 2
225 #define MA_TYPE_WIRE 3
231 #define MA_DS_EXPAND 2
232 /* for dopesheet (texture stack expander)
233 * NOTE: this must have the same value as other texture stacks,
234 * otherwise anim-editors will not read correctly
236 #define MA_DS_SHOW_TEXS 4
239 #define MA_TRACEBLE 1
242 #define MA_WIRE 8 /* deprecated */
243 #define MA_VERTEXCOL 16
244 #define MA_HALO_SOFT 16
245 #define MA_HALO 32 /* deprecated */
246 #define MA_ZTRANSP 64
247 #define MA_VERTEXCOLP 128
249 #define MA_HALO_RINGS 256
251 #define MA_HALO_LINES 512
252 #define MA_ONLYSHADOW 1024
253 #define MA_HALO_XALPHA 1024
254 #define MA_STAR 0x800
255 #define MA_FACETEXTURE 0x800
256 #define MA_HALOTEX 0x1000
257 #define MA_HALOPUNO 0x2000
258 #define MA_ONLYCAST 0x2000
259 #define MA_NOMIST 0x4000
260 #define MA_HALO_SHADE 0x4000
261 #define MA_HALO_FLARE 0x8000
262 #define MA_TRANSP 0x10000
263 #define MA_RAYTRANSP 0x20000
264 #define MA_RAYMIRROR 0x40000
265 #define MA_SHADOW_TRA 0x80000
266 #define MA_RAMP_COL 0x100000
267 #define MA_RAMP_SPEC 0x200000
268 #define MA_RAYBIAS 0x400000
269 #define MA_FULL_OSA 0x800000
270 #define MA_TANGENT_STR 0x1000000
271 #define MA_SHADBUF 0x2000000
272 /* note; we drop MA_TANGENT_STR later to become tangent_u */
273 #define MA_TANGENT_V 0x4000000
274 /* qdn: a bit clumsy this, tangents needed for normal maps separated from shading */
275 #define MA_NORMAP_TANG 0x8000000
276 #define MA_GROUP_NOLAY 0x10000000
277 #define MA_FACETEXTURE_ALPHA 0x20000000
278 #define MA_STR_B_UNITS 0x40000000
279 #define MA_STR_SURFDIFF 0x80000000
281 #define MA_MODE_MASK 0x6fffffff /* all valid mode bits */
282 #define MA_MODE_PIPELINE (MA_TRANSP | MA_ZTRANSP | MA_RAYTRANSP \
283 | MA_TRACEBLE | MA_FULL_OSA | MA_ENV | MA_ZINV \
284 | MA_ONLYCAST | MA_SHADBUF)
287 #define MA_CASTSHADOW (1 << 0)
288 #define MA_MODE2_PIPELINE (MA_CASTSHADOW)
291 #define MA_MAPFLAG_UVPROJECT (1 << 0)
293 /* ray mirror fadeout */
294 #define MA_RAYMIR_FADETOSKY 0
295 #define MA_RAYMIR_FADETOMAT 1
297 /* shadowonly_flag */
299 #define MA_SO_SHADOW 1
300 #define MA_SO_SHADED 2
305 #define MA_APPROX_OCCLUSION 4
306 #define MA_GROUP_LOCAL 8
309 #define MA_DIFF_LAMBERT 0
310 #define MA_DIFF_ORENNAYAR 1
311 #define MA_DIFF_TOON 2
312 #define MA_DIFF_MINNAERT 3
313 #define MA_DIFF_FRESNEL 4
316 #define MA_SPEC_COOKTORR 0
317 #define MA_SPEC_PHONG 1
318 #define MA_SPEC_BLINN 2
319 #define MA_SPEC_TOON 3
320 #define MA_SPEC_WARDISO 4
323 // #define MA_DRAW_DYNABUTS 1 /* deprecated */
327 #define MA_RAMP_IN_SHADER 0
328 #define MA_RAMP_IN_ENERGY 1
329 #define MA_RAMP_IN_NOR 2
330 #define MA_RAMP_IN_RESULT 3
332 #define MA_RAMP_BLEND 0
333 #define MA_RAMP_ADD 1
334 #define MA_RAMP_MULT 2
335 #define MA_RAMP_SUB 3
336 #define MA_RAMP_SCREEN 4
337 #define MA_RAMP_DIV 5
338 #define MA_RAMP_DIFF 6
339 #define MA_RAMP_DARK 7
340 #define MA_RAMP_LIGHT 8
341 #define MA_RAMP_OVERLAY 9
342 #define MA_RAMP_DODGE 10
343 #define MA_RAMP_BURN 11
344 #define MA_RAMP_HUE 12
345 #define MA_RAMP_SAT 13
346 #define MA_RAMP_VAL 14
347 #define MA_RAMP_COLOR 15
348 #define MA_RAMP_SOFT 16
349 #define MA_RAMP_LINEAR 17
357 #define TEXCO_OBJECT 32
358 #define TEXCO_LAVECTOR 64
359 #define TEXCO_VIEW 128
360 #define TEXCO_STICKY_ 256 // DEPRECATED
361 #define TEXCO_OSA 512
362 #define TEXCO_WINDOW 1024
364 #define TEXCO_TANGENT 4096
365 /* still stored in vertex->accum, 1 D */
366 #define TEXCO_STRAND 8192
367 #define TEXCO_PARTICLE 8192 /* strand is used for normal materials, particle for halo materials */
368 #define TEXCO_STRESS 16384
369 #define TEXCO_SPEED 32768
374 #define MAP_COLSPEC 4
376 #define MAP_VARS (0xFFF0)
380 #define MAP_ALPHA 128
382 #define MAP_RAYMIRR 512
383 #define MAP_TRANSLU 1024
385 #define MAP_DISPLACE 4096
386 #define MAP_WARP 8192
387 // #define MAP_LAYER 16384 /* unused */
389 /* volume mapto - reuse definitions for now - a bit naughty! */
390 #define MAP_DENSITY 128
391 #define MAP_EMISSION 64
392 #define MAP_EMISSION_COL 1
393 #define MAP_SCATTERING 16
394 #define MAP_TRANSMISSION_COL 8
395 #define MAP_REFLECTION_COL 4
396 #define MAP_REFLECTION 32
400 //#define MAP_HA_COL 1
401 //#define MAP_HA_ALPHA 128
402 //#define MAP_HA_HAR 256
403 //#define MAP_HA_SIZE 2
404 //#define MAP_HA_ADD 64
408 #define MAP_PA_INIT 31
409 #define MAP_PA_TIME 1
410 #define MAP_PA_LIFE 2
411 #define MAP_PA_DENS 4
412 #define MAP_PA_SIZE 8
413 #define MAP_PA_LENGTH 16
415 #define MAP_PA_IVEL 32
417 #define MAP_PA_PVEL 64
419 #define MAP_PA_CACHE 912
420 #define MAP_PA_CLUMP 128
421 #define MAP_PA_KINK 256
422 #define MAP_PA_ROUGH 512
429 #define MA_SPHERE_A 4
437 #define MA_DIFF_SSS 1
439 /* vol_stepsize_type */
440 #define MA_VOL_STEP_RANDOMIZED 0
441 #define MA_VOL_STEP_CONSTANT 1
442 #define MA_VOL_STEP_ADAPTIVE 2
445 #define MA_VOL_RECV_EXT_SHADOW 1
446 #define MA_VOL_PRECACHESHADING 8
448 /* vol_shading_type */
449 #define MA_VOL_SHADE_SHADELESS 0
450 #define MA_VOL_SHADE_SHADOWED 2
451 #define MA_VOL_SHADE_SHADED 1
452 #define MA_VOL_SHADE_MULTIPLE 3
453 #define MA_VOL_SHADE_SHADEDPLUSMULTIPLE 4