Blender  V3.3
math_util.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
4 #pragma once
5 
7 
11  float3 a,
12  float3 b,
13  float3 c,
14  float param1)
15 {
16  switch (type) {
18  *vector = a + b;
19  break;
21  *vector = a - b;
22  break;
24  *vector = a * b;
25  break;
27  *vector = safe_divide(a, b);
28  break;
30  *vector = cross(a, b);
31  break;
33  *vector = project(a, b);
34  break;
36  *vector = reflect(a, b);
37  break;
39  *vector = refract(a, normalize(b), param1);
40  break;
42  *vector = faceforward(a, b, c);
43  break;
45  *vector = a * b + c;
46  break;
48  *value = dot(a, b);
49  break;
51  *value = distance(a, b);
52  break;
54  *value = len(a);
55  break;
57  *vector = a * param1;
58  break;
61  break;
63  *vector = floor(safe_divide(a, b)) * b;
64  break;
66  *vector = floor(a);
67  break;
69  *vector = ceil(a);
70  break;
72  *vector = make_float3(safe_modulo(a.x, b.x), safe_modulo(a.y, b.y), safe_modulo(a.z, b.z));
73  break;
75  *vector = make_float3(wrapf(a.x, b.x, c.x), wrapf(a.y, b.y, c.y), wrapf(a.z, b.z, c.z));
76  break;
78  *vector = a - floor(a);
79  break;
81  *vector = fabs(a);
82  break;
84  *vector = min(a, b);
85  break;
87  *vector = max(a, b);
88  break;
90  *vector = make_float3(sinf(a.x), sinf(a.y), sinf(a.z));
91  break;
93  *vector = make_float3(cosf(a.x), cosf(a.y), cosf(a.z));
94  break;
96  *vector = make_float3(tanf(a.x), tanf(a.y), tanf(a.z));
97  break;
98  default:
99  *vector = zero_float3();
100  *value = 0.0f;
101  }
102 }
103 
104 ccl_device float svm_math(NodeMathType type, float a, float b, float c)
105 {
106  switch (type) {
107  case NODE_MATH_ADD:
108  return a + b;
109  case NODE_MATH_SUBTRACT:
110  return a - b;
111  case NODE_MATH_MULTIPLY:
112  return a * b;
113  case NODE_MATH_DIVIDE:
114  return safe_divide(a, b);
115  case NODE_MATH_POWER:
116  return safe_powf(a, b);
117  case NODE_MATH_LOGARITHM:
118  return safe_logf(a, b);
119  case NODE_MATH_SQRT:
120  return safe_sqrtf(a);
121  case NODE_MATH_INV_SQRT:
122  return inversesqrtf(a);
123  case NODE_MATH_ABSOLUTE:
124  return fabsf(a);
125  case NODE_MATH_RADIANS:
126  return a * (M_PI_F / 180.0f);
127  case NODE_MATH_DEGREES:
128  return a * (180.0f / M_PI_F);
129  case NODE_MATH_MINIMUM:
130  return fminf(a, b);
131  case NODE_MATH_MAXIMUM:
132  return fmaxf(a, b);
133  case NODE_MATH_LESS_THAN:
134  return a < b;
136  return a > b;
137  case NODE_MATH_ROUND:
138  return floorf(a + 0.5f);
139  case NODE_MATH_FLOOR:
140  return floorf(a);
141  case NODE_MATH_CEIL:
142  return ceilf(a);
143  case NODE_MATH_FRACTION:
144  return a - floorf(a);
145  case NODE_MATH_MODULO:
146  return safe_modulo(a, b);
147  case NODE_MATH_TRUNC:
148  return a >= 0.0f ? floorf(a) : ceilf(a);
149  case NODE_MATH_SNAP:
150  return floorf(safe_divide(a, b)) * b;
151  case NODE_MATH_WRAP:
152  return wrapf(a, b, c);
153  case NODE_MATH_PINGPONG:
154  return pingpongf(a, b);
155  case NODE_MATH_SINE:
156  return sinf(a);
157  case NODE_MATH_COSINE:
158  return cosf(a);
159  case NODE_MATH_TANGENT:
160  return tanf(a);
161  case NODE_MATH_SINH:
162  return sinhf(a);
163  case NODE_MATH_COSH:
164  return coshf(a);
165  case NODE_MATH_TANH:
166  return tanhf(a);
167  case NODE_MATH_ARCSINE:
168  return safe_asinf(a);
169  case NODE_MATH_ARCCOSINE:
170  return safe_acosf(a);
172  return atanf(a);
173  case NODE_MATH_ARCTAN2:
174  return atan2f(a, b);
175  case NODE_MATH_SIGN:
176  return compatible_signf(a);
177  case NODE_MATH_EXPONENT:
178  return expf(a);
179  case NODE_MATH_COMPARE:
180  return ((a == b) || (fabsf(a - b) <= fmaxf(c, FLT_EPSILON))) ? 1.0f : 0.0f;
182  return a * b + c;
184  return smoothminf(a, b, c);
186  return -smoothminf(-a, -b, c);
187  default:
188  return 0.0f;
189  }
190 }
191 
193 {
194  /* Calculate color in range 800..12000 using an approximation
195  * a/x+bx+c for R and G and ((at + b)t + c)t + d) for B.
196  *
197  * The result of this can be negative to support gamut wider than
198  * than rec.709, just needs to be clamped. */
199 
200  if (t >= 12000.0f) {
201  return make_float3(0.8262954810464208f, 0.9945080501520986f, 1.566307710274283f);
202  }
203  else if (t < 800.0f) {
204  /* Arbitrary lower limit where light is very dim, matching OSL. */
205  return make_float3(5.413294490189271f, -0.20319390035873933f, -0.0822535242887164f);
206  }
207 
208  int i = (t >= 6365.0f) ? 6 :
209  (t >= 3315.0f) ? 5 :
210  (t >= 1902.0f) ? 4 :
211  (t >= 1449.0f) ? 3 :
212  (t >= 1167.0f) ? 2 :
213  (t >= 965.0f) ? 1 :
214  0;
215 
216  ccl_constant float *r = blackbody_table_r[i];
217  ccl_constant float *g = blackbody_table_g[i];
218  ccl_constant float *b = blackbody_table_b[i];
219 
220  const float t_inv = 1.0f / t;
221  return make_float3(r[0] * t_inv + r[1] * t + r[2],
222  g[0] * t_inv + g[1] * t + g[2],
223  ((b[0] * t + b[1]) * t + b[2]) * t + b[3]);
224 }
225 
227 {
228  if (gamma == 0.0f)
229  return make_float3(1.0f, 1.0f, 1.0f);
230 
231  if (color.x > 0.0f)
232  color.x = powf(color.x, gamma);
233  if (color.y > 0.0f)
234  color.y = powf(color.y, gamma);
235  if (color.z > 0.0f)
236  color.z = powf(color.z, gamma);
237 
238  return color;
239 }
240 
MINLINE float safe_sqrtf(float a)
MINLINE float safe_logf(float a, float base)
MINLINE float safe_acosf(float a)
MINLINE float safe_powf(float base, float exponent)
MINLINE float safe_asinf(float a)
@ NODE_VECTOR_MATH_NORMALIZE
@ NODE_VECTOR_MATH_LENGTH
@ NODE_VECTOR_MATH_CROSS_PRODUCT
@ NODE_VECTOR_MATH_CEIL
@ NODE_VECTOR_MATH_MODULO
@ NODE_VECTOR_MATH_ADD
@ NODE_VECTOR_MATH_COSINE
@ NODE_VECTOR_MATH_REFLECT
@ NODE_VECTOR_MATH_WRAP
@ NODE_VECTOR_MATH_REFRACT
@ NODE_VECTOR_MATH_DOT_PRODUCT
@ NODE_VECTOR_MATH_ABSOLUTE
@ NODE_VECTOR_MATH_DIVIDE
@ NODE_VECTOR_MATH_TANGENT
@ NODE_VECTOR_MATH_DISTANCE
@ NODE_VECTOR_MATH_FLOOR
@ NODE_VECTOR_MATH_SNAP
@ NODE_VECTOR_MATH_SINE
@ NODE_VECTOR_MATH_FRACTION
@ NODE_VECTOR_MATH_PROJECT
@ NODE_VECTOR_MATH_MULTIPLY
@ NODE_VECTOR_MATH_SCALE
@ NODE_VECTOR_MATH_MAXIMUM
@ NODE_VECTOR_MATH_FACEFORWARD
@ NODE_VECTOR_MATH_SUBTRACT
@ NODE_VECTOR_MATH_MULTIPLY_ADD
@ NODE_VECTOR_MATH_MINIMUM
@ NODE_MATH_SINH
@ NODE_MATH_SMOOTH_MIN
@ NODE_MATH_TRUNC
@ NODE_MATH_COSH
@ NODE_MATH_SIGN
@ NODE_MATH_DEGREES
@ NODE_MATH_MODULO
@ NODE_MATH_ABSOLUTE
@ NODE_MATH_DIVIDE
@ NODE_MATH_SINE
@ NODE_MATH_ARCTAN2
@ NODE_MATH_ARCCOSINE
@ NODE_MATH_MULTIPLY_ADD
@ NODE_MATH_POWER
@ NODE_MATH_WRAP
@ NODE_MATH_ARCTANGENT
@ NODE_MATH_MINIMUM
@ NODE_MATH_SQRT
@ NODE_MATH_CEIL
@ NODE_MATH_TANH
@ NODE_MATH_GREATER_THAN
@ NODE_MATH_ADD
@ NODE_MATH_FRACTION
@ NODE_MATH_EXPONENT
@ NODE_MATH_LESS_THAN
@ NODE_MATH_ARCSINE
@ NODE_MATH_MAXIMUM
@ NODE_MATH_LOGARITHM
@ NODE_MATH_COMPARE
@ NODE_MATH_INV_SQRT
@ NODE_MATH_MULTIPLY
@ NODE_MATH_PINGPONG
@ NODE_MATH_ROUND
@ NODE_MATH_FLOOR
@ NODE_MATH_SUBTRACT
@ NODE_MATH_COSINE
@ NODE_MATH_SNAP
@ NODE_MATH_TANGENT
@ NODE_MATH_SMOOTH_MAX
@ NODE_MATH_RADIANS
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
#define sinf(x)
Definition: cuda/compat.h:102
#define cosf(x)
Definition: cuda/compat.h:101
#define ccl_device
Definition: cuda/compat.h:32
#define ccl_constant
Definition: cuda/compat.h:46
#define expf(x)
Definition: cuda/compat.h:106
#define ccl_private
Definition: cuda/compat.h:48
#define ccl_device_inline
Definition: cuda/compat.h:34
#define tanf(x)
Definition: cuda/compat.h:104
#define powf(x, y)
Definition: cuda/compat.h:103
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
int len
Definition: draw_manager.c:108
NodeMathType
NodeVectorMathType
ccl_inline_constant float blackbody_table_r[][3]
Definition: kernel/tables.h:6
ccl_inline_constant float blackbody_table_g[][3]
Definition: kernel/tables.h:16
ccl_inline_constant float blackbody_table_b[][4]
Definition: kernel/tables.h:26
MINLINE float smoothminf(float a, float b, float c)
MINLINE float pingpongf(float value, float scale)
MINLINE float compatible_signf(float f)
MINLINE float wrapf(float value, float max, float min)
ccl_device_inline float2 safe_normalize(const float2 &a)
Definition: math_float2.h:201
ccl_device_inline float2 fabs(const float2 &a)
Definition: math_float2.h:222
ccl_device_inline float3 refract(const float3 incident, const float3 normal, const float eta)
Definition: math_float3.h:435
ccl_device_inline float3 faceforward(const float3 vector, const float3 incident, const float3 reference)
Definition: math_float3.h:444
ccl_device_inline float3 ceil(const float3 &a)
Definition: math_float3.h:363
ccl_device_inline float3 zero_float3()
Definition: math_float3.h:80
ccl_device_inline float3 reflect(const float3 incident, const float3 normal)
Definition: math_float3.h:429
CCL_NAMESPACE_BEGIN ccl_device void svm_vector_math(ccl_private float *value, ccl_private float3 *vector, NodeVectorMathType type, float3 a, float3 b, float3 c, float param1)
Definition: math_util.h:8
ccl_device float svm_math(NodeMathType type, float a, float b, float c)
Definition: math_util.h:104
ccl_device float3 svm_math_blackbody_color_rec709(float t)
Definition: math_util.h:192
ccl_device_inline float3 svm_math_gamma_color(float3 color, float gamma)
Definition: math_util.h:226
#define atan2f(x, y)
Definition: metal/compat.h:227
#define fmaxf(x, y)
Definition: metal/compat.h:228
#define ceilf(x)
Definition: metal/compat.h:225
#define atanf(x)
Definition: metal/compat.h:223
#define fminf(x, y)
Definition: metal/compat.h:229
#define floorf(x)
Definition: metal/compat.h:224
#define tanhf(x)
Definition: metal/compat.h:233
#define sinhf(x)
Definition: metal/compat.h:231
#define coshf(x)
Definition: metal/compat.h:232
#define fabsf(x)
Definition: metal/compat.h:219
#define make_float3(x, y, z)
Definition: metal/compat.h:204
static unsigned c
Definition: RandGen.cpp:83
static unsigned a[3]
Definition: RandGen.cpp:78
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
vec_base< T, 3 > cross(const vec_base< T, 3 > &a, const vec_base< T, 3 > &b)
T distance(const T &a, const T &b)
vec_base< T, Size > normalize(const vec_base< T, Size > &v)
vec_base< T, Size > project(const vec_base< T, Size > &p, const vec_base< T, Size > &v_proj)
T floor(const T &a)
T safe_divide(const T &a, const T &b)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static const pxr::TfToken g("g", pxr::TfToken::Immortal)
float safe_modulo(float a, float b)
Definition: node_math.h:16
#define min(a, b)
Definition: sort.c:35
float max
ccl_device_inline float inversesqrtf(float f)
Definition: util/math.h:682
#define M_PI_F
Definition: util/math.h:34