Cycles: add Principled Volume shader.
[blender.git] / intern / cycles / kernel / svm / svm_types.h
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __SVM_TYPES_H__
18 #define __SVM_TYPES_H__
19
20 CCL_NAMESPACE_BEGIN
21
22 /* Stack */
23
24 /* SVM stack has a fixed size */
25 #define SVM_STACK_SIZE 255
26 /* SVM stack offsets with this value indicate that it's not on the stack */
27 #define SVM_STACK_INVALID 255 
28
29 #define SVM_BUMP_EVAL_STATE_SIZE 9
30
31 /* Nodes */
32
33 /* Known frequencies of used nodes, used for selective nodes compilation
34  * in the kernel. Currently only affects split OpenCL kernel.
35  *
36  * Keep as defines so it's easy to check which nodes are to be compiled
37  * from preprocessor.
38  *
39  * Lower the number of group more often the node is used.
40  */
41 #define NODE_GROUP_LEVEL_0    0
42 #define NODE_GROUP_LEVEL_1    1
43 #define NODE_GROUP_LEVEL_2    2
44 #define NODE_GROUP_LEVEL_3    3
45 #define NODE_GROUP_LEVEL_MAX  NODE_GROUP_LEVEL_3
46
47 #define NODE_FEATURE_VOLUME     (1 << 0)
48 #define NODE_FEATURE_HAIR       (1 << 1)
49 #define NODE_FEATURE_BUMP       (1 << 2)
50 #define NODE_FEATURE_BUMP_STATE (1 << 3)
51 /* TODO(sergey): Consider using something like ((uint)(-1)).
52  * Need to check carefully operand types around usage of this
53  * define first.
54  */
55 #define NODE_FEATURE_ALL        (NODE_FEATURE_VOLUME|NODE_FEATURE_HAIR|NODE_FEATURE_BUMP|NODE_FEATURE_BUMP_STATE)
56
57 typedef enum ShaderNodeType {
58         NODE_END = 0,
59         NODE_CLOSURE_BSDF,
60         NODE_CLOSURE_EMISSION,
61         NODE_CLOSURE_BACKGROUND,
62         NODE_CLOSURE_SET_WEIGHT,
63         NODE_CLOSURE_WEIGHT,
64         NODE_MIX_CLOSURE,
65         NODE_JUMP_IF_ZERO,
66         NODE_JUMP_IF_ONE,
67         NODE_TEX_IMAGE,
68         NODE_TEX_IMAGE_BOX,
69         NODE_TEX_SKY,
70         NODE_GEOMETRY,
71         NODE_GEOMETRY_DUPLI,
72         NODE_LIGHT_PATH,
73         NODE_VALUE_F,
74         NODE_VALUE_V,
75         NODE_MIX,
76         NODE_ATTR,
77         NODE_CONVERT,
78         NODE_FRESNEL,
79         NODE_WIREFRAME,
80         NODE_WAVELENGTH,
81         NODE_BLACKBODY,
82         NODE_EMISSION_WEIGHT,
83         NODE_TEX_GRADIENT,
84         NODE_TEX_VORONOI,
85         NODE_TEX_MUSGRAVE,
86         NODE_TEX_WAVE,
87         NODE_TEX_MAGIC,
88         NODE_TEX_NOISE,
89         NODE_SHADER_JUMP,
90         NODE_SET_DISPLACEMENT,
91         NODE_GEOMETRY_BUMP_DX,
92         NODE_GEOMETRY_BUMP_DY,
93         NODE_SET_BUMP,
94         NODE_MATH,
95         NODE_VECTOR_MATH,
96         NODE_VECTOR_TRANSFORM,
97         NODE_MAPPING,
98         NODE_TEX_COORD,
99         NODE_TEX_COORD_BUMP_DX,
100         NODE_TEX_COORD_BUMP_DY,
101         NODE_ATTR_BUMP_DX,
102         NODE_ATTR_BUMP_DY,
103         NODE_TEX_ENVIRONMENT,
104         NODE_CLOSURE_HOLDOUT,
105         NODE_LAYER_WEIGHT,
106         NODE_CLOSURE_VOLUME,
107         NODE_SEPARATE_VECTOR,
108         NODE_COMBINE_VECTOR,
109         NODE_SEPARATE_HSV,
110         NODE_COMBINE_HSV,
111         NODE_HSV,
112         NODE_CAMERA,
113         NODE_INVERT,
114         NODE_NORMAL,
115         NODE_GAMMA,
116         NODE_TEX_CHECKER,
117         NODE_BRIGHTCONTRAST,
118         NODE_RGB_RAMP,
119         NODE_RGB_CURVES,
120         NODE_VECTOR_CURVES,
121         NODE_MIN_MAX,
122         NODE_LIGHT_FALLOFF,
123         NODE_OBJECT_INFO,
124         NODE_PARTICLE_INFO,
125         NODE_TEX_BRICK,
126         NODE_CLOSURE_SET_NORMAL,
127         NODE_CLOSURE_AMBIENT_OCCLUSION,
128         NODE_TANGENT,
129         NODE_NORMAL_MAP,
130         NODE_HAIR_INFO,
131         NODE_UVMAP,
132         NODE_TEX_VOXEL,
133         NODE_ENTER_BUMP_EVAL,
134         NODE_LEAVE_BUMP_EVAL,
135         NODE_BEVEL,
136         NODE_DISPLACEMENT,
137         NODE_VECTOR_DISPLACEMENT,
138         NODE_PRINCIPLED_VOLUME,
139 } ShaderNodeType;
140
141 typedef enum NodeAttributeType {
142         NODE_ATTR_FLOAT = 0,
143         NODE_ATTR_FLOAT3,
144         NODE_ATTR_MATRIX
145 } NodeAttributeType;
146
147 typedef enum NodeGeometry {
148         NODE_GEOM_P = 0,
149         NODE_GEOM_N,
150         NODE_GEOM_T,
151         NODE_GEOM_I,
152         NODE_GEOM_Ng,
153         NODE_GEOM_uv
154 } NodeGeometry;
155
156 typedef enum NodeObjectInfo {
157         NODE_INFO_OB_LOCATION,
158         NODE_INFO_OB_INDEX,
159         NODE_INFO_MAT_INDEX,
160         NODE_INFO_OB_RANDOM
161 } NodeObjectInfo;
162
163 typedef enum NodeParticleInfo {
164         NODE_INFO_PAR_INDEX,
165         NODE_INFO_PAR_RANDOM,
166         NODE_INFO_PAR_AGE,
167         NODE_INFO_PAR_LIFETIME,
168         NODE_INFO_PAR_LOCATION,
169         NODE_INFO_PAR_ROTATION,
170         NODE_INFO_PAR_SIZE,
171         NODE_INFO_PAR_VELOCITY,
172         NODE_INFO_PAR_ANGULAR_VELOCITY
173 } NodeParticleInfo;
174
175 typedef enum NodeHairInfo {
176         NODE_INFO_CURVE_IS_STRAND,
177         NODE_INFO_CURVE_INTERCEPT,
178         NODE_INFO_CURVE_THICKNESS,
179         /*fade for minimum hair width transpency*/
180         /*NODE_INFO_CURVE_FADE,*/
181         NODE_INFO_CURVE_TANGENT_NORMAL,
182         NODE_INFO_CURVE_RANDOM,
183 } NodeHairInfo;
184
185 typedef enum NodeLightPath {
186         NODE_LP_camera = 0,
187         NODE_LP_shadow,
188         NODE_LP_diffuse,
189         NODE_LP_glossy,
190         NODE_LP_singular,
191         NODE_LP_reflection,
192         NODE_LP_transmission,
193         NODE_LP_volume_scatter,
194         NODE_LP_backfacing,
195         NODE_LP_ray_length,
196         NODE_LP_ray_depth,
197         NODE_LP_ray_diffuse,
198         NODE_LP_ray_glossy,
199         NODE_LP_ray_transparent,
200         NODE_LP_ray_transmission,
201 } NodeLightPath;
202
203 typedef enum NodeLightFalloff {
204         NODE_LIGHT_FALLOFF_QUADRATIC,
205         NODE_LIGHT_FALLOFF_LINEAR,
206         NODE_LIGHT_FALLOFF_CONSTANT
207 } NodeLightFalloff;
208
209 typedef enum NodeTexCoord {
210         NODE_TEXCO_NORMAL,
211         NODE_TEXCO_OBJECT,
212         NODE_TEXCO_CAMERA,
213         NODE_TEXCO_WINDOW,
214         NODE_TEXCO_REFLECTION,
215         NODE_TEXCO_DUPLI_GENERATED,
216         NODE_TEXCO_DUPLI_UV,
217         NODE_TEXCO_VOLUME_GENERATED
218 } NodeTexCoord;
219
220 typedef enum NodeMix {
221         NODE_MIX_BLEND = 0,
222         NODE_MIX_ADD,
223         NODE_MIX_MUL,
224         NODE_MIX_SUB,
225         NODE_MIX_SCREEN,
226         NODE_MIX_DIV,
227         NODE_MIX_DIFF,
228         NODE_MIX_DARK,
229         NODE_MIX_LIGHT,
230         NODE_MIX_OVERLAY,
231         NODE_MIX_DODGE,
232         NODE_MIX_BURN,
233         NODE_MIX_HUE,
234         NODE_MIX_SAT,
235         NODE_MIX_VAL,
236         NODE_MIX_COLOR,
237         NODE_MIX_SOFT,
238         NODE_MIX_LINEAR,
239         NODE_MIX_CLAMP /* used for the clamp UI option */
240 } NodeMix;
241
242 typedef enum NodeMath {
243         NODE_MATH_ADD,
244         NODE_MATH_SUBTRACT,
245         NODE_MATH_MULTIPLY,
246         NODE_MATH_DIVIDE,
247         NODE_MATH_SINE,
248         NODE_MATH_COSINE,
249         NODE_MATH_TANGENT,
250         NODE_MATH_ARCSINE,
251         NODE_MATH_ARCCOSINE,
252         NODE_MATH_ARCTANGENT,
253         NODE_MATH_POWER,
254         NODE_MATH_LOGARITHM,
255         NODE_MATH_MINIMUM,
256         NODE_MATH_MAXIMUM,
257         NODE_MATH_ROUND,
258         NODE_MATH_LESS_THAN,
259         NODE_MATH_GREATER_THAN,
260         NODE_MATH_MODULO,
261         NODE_MATH_ABSOLUTE,
262         NODE_MATH_CLAMP /* used for the clamp UI option */
263 } NodeMath;
264
265 typedef enum NodeVectorMath {
266         NODE_VECTOR_MATH_ADD,
267         NODE_VECTOR_MATH_SUBTRACT,
268         NODE_VECTOR_MATH_AVERAGE,
269         NODE_VECTOR_MATH_DOT_PRODUCT,
270         NODE_VECTOR_MATH_CROSS_PRODUCT,
271         NODE_VECTOR_MATH_NORMALIZE
272 } NodeVectorMath;
273
274 typedef enum NodeVectorTransformType {
275         NODE_VECTOR_TRANSFORM_TYPE_VECTOR,
276         NODE_VECTOR_TRANSFORM_TYPE_POINT,
277         NODE_VECTOR_TRANSFORM_TYPE_NORMAL
278 } NodeVectorTransformType;
279
280 typedef enum NodeVectorTransformConvertSpace {
281         NODE_VECTOR_TRANSFORM_CONVERT_SPACE_WORLD,
282         NODE_VECTOR_TRANSFORM_CONVERT_SPACE_OBJECT,
283         NODE_VECTOR_TRANSFORM_CONVERT_SPACE_CAMERA
284 } NodeVectorTransformConvertSpace;
285
286 typedef enum NodeConvert {
287         NODE_CONVERT_FV,
288         NODE_CONVERT_FI,
289         NODE_CONVERT_CF,
290         NODE_CONVERT_CI,
291         NODE_CONVERT_VF,
292         NODE_CONVERT_VI,
293         NODE_CONVERT_IF,
294         NODE_CONVERT_IV
295 } NodeConvert;
296
297 typedef enum NodeMusgraveType {
298         NODE_MUSGRAVE_MULTIFRACTAL,
299         NODE_MUSGRAVE_FBM,
300         NODE_MUSGRAVE_HYBRID_MULTIFRACTAL,
301         NODE_MUSGRAVE_RIDGED_MULTIFRACTAL,
302         NODE_MUSGRAVE_HETERO_TERRAIN
303 } NodeMusgraveType;
304
305 typedef enum NodeWaveType {
306         NODE_WAVE_BANDS,
307         NODE_WAVE_RINGS
308 } NodeWaveType;
309
310 typedef enum NodeWaveProfiles {
311         NODE_WAVE_PROFILE_SIN,
312         NODE_WAVE_PROFILE_SAW,
313 } NodeWaveProfile;
314
315 typedef enum NodeSkyType {
316         NODE_SKY_OLD,
317         NODE_SKY_NEW
318 } NodeSkyType;
319
320 typedef enum NodeGradientType {
321         NODE_BLEND_LINEAR,
322         NODE_BLEND_QUADRATIC,
323         NODE_BLEND_EASING,
324         NODE_BLEND_DIAGONAL,
325         NODE_BLEND_RADIAL,
326         NODE_BLEND_QUADRATIC_SPHERE,
327         NODE_BLEND_SPHERICAL
328 } NodeGradientType;
329
330 typedef enum NodeVoronoiColoring {
331         NODE_VORONOI_INTENSITY,
332         NODE_VORONOI_CELLS
333 } NodeVoronoiColoring;
334
335 typedef enum NodeBlendWeightType {
336         NODE_LAYER_WEIGHT_FRESNEL,
337         NODE_LAYER_WEIGHT_FACING
338 } NodeBlendWeightType;
339
340 typedef enum NodeTangentDirectionType {
341         NODE_TANGENT_RADIAL,
342         NODE_TANGENT_UVMAP
343 } NodeTangentDirectionType;
344
345 typedef enum NodeTangentAxis {
346         NODE_TANGENT_AXIS_X,
347         NODE_TANGENT_AXIS_Y,
348         NODE_TANGENT_AXIS_Z
349 } NodeTangentAxis;
350
351 typedef enum NodeNormalMapSpace {
352         NODE_NORMAL_MAP_TANGENT,
353         NODE_NORMAL_MAP_OBJECT,
354         NODE_NORMAL_MAP_WORLD,
355         NODE_NORMAL_MAP_BLENDER_OBJECT,
356         NODE_NORMAL_MAP_BLENDER_WORLD,
357 } NodeNormalMapSpace;
358
359 typedef enum NodeImageColorSpace {
360         NODE_COLOR_SPACE_NONE  = 0,
361         NODE_COLOR_SPACE_COLOR = 1,
362 } NodeImageColorSpace;
363
364 typedef enum NodeImageProjection {
365         NODE_IMAGE_PROJ_FLAT   = 0,
366         NODE_IMAGE_PROJ_BOX    = 1,
367         NODE_IMAGE_PROJ_SPHERE = 2,
368         NODE_IMAGE_PROJ_TUBE   = 3,
369 } NodeImageProjection;
370
371 typedef enum NodeEnvironmentProjection {
372         NODE_ENVIRONMENT_EQUIRECTANGULAR = 0,
373         NODE_ENVIRONMENT_MIRROR_BALL = 1,
374 } NodeEnvironmentProjection;
375
376 typedef enum NodeBumpOffset {
377         NODE_BUMP_OFFSET_CENTER,
378         NODE_BUMP_OFFSET_DX,
379         NODE_BUMP_OFFSET_DY,
380 } NodeBumpOffset;
381
382 typedef enum NodeTexVoxelSpace {
383         NODE_TEX_VOXEL_SPACE_OBJECT = 0,
384         NODE_TEX_VOXEL_SPACE_WORLD  = 1,
385 } NodeTexVoxelSpace;
386
387 typedef enum ShaderType {
388         SHADER_TYPE_SURFACE,
389         SHADER_TYPE_VOLUME,
390         SHADER_TYPE_DISPLACEMENT,
391         SHADER_TYPE_BUMP,
392 } ShaderType;
393
394 /* Closure */
395
396 typedef enum ClosureType {
397         /* Special type, flags generic node as a non-BSDF. */
398         CLOSURE_NONE_ID,
399
400         CLOSURE_BSDF_ID,
401
402         /* Diffuse */
403         CLOSURE_BSDF_DIFFUSE_ID,
404         CLOSURE_BSDF_OREN_NAYAR_ID,
405         CLOSURE_BSDF_DIFFUSE_RAMP_ID,
406         CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID,
407         CLOSURE_BSDF_PRINCIPLED_SHEEN_ID,
408         CLOSURE_BSDF_DIFFUSE_TOON_ID,
409
410         /* Glossy */
411         CLOSURE_BSDF_REFLECTION_ID,
412         CLOSURE_BSDF_MICROFACET_GGX_ID,
413         CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID,
414         CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID,
415         CLOSURE_BSDF_MICROFACET_BECKMANN_ID,
416         CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID,
417         CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID,
418         CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID,
419         CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID,
420         CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID,
421         CLOSURE_BSDF_MICROFACET_MULTI_GGX_ANISO_ID,
422         CLOSURE_BSDF_MICROFACET_MULTI_GGX_ANISO_FRESNEL_ID,
423         CLOSURE_BSDF_MICROFACET_BECKMANN_ANISO_ID,
424         CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ANISO_ID,
425         CLOSURE_BSDF_ASHIKHMIN_VELVET_ID,
426         CLOSURE_BSDF_PHONG_RAMP_ID,
427         CLOSURE_BSDF_GLOSSY_TOON_ID,
428         CLOSURE_BSDF_HAIR_REFLECTION_ID,
429
430         /* Transmission */
431         CLOSURE_BSDF_TRANSLUCENT_ID,
432         CLOSURE_BSDF_REFRACTION_ID,
433         CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID,
434         CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID,
435         CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID,
436         CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID,
437         CLOSURE_BSDF_MICROFACET_GGX_GLASS_ID,
438         CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID,
439         CLOSURE_BSDF_SHARP_GLASS_ID,
440         CLOSURE_BSDF_HAIR_TRANSMISSION_ID,
441
442         /* Special cases */
443         CLOSURE_BSDF_BSSRDF_ID,
444         CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID,
445         CLOSURE_BSDF_TRANSPARENT_ID,
446
447         /* BSSRDF */
448         CLOSURE_BSSRDF_CUBIC_ID,
449         CLOSURE_BSSRDF_GAUSSIAN_ID,
450         CLOSURE_BSSRDF_PRINCIPLED_ID,
451         CLOSURE_BSSRDF_BURLEY_ID,
452         CLOSURE_BSSRDF_RANDOM_WALK_ID,
453         CLOSURE_BSSRDF_PRINCIPLED_RANDOM_WALK_ID,
454
455         /* Other */
456         CLOSURE_HOLDOUT_ID,
457         CLOSURE_AMBIENT_OCCLUSION_ID,
458
459         /* Volume */
460         CLOSURE_VOLUME_ID,
461         CLOSURE_VOLUME_ABSORPTION_ID,
462         CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID,
463
464         CLOSURE_BSDF_PRINCIPLED_ID,
465
466         NBUILTIN_CLOSURES
467 } ClosureType;
468
469 /* watch this, being lazy with memory usage */
470 #define CLOSURE_IS_BSDF(type) (type <= CLOSURE_BSDF_TRANSPARENT_ID)
471 #define CLOSURE_IS_BSDF_DIFFUSE(type) (type >= CLOSURE_BSDF_DIFFUSE_ID && type <= CLOSURE_BSDF_DIFFUSE_TOON_ID)
472 #define CLOSURE_IS_BSDF_GLOSSY(type) (type >= CLOSURE_BSDF_REFLECTION_ID && type <= CLOSURE_BSDF_HAIR_REFLECTION_ID)
473 #define CLOSURE_IS_BSDF_TRANSMISSION(type) (type >= CLOSURE_BSDF_TRANSLUCENT_ID && type <= CLOSURE_BSDF_HAIR_TRANSMISSION_ID)
474 #define CLOSURE_IS_BSDF_BSSRDF(type) (type == CLOSURE_BSDF_BSSRDF_ID || type == CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID)
475 #define CLOSURE_IS_BSDF_SINGULAR(type) (type == CLOSURE_BSDF_REFLECTION_ID || \
476                                         type == CLOSURE_BSDF_REFRACTION_ID || \
477                                         type == CLOSURE_BSDF_TRANSPARENT_ID)
478 #define CLOSURE_IS_BSDF_TRANSPARENT(type) (type == CLOSURE_BSDF_TRANSPARENT_ID)
479 #define CLOSURE_IS_BSDF_MULTISCATTER(type) (type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID ||\
480                                             type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_ANISO_ID || \
481                                             type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID)
482 #define CLOSURE_IS_BSDF_MICROFACET(type) ((type >= CLOSURE_BSDF_MICROFACET_GGX_ID && type <= CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ANISO_ID) ||\
483                                           (type >= CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID && type <= CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID) ||\
484                                           (type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID))
485 #define CLOSURE_IS_BSDF_OR_BSSRDF(type) (type <= CLOSURE_BSSRDF_PRINCIPLED_RANDOM_WALK_ID)
486 #define CLOSURE_IS_BSSRDF(type) (type >= CLOSURE_BSSRDF_CUBIC_ID && type <= CLOSURE_BSSRDF_PRINCIPLED_RANDOM_WALK_ID)
487 #define CLOSURE_IS_DISK_BSSRDF(type) (type >= CLOSURE_BSSRDF_CUBIC_ID && type <= CLOSURE_BSSRDF_BURLEY_ID)
488 #define CLOSURE_IS_VOLUME(type) (type >= CLOSURE_VOLUME_ID && type <= CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
489 #define CLOSURE_IS_VOLUME_SCATTER(type) (type == CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
490 #define CLOSURE_IS_VOLUME_ABSORPTION(type) (type == CLOSURE_VOLUME_ABSORPTION_ID)
491 #define CLOSURE_IS_HOLDOUT(type) (type == CLOSURE_HOLDOUT_ID)
492 #define CLOSURE_IS_AMBIENT_OCCLUSION(type) (type == CLOSURE_AMBIENT_OCCLUSION_ID)
493 #define CLOSURE_IS_PHASE(type) (type == CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
494 #define CLOSURE_IS_GLASS(type) (type >= CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID && type <= CLOSURE_BSDF_SHARP_GLASS_ID)
495 #define CLOSURE_IS_PRINCIPLED(type) (type == CLOSURE_BSDF_PRINCIPLED_ID)
496
497 #define CLOSURE_WEIGHT_CUTOFF 1e-5f
498
499 CCL_NAMESPACE_END
500
501 #endif /*  __SVM_TYPES_H__ */
502