2 * Copyright 2011-2013 Blender Foundation
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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
17 #ifndef __SVM_TYPES_H__
18 #define __SVM_TYPES_H__
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
31 typedef enum NodeType {
34 NODE_CLOSURE_EMISSION,
35 NODE_CLOSURE_BACKGROUND,
36 NODE_CLOSURE_SET_WEIGHT,
63 NODE_SET_DISPLACEMENT,
64 NODE_GEOMETRY_BUMP_DX,
65 NODE_GEOMETRY_BUMP_DY,
69 NODE_VECTOR_TRANSFORM,
72 NODE_TEX_COORD_BUMP_DX,
73 NODE_TEX_COORD_BUMP_DY,
75 NODE_EMISSION_SET_WEIGHT_TOTAL,
101 NODE_CLOSURE_SET_NORMAL,
102 NODE_CLOSURE_AMBIENT_OCCLUSION,
108 typedef enum NodeAttributeType {
113 typedef enum NodeGeometry {
122 typedef enum NodeObjectInfo {
123 NODE_INFO_OB_LOCATION,
129 typedef enum NodeParticleInfo {
132 NODE_INFO_PAR_LIFETIME,
133 NODE_INFO_PAR_LOCATION,
134 NODE_INFO_PAR_ROTATION,
136 NODE_INFO_PAR_VELOCITY,
137 NODE_INFO_PAR_ANGULAR_VELOCITY
140 typedef enum NodeHairInfo {
141 NODE_INFO_CURVE_IS_STRAND,
142 NODE_INFO_CURVE_INTERCEPT,
143 NODE_INFO_CURVE_THICKNESS,
144 /*fade for minimum hair width transpency*/
145 /*NODE_INFO_CURVE_FADE,*/
146 NODE_INFO_CURVE_TANGENT_NORMAL
149 typedef enum NodeLightPath {
156 NODE_LP_transmission,
157 NODE_LP_volume_scatter,
163 typedef enum NodeLightFalloff {
164 NODE_LIGHT_FALLOFF_QUADRATIC,
165 NODE_LIGHT_FALLOFF_LINEAR,
166 NODE_LIGHT_FALLOFF_CONSTANT
169 typedef enum NodeTexCoord {
174 NODE_TEXCO_REFLECTION,
175 NODE_TEXCO_DUPLI_GENERATED,
179 typedef enum NodeMix {
198 NODE_MIX_CLAMP /* used for the clamp UI option */
201 typedef enum NodeMath {
211 NODE_MATH_ARCTANGENT,
218 NODE_MATH_GREATER_THAN,
220 NODE_MATH_CLAMP /* used for the clamp UI option */
223 typedef enum NodeVectorMath {
224 NODE_VECTOR_MATH_ADD,
225 NODE_VECTOR_MATH_SUBTRACT,
226 NODE_VECTOR_MATH_AVERAGE,
227 NODE_VECTOR_MATH_DOT_PRODUCT,
228 NODE_VECTOR_MATH_CROSS_PRODUCT,
229 NODE_VECTOR_MATH_NORMALIZE
232 typedef enum NodeVectorTransformType {
233 NODE_VECTOR_TRANSFORM_TYPE_VECTOR,
234 NODE_VECTOR_TRANSFORM_TYPE_POINT,
235 NODE_VECTOR_TRANSFORM_TYPE_NORMAL
236 } NodeVectorTransformType;
238 typedef enum NodeVectorTransformConvertSpace {
239 NODE_VECTOR_TRANSFORM_CONVERT_SPACE_WORLD,
240 NODE_VECTOR_TRANSFORM_CONVERT_SPACE_OBJECT,
241 NODE_VECTOR_TRANSFORM_CONVERT_SPACE_CAMERA
242 } NodeVectorTransformConvertSpace;
244 typedef enum NodeConvert {
255 typedef enum NodeDistanceMetric {
256 NODE_VORONOI_DISTANCE_SQUARED,
257 NODE_VORONOI_ACTUAL_DISTANCE,
258 NODE_VORONOI_MANHATTAN,
259 NODE_VORONOI_CHEBYCHEV,
260 NODE_VORONOI_MINKOVSKY_H,
261 NODE_VORONOI_MINKOVSKY_4,
262 NODE_VORONOI_MINKOVSKY
263 } NodeDistanceMetric;
265 typedef enum NodeNoiseBasis {
267 NODE_NOISE_VORONOI_F1,
268 NODE_NOISE_VORONOI_F2,
269 NODE_NOISE_VORONOI_F3,
270 NODE_NOISE_VORONOI_F4,
271 NODE_NOISE_VORONOI_F2_F1,
272 NODE_NOISE_VORONOI_CRACKLE,
273 NODE_NOISE_CELL_NOISE
276 typedef enum NodeMusgraveType {
277 NODE_MUSGRAVE_MULTIFRACTAL,
279 NODE_MUSGRAVE_HYBRID_MULTIFRACTAL,
280 NODE_MUSGRAVE_RIDGED_MULTIFRACTAL,
281 NODE_MUSGRAVE_HETERO_TERRAIN
284 typedef enum NodeWaveType {
289 typedef enum NodeSkyType {
294 typedef enum NodeGradientType {
296 NODE_BLEND_QUADRATIC,
300 NODE_BLEND_QUADRATIC_SPHERE,
304 typedef enum NodeVoronoiColoring {
305 NODE_VORONOI_INTENSITY,
307 } NodeVoronoiColoring;
309 typedef enum NodeBlendWeightType {
310 NODE_LAYER_WEIGHT_FRESNEL,
311 NODE_LAYER_WEIGHT_FACING
312 } NodeBlendWeightType;
314 typedef enum NodeTangentDirectionType {
317 } NodeTangentDirectionType;
319 typedef enum NodeTangentAxis {
325 typedef enum NodeNormalMapSpace {
326 NODE_NORMAL_MAP_TANGENT,
327 NODE_NORMAL_MAP_OBJECT,
328 NODE_NORMAL_MAP_WORLD,
329 NODE_NORMAL_MAP_BLENDER_OBJECT,
330 NODE_NORMAL_MAP_BLENDER_WORLD,
331 } NodeNormalMapSpace;
333 typedef enum ShaderType {
336 SHADER_TYPE_DISPLACEMENT
341 typedef enum ClosureType {
345 CLOSURE_BSDF_DIFFUSE_ID,
346 CLOSURE_BSDF_OREN_NAYAR_ID,
347 CLOSURE_BSDF_WESTIN_SHEEN_ID,
348 CLOSURE_BSDF_DIFFUSE_RAMP_ID,
349 CLOSURE_BSDF_DIFFUSE_TOON_ID,
352 CLOSURE_BSDF_GLOSSY_ID,
353 CLOSURE_BSDF_REFLECTION_ID,
354 CLOSURE_BSDF_MICROFACET_GGX_ID,
355 CLOSURE_BSDF_MICROFACET_BECKMANN_ID,
356 CLOSURE_BSDF_WARD_ID,
357 CLOSURE_BSDF_ASHIKHMIN_VELVET_ID,
358 CLOSURE_BSDF_WESTIN_BACKSCATTER_ID,
359 CLOSURE_BSDF_PHONG_RAMP_ID,
360 CLOSURE_BSDF_GLOSSY_TOON_ID,
361 CLOSURE_BSDF_HAIR_REFLECTION_ID,
365 CLOSURE_BSDF_TRANSMISSION_ID,
366 CLOSURE_BSDF_TRANSLUCENT_ID,
367 CLOSURE_BSDF_REFRACTION_ID,
368 CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID,
369 CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID,
370 CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID,
371 CLOSURE_BSDF_MICROFACET_GGX_GLASS_ID,
372 CLOSURE_BSDF_SHARP_GLASS_ID,
373 CLOSURE_BSDF_HAIR_TRANSMISSION_ID,
377 CLOSURE_BSDF_BSSRDF_ID,
378 CLOSURE_BSDF_TRANSPARENT_ID,
381 CLOSURE_BSSRDF_CUBIC_ID,
382 CLOSURE_BSSRDF_GAUSSIAN_ID,
387 CLOSURE_BACKGROUND_ID,
389 CLOSURE_AMBIENT_OCCLUSION_ID,
393 CLOSURE_VOLUME_ABSORPTION_ID,
394 CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID,
399 /* watch this, being lazy with memory usage */
400 #define CLOSURE_IS_BSDF(type) (type <= CLOSURE_BSDF_TRANSPARENT_ID)
401 #define CLOSURE_IS_BSDF_DIFFUSE(type) (type >= CLOSURE_BSDF_DIFFUSE_ID && type <= CLOSURE_BSDF_DIFFUSE_TOON_ID)
402 #define CLOSURE_IS_BSDF_GLOSSY(type) (type >= CLOSURE_BSDF_GLOSSY_ID && type <= CLOSURE_BSDF_HAIR_REFLECTION_ID)
403 #define CLOSURE_IS_BSDF_TRANSMISSION(type) (type >= CLOSURE_BSDF_TRANSMISSION_ID && type <= CLOSURE_BSDF_HAIR_TRANSMISSION_ID)
404 #define CLOSURE_IS_BSDF_BSSRDF(type) (type == CLOSURE_BSDF_BSSRDF_ID)
405 #define CLOSURE_IS_BSSRDF(type) (type >= CLOSURE_BSSRDF_CUBIC_ID && type <= CLOSURE_BSSRDF_GAUSSIAN_ID)
406 #define CLOSURE_IS_VOLUME(type) (type >= CLOSURE_VOLUME_ID && type <= CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
407 #define CLOSURE_IS_EMISSION(type) (type == CLOSURE_EMISSION_ID)
408 #define CLOSURE_IS_HOLDOUT(type) (type == CLOSURE_HOLDOUT_ID)
409 #define CLOSURE_IS_BACKGROUND(type) (type == CLOSURE_BACKGROUND_ID)
410 #define CLOSURE_IS_AMBIENT_OCCLUSION(type) (type == CLOSURE_AMBIENT_OCCLUSION_ID)
412 #define CLOSURE_WEIGHT_CUTOFF 1e-5f
416 #endif /* __SVM_TYPES_H__ */