Blender  V2.93
Macros | Functions
util_math.h File Reference
#include <cmath>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include "util/util_types.h"
#include "util/util_math_int2.h"
#include "util/util_math_int3.h"
#include "util/util_math_int4.h"
#include "util/util_math_float2.h"
#include "util/util_math_float3.h"
#include "util/util_math_float4.h"
#include "util/util_rect.h"

Go to the source code of this file.

Macros

#define M_PI_F   (3.1415926535897932f) /* pi */
 
#define M_PI_2_F   (1.5707963267948966f) /* pi/2 */
 
#define M_PI_4_F   (0.7853981633974830f) /* pi/4 */
 
#define M_1_PI_F   (0.3183098861837067f) /* 1/pi */
 
#define M_2_PI_F   (0.6366197723675813f) /* 2/pi */
 
#define M_1_2PI_F   (0.1591549430918953f) /* 1/(2*pi) */
 
#define M_SQRT_PI_8_F   (0.6266570686577501f) /* sqrt(pi/8) */
 
#define M_LN_2PI_F   (1.8378770664093454f) /* ln(2*pi) */
 
#define M_2PI_F   (6.2831853071795864f) /* 2*pi */
 
#define M_4PI_F   (12.566370614359172f) /* 4*pi */
 
#define M_SQRT2_F   (1.4142135623730950f) /* sqrt(2) */
 
#define M_LN2_F   (0.6931471805599453f) /* ln(2) */
 
#define M_LN10_F   (2.3025850929940457f) /* ln(10) */
 

Functions

ccl_device_inline int abs (int x)
 
ccl_device_inline int max (int a, int b)
 
ccl_device_inline int min (int a, int b)
 
ccl_device_inline float max (float a, float b)
 
ccl_device_inline float min (float a, float b)
 
ccl_device_inline double max (double a, double b)
 
ccl_device_inline double min (double a, double b)
 
template<typename T >
ccl_device_inline T min4 (const T &a, const T &b, const T &c, const T &d)
 
template<typename T >
ccl_device_inline T max4 (const T &a, const T &b, const T &c, const T &d)
 
ccl_device_inline float min4 (float a, float b, float c, float d)
 
ccl_device_inline float max4 (float a, float b, float c, float d)
 
ccl_device_inline int as_int (uint i)
 
ccl_device_inline uint as_uint (int i)
 
ccl_device_inline uint as_uint (float f)
 
ccl_device_inline int __float_as_int (float f)
 
ccl_device_inline float __int_as_float (int i)
 
ccl_device_inline uint __float_as_uint (float f)
 
ccl_device_inline float __uint_as_float (uint i)
 
ccl_device_inline int4 __float4_as_int4 (float4 f)
 
ccl_device_inline float4 __int4_as_float4 (int4 i)
 
ccl_device_inline bool isnan_safe (float f)
 
ccl_device_inline bool isfinite_safe (float f)
 
ccl_device_inline float ensure_finite (float v)
 
ccl_device_inline int clamp (int a, int mn, int mx)
 
ccl_device_inline float clamp (float a, float mn, float mx)
 
ccl_device_inline float mix (float a, float b, float t)
 
ccl_device_inline float smoothstep (float edge0, float edge1, float x)
 
ccl_device_inline float saturate (float a)
 
ccl_device_inline int float_to_int (float f)
 
ccl_device_inline int floor_to_int (float f)
 
ccl_device_inline int quick_floor_to_int (float x)
 
ccl_device_inline float floorfrac (float x, int *i)
 
ccl_device_inline int ceil_to_int (float f)
 
ccl_device_inline float fractf (float x)
 
ccl_device_inline float wrapf (float value, float max, float min)
 
ccl_device_inline float pingpongf (float a, float b)
 
ccl_device_inline float smoothminf (float a, float b, float k)
 
ccl_device_inline float signf (float f)
 
ccl_device_inline float nonzerof (float f, float eps)
 
ccl_device_inline float compatible_signf (float f)
 
ccl_device_inline float smoothstepf (float f)
 
ccl_device_inline int mod (int x, int m)
 
ccl_device_inline float3 float2_to_float3 (const float2 a)
 
ccl_device_inline float3 float4_to_float3 (const float4 a)
 
ccl_device_inline float4 float3_to_float4 (const float3 a)
 
ccl_device_inline float inverse_lerp (float a, float b, float x)
 
ccl_device_inline float cubic_interp (float a, float b, float c, float d, float x)
 
template<class A , class B >
CCL_NAMESPACE_END CCL_NAMESPACE_BEGIN A lerp (const A &a, const A &b, const B &t)
 
ccl_device_inline float triangle_area (const float3 &v1, const float3 &v2, const float3 &v3)
 
ccl_device_inline void make_orthonormals (const float3 N, float3 *a, float3 *b)
 
ccl_device_inline float3 safe_invert_color (float3 a)
 
ccl_device_inline float3 safe_divide_color (float3 a, float3 b)
 
ccl_device_inline float3 safe_divide_even_color (float3 a, float3 b)
 
ccl_device_inline float3 rotate_around_axis (float3 p, float3 axis, float angle)
 
ccl_device_inline float safe_sqrtf (float f)
 
ccl_device_inline float inversesqrtf (float f)
 
ccl_device float safe_asinf (float a)
 
ccl_device float safe_acosf (float a)
 
ccl_device float compatible_powf (float x, float y)
 
ccl_device float safe_powf (float a, float b)
 
ccl_device float safe_divide (float a, float b)
 
ccl_device float safe_logf (float a, float b)
 
ccl_device float safe_modulo (float a, float b)
 
ccl_device_inline float sqr (float a)
 
ccl_device_inline float pow20 (float a)
 
ccl_device_inline float pow22 (float a)
 
ccl_device_inline float beta (float x, float y)
 
ccl_device_inline float xor_signmask (float x, int y)
 
ccl_device float bits_to_01 (uint bits)
 
ccl_device_inline uint count_leading_zeros (uint x)
 
ccl_device_inline uint count_trailing_zeros (uint x)
 
ccl_device_inline uint find_first_set (uint x)
 
ccl_device_inline float2 map_to_tube (const float3 co)
 
ccl_device_inline float2 map_to_sphere (const float3 co)
 
ccl_device_inline float compare_floats (float a, float b, float abs_diff, int ulp_diff)
 
ccl_device_inline float precise_angle (float3 a, float3 b)
 

Macro Definition Documentation

◆ M_1_2PI_F

#define M_1_2PI_F   (0.1591549430918953f) /* 1/(2*pi) */

Definition at line 58 of file util_math.h.

◆ M_1_PI_F

#define M_1_PI_F   (0.3183098861837067f) /* 1/pi */

Definition at line 52 of file util_math.h.

◆ M_2_PI_F

#define M_2_PI_F   (0.6366197723675813f) /* 2/pi */

Definition at line 55 of file util_math.h.

◆ M_2PI_F

#define M_2PI_F   (6.2831853071795864f) /* 2*pi */

Definition at line 69 of file util_math.h.

◆ M_4PI_F

#define M_4PI_F   (12.566370614359172f) /* 4*pi */

Definition at line 72 of file util_math.h.

◆ M_LN10_F

#define M_LN10_F   (2.3025850929940457f) /* ln(10) */

Definition at line 83 of file util_math.h.

◆ M_LN2_F

#define M_LN2_F   (0.6931471805599453f) /* ln(2) */

Definition at line 80 of file util_math.h.

◆ M_LN_2PI_F

#define M_LN_2PI_F   (1.8378770664093454f) /* ln(2*pi) */

Definition at line 64 of file util_math.h.

◆ M_PI_2_F

#define M_PI_2_F   (1.5707963267948966f) /* pi/2 */

Definition at line 46 of file util_math.h.

◆ M_PI_4_F

#define M_PI_4_F   (0.7853981633974830f) /* pi/4 */

Definition at line 49 of file util_math.h.

◆ M_PI_F

#define M_PI_F   (3.1415926535897932f) /* pi */

Definition at line 43 of file util_math.h.

◆ M_SQRT2_F

#define M_SQRT2_F   (1.4142135623730950f) /* sqrt(2) */

Definition at line 77 of file util_math.h.

◆ M_SQRT_PI_8_F

#define M_SQRT_PI_8_F   (0.6266570686577501f) /* sqrt(pi/8) */

Definition at line 61 of file util_math.h.

Function Documentation

◆ __float4_as_int4()

ccl_device_inline int4 __float4_as_int4 ( float4  f)

Definition at line 242 of file util_math.h.

References __float_as_int(), and make_int4.

◆ __float_as_int()

ccl_device_inline int __float_as_int ( float  f)

◆ __float_as_uint()

ccl_device_inline uint __float_as_uint ( float  f)

◆ __int4_as_float4()

ccl_device_inline float4 __int4_as_float4 ( int4  i)

Definition at line 252 of file util_math.h.

References __int_as_float(), make_float4, int4::w, int4::x, int4::y, and int4::z.

◆ __int_as_float()

ccl_device_inline float __int_as_float ( int  i)

◆ __uint_as_float()

ccl_device_inline float __uint_as_float ( uint  i)

◆ abs()

ccl_device_inline int abs ( int  x)

Definition at line 107 of file util_math.h.

References x.

Referenced by compare_floats().

◆ as_int()

ccl_device_inline int as_int ( uint  i)

Definition at line 172 of file util_math.h.

Referenced by BM_mesh_intersect_edges().

◆ as_uint() [1/2]

ccl_device_inline uint as_uint ( float  f)

Definition at line 192 of file util_math.h.

◆ as_uint() [2/2]

ccl_device_inline uint as_uint ( int  i)

Definition at line 182 of file util_math.h.

Referenced by emit_attribute_map_entry().

◆ beta()

ccl_device_inline float beta ( float  x,
float  y 
)

◆ bits_to_01()

ccl_device float bits_to_01 ( uint  bits)

Definition at line 680 of file util_math.h.

References float().

◆ ceil_to_int()

ccl_device_inline int ceil_to_int ( float  f)

Definition at line 342 of file util_math.h.

References ceilf, and float_to_int().

◆ clamp() [1/2]

ccl_device_inline float clamp ( float  a,
float  mn,
float  mx 
)

Definition at line 288 of file util_math.h.

References Freestyle::a, max(), and min().

◆ clamp() [2/2]

ccl_device_inline int clamp ( int  a,
int  mn,
int  mx 
)

Definition at line 283 of file util_math.h.

References Freestyle::a, max(), and min().

Referenced by bsdf_ashikhmin_shirley_setup(), bsdf_hair_reflection_setup(), bsdf_hair_transmission_setup(), bsdf_microfacet_multi_ggx_common_setup(), bsdf_microfacet_multi_ggx_glass_fresnel_setup(), bsdf_microfacet_multi_ggx_glass_setup(), BVHSpatialSplit::BVHSpatialSplit(), MapRangeSmoothstepFunction::call(), MapRangeSmootherstepFunction::call(), Freestyle::CalligraphicShader::CalligraphicShader(), BoundBox2D::clamp(), ClampNode::constant_fold(), RGBRampNode::constant_fold(), blender::compositor::BlurNode::convertToOperations(), create_mesh(), SceneParams::curve_subdivisions(), eevee_lightbake_render_probe_sample(), eevee_lightbake_render_world_sample(), EEVEE_lightbake_update_world_quick(), MapRangeNode::expand(), fast_exp2f(), fast_log2f(), fast_logb(), float_ramp_lookup(), ConstantFolder::fold_mix(), fractal_noise(), fractal_noise_1d(), fractal_noise_2d(), fractal_noise_3d(), fractal_noise_4d(), BVHObjectBinning::get_bin(), kernel_filter_nlm_calc_difference(), light_distribution_sample(), DenoiseTask::load_input_pixels(), ConstantFolder::make_constant_clamp(), Session::map_neighbor_tiles(), DenoiseTask::map_neighboring_tiles(), blender::nodes::map_range_float(), blender::nodes::map_smootherstep(), blender::nodes::map_smoothstep(), mf_ggx_transmission_albedo(), NODE_DEFINE(), ObtainCacheParticleData(), quat_interpolate(), rect_light_sample(), rgb_ramp_lookup(), RVIsolateHighlights_float(), safe_acosf(), safe_asinf(), sample_trimmed_logistic(), saturate(), schlick_fresnel(), blender::bke::set_material_index(), sh_node_map_range_expand_in_mf_network(), sky_texture_precompute_hosek(), smootherstep(), BVHSpatialSplit::split_curve_primitive(), BVHSpatialSplit::split_triangle_primitive(), subsurface_random_walk(), svm_image_texture_wrap_clamp(), svm_node_clamp(), svm_node_closure_bsdf(), svm_node_layer_weight(), svm_node_tex_musgrave(), svm_node_tex_voronoi(), ConstantFolder::try_bypass_or_make_constant(), IK_QSphericalSegment::UpdateAngle(), IK_QRevoluteSegment::UpdateAngle(), IK_QSwingSegment::UpdateAngle(), IK_QElbowSegment::UpdateAngle(), IK_QTranslateSegment::UpdateAngle(), and CCL_NAMESPACE_BEGIN::TextureInterpolator< T >::wrap_clamp().

◆ compare_floats()

ccl_device_inline float compare_floats ( float  a,
float  b,
float  abs_diff,
int  ulp_diff 
)

Definition at line 777 of file util_math.h.

References __float_as_int(), Freestyle::a, abs(), and fabsf.

◆ compatible_powf()

ccl_device float compatible_powf ( float  x,
float  y 
)

Definition at line 606 of file util_math.h.

References fmodf, powf, x, and y.

Referenced by safe_powf().

◆ compatible_signf()

ccl_device_inline float compatible_signf ( float  f)

Definition at line 389 of file util_math.h.

References signf().

◆ count_leading_zeros()

ccl_device_inline uint count_leading_zeros ( uint  x)

Definition at line 685 of file util_math.h.

References x.

Referenced by cmj_w_mask(), count_trailing_zeros(), and find_first_set().

◆ count_trailing_zeros()

ccl_device_inline uint count_trailing_zeros ( uint  x)

Definition at line 703 of file util_math.h.

References count_leading_zeros(), and x.

Referenced by cmj_fast_div_pow2().

◆ cubic_interp()

ccl_device_inline float cubic_interp ( float  a,
float  b,
float  c,
float  d,
float  x 
)

Definition at line 431 of file util_math.h.

References Freestyle::a, Freestyle::c, and x.

Referenced by interpolate_ies_vertical(), and kernel_ies_interp().

◆ ensure_finite()

ccl_device_inline float ensure_finite ( float  v)

Definition at line 277 of file util_math.h.

References isfinite_safe(), and v.

Referenced by snoise_1d(), snoise_2d(), snoise_3d(), and snoise_4d().

◆ find_first_set()

ccl_device_inline uint find_first_set ( uint  x)

Definition at line 721 of file util_math.h.

References count_leading_zeros(), and x.

◆ float2_to_float3()

ccl_device_inline float3 float2_to_float3 ( const float2  a)

Definition at line 410 of file util_math.h.

References Freestyle::a, and make_float3.

Referenced by primitive_motion_vector().

◆ float3_to_float4()

ccl_device_inline float4 float3_to_float4 ( const float3  a)

◆ float4_to_float3()

ccl_device_inline float3 float4_to_float3 ( const float4  a)

◆ float_to_int()

ccl_device_inline int float_to_int ( float  f)

◆ floor_to_int()

ccl_device_inline int floor_to_int ( float  f)

Definition at line 326 of file util_math.h.

References float_to_int(), and floorf.

Referenced by svm_brick().

◆ floorfrac()

ccl_device_inline float floorfrac ( float  x,
int *  i 
)

Definition at line 336 of file util_math.h.

References quick_floor_to_int(), and x.

Referenced by perlin_1d(), perlin_2d(), perlin_3d(), and perlin_4d().

◆ fractf()

ccl_device_inline float fractf ( float  x)

Definition at line 347 of file util_math.h.

References floorf, and x.

Referenced by pingpongf().

◆ inverse_lerp()

ccl_device_inline float inverse_lerp ( float  a,
float  b,
float  x 
)

Definition at line 425 of file util_math.h.

References Freestyle::a, and x.

Referenced by kernel_ies_interp().

◆ inversesqrtf()

ccl_device_inline float inversesqrtf ( float  f)

Definition at line 591 of file util_math.h.

References sqrtf.

Referenced by svm_math().

◆ isfinite_safe()

ccl_device_inline bool isfinite_safe ( float  f)

◆ isnan_safe()

ccl_device_inline bool isnan_safe ( float  f)

Definition at line 264 of file util_math.h.

References __float_as_uint(), and x.

◆ lerp()

template<class A , class B >
CCL_NAMESPACE_END CCL_NAMESPACE_BEGIN A lerp ( const A a,
const A b,
const B t 
)

Definition at line 457 of file util_math.h.

References A, Freestyle::a, B, and t.

◆ make_orthonormals()

ccl_device_inline void make_orthonormals ( const float3  N,
float3 a,
float3 b 
)

◆ map_to_sphere()

ccl_device_inline float2 map_to_sphere ( const float3  co)

Definition at line 751 of file util_math.h.

References atan2f, l, len, M_PI_F, make_float2, safe_acosf(), UNLIKELY, v, float3::x, float3::y, and float3::z.

◆ map_to_tube()

ccl_device_inline float2 map_to_tube ( const float3  co)

Definition at line 737 of file util_math.h.

References atan2f, len, M_PI_F, make_float2, sqrtf, v, float3::x, float3::y, and float3::z.

◆ max() [1/3]

ccl_device_inline double max ( double  a,
double  b 
)

Definition at line 132 of file util_math.h.

References Freestyle::a.

◆ max() [2/3]

ccl_device_inline float max ( float  a,
float  b 
)

Definition at line 122 of file util_math.h.

References Freestyle::a.

◆ max() [3/3]

ccl_device_inline int max ( int  a,
int  b 
)

Definition at line 112 of file util_math.h.

References Freestyle::a.

Referenced by clamp(), max4(), safe_sqrtf(), and wrapf().

◆ max4() [1/2]

template<typename T >
ccl_device_inline T max4 ( const T a,
const T b,
const T c,
const T d 
)

Definition at line 153 of file util_math.h.

References Freestyle::a, Freestyle::c, and max().

Referenced by bvh_aligned_node_intersect(), and bvh_unaligned_node_intersect_child().

◆ max4() [2/2]

ccl_device_inline float max4 ( float  a,
float  b,
float  c,
float  d 
)

Definition at line 164 of file util_math.h.

References Freestyle::a, Freestyle::c, and max().

◆ min() [1/3]

ccl_device_inline double min ( double  a,
double  b 
)

Definition at line 137 of file util_math.h.

References Freestyle::a.

◆ min() [2/3]

ccl_device_inline float min ( float  a,
float  b 
)

Definition at line 127 of file util_math.h.

References Freestyle::a.

◆ min() [3/3]

ccl_device_inline int min ( int  a,
int  b 
)

Definition at line 117 of file util_math.h.

References Freestyle::a.

Referenced by clamp(), min4(), and wrapf().

◆ min4() [1/2]

template<typename T >
ccl_device_inline T min4 ( const T a,
const T b,
const T c,
const T d 
)

Definition at line 148 of file util_math.h.

References Freestyle::a, Freestyle::c, and min().

Referenced by bvh_aligned_node_intersect(), and bvh_unaligned_node_intersect_child().

◆ min4() [2/2]

ccl_device_inline float min4 ( float  a,
float  b,
float  c,
float  d 
)

Definition at line 159 of file util_math.h.

References Freestyle::a, Freestyle::c, and min().

◆ mix()

ccl_device_inline float mix ( float  a,
float  b,
float  t 
)

Definition at line 293 of file util_math.h.

References Freestyle::a, and t.

◆ mod()

ccl_device_inline int mod ( int  x,
int  m 
)

◆ nonzerof()

ccl_device_inline float nonzerof ( float  f,
float  eps 
)

Definition at line 380 of file util_math.h.

References eps, fabsf, and signf().

◆ pingpongf()

ccl_device_inline float pingpongf ( float  a,
float  b 
)

Definition at line 359 of file util_math.h.

References Freestyle::a, fabsf, and fractf().

◆ pow20()

Definition at line 656 of file util_math.h.

References Freestyle::a, and sqr().

◆ pow22()

Definition at line 661 of file util_math.h.

References Freestyle::a, and sqr().

◆ precise_angle()

ccl_device_inline float precise_angle ( float3  a,
float3  b 
)

Definition at line 795 of file util_math.h.

References Freestyle::a, atan2f, and len.

Referenced by sky_radiance_nishita().

◆ quick_floor_to_int()

ccl_device_inline int quick_floor_to_int ( float  x)

Definition at line 331 of file util_math.h.

References float_to_int(), and x.

Referenced by floorfrac(), and quick_floor_to_int3().

◆ rotate_around_axis()

ccl_device_inline float3 rotate_around_axis ( float3  p,
float3  axis,
float  angle 
)

Definition at line 563 of file util_math.h.

References angle(), cosf, r, sinf, float3::x, float3::y, and float3::z.

Referenced by svm_node_closure_bsdf(), and svm_node_vector_rotate().

◆ safe_acosf()

ccl_device float safe_acosf ( float  a)

◆ safe_asinf()

ccl_device float safe_asinf ( float  a)

◆ safe_divide()

ccl_device float safe_divide ( float  a,
float  b 
)

◆ safe_divide_color()

ccl_device_inline float3 safe_divide_color ( float3  a,
float3  b 
)

◆ safe_divide_even_color()

ccl_device_inline float3 safe_divide_even_color ( float3  a,
float3  b 
)

Definition at line 525 of file util_math.h.

References Freestyle::a, if(), make_float3, float3::x, x, float3::y, y, float3::z, and z.

Referenced by film_get_pass_result(), and RenderBuffers::get_pass_rect().

◆ safe_invert_color()

ccl_device_inline float3 safe_invert_color ( float3  a)

Definition at line 503 of file util_math.h.

References Freestyle::a, make_float3, x, y, and z.

◆ safe_logf()

ccl_device float safe_logf ( float  a,
float  b 
)

◆ safe_modulo()

ccl_device float safe_modulo ( float  a,
float  b 
)

Definition at line 646 of file util_math.h.

References Freestyle::a, and fmodf.

◆ safe_powf()

ccl_device float safe_powf ( float  a,
float  b 
)

◆ safe_sqrtf()

ccl_device_inline float safe_sqrtf ( float  f)

◆ saturate()

ccl_device_inline float saturate ( float  a)

◆ signf()

◆ smoothminf()

ccl_device_inline float smoothminf ( float  a,
float  b,
float  k 
)

Definition at line 364 of file util_math.h.

References Freestyle::a, fabsf, fmaxf, and fminf.

◆ smoothstep()

ccl_device_inline float smoothstep ( float  edge0,
float  edge1,
float  x 
)

◆ smoothstepf()

ccl_device_inline float smoothstepf ( float  f)

Definition at line 399 of file util_math.h.

Referenced by spot_light_attenuation(), and svm_brick().

◆ sqr()

◆ triangle_area()

ccl_device_inline float triangle_area ( const float3 v1,
const float3 v2,
const float3 v3 
)

◆ wrapf()

ccl_device_inline float wrapf ( float  value,
float  max,
float  min 
)

Definition at line 353 of file util_math.h.

References floorf, max(), and min().

◆ xor_signmask()

ccl_device_inline float xor_signmask ( float  x,
int  y 
)

Definition at line 675 of file util_math.h.

References __float_as_int(), __int_as_float(), x, and y.

Referenced by isect_ray_tri_watertight_v3(), and ray_triangle_intersect().