16 return x *
x *
x * (
x * (
x * 6.0f - 15.0f) + 10.0f);
21 const uint value_stack_offset,
22 const uint parameters_stack_offsets,
23 const uint results_stack_offsets,
26 uint from_min_stack_offset;
27 uint from_max_stack_offset;
28 uint to_min_stack_offset;
29 uint to_max_stack_offset;
30 uint type_stack_offset;
31 uint steps_stack_offset;
32 uint result_stack_offset;
34 &from_min_stack_offset,
35 &from_max_stack_offset,
37 &to_max_stack_offset);
39 results_stack_offsets, &type_stack_offset, &steps_stack_offset, &result_stack_offset);
53 if (from_max != from_min) {
55 switch (type_stack_offset) {
58 factor = (value - from_min) / (from_max - from_min);
61 factor = (value - from_min) / (from_max - from_min);
62 factor = (steps > 0.0f) ?
floorf(factor * (steps + 1.0f)) / steps : 0.0f;
66 factor = (from_min > from_max) ? 1.0f -
smoothstep(from_max, from_min, factor) :
71 factor = (from_min > from_max) ? 1.0f -
smootherstep(from_max, from_min, factor) :
76 result = to_min + factor * (to_max - to_min);
86 const uint value_stack_offset,
87 const uint parameters_stack_offsets,
88 const uint results_stack_offsets,
91 uint from_min_stack_offset;
92 uint from_max_stack_offset;
93 uint to_min_stack_offset;
94 uint to_max_stack_offset;
95 uint steps_stack_offset;
96 uint clamp_stack_offset;
97 uint range_type_stack_offset;
98 uint result_stack_offset;
100 &from_min_stack_offset,
101 &from_max_stack_offset,
102 &to_min_stack_offset,
103 &to_max_stack_offset);
107 &range_type_stack_offset,
108 &result_stack_offset);
117 const int type = range_type_stack_offset;
124 switch (range_type_stack_offset) {
127 factor =
safe_divide((value - from_min), (from_max - from_min));
130 factor =
safe_divide((value - from_min), (from_max - from_min));
132 (steps.
y > 0.0f) ?
floorf(factor.
y * (steps.
y + 1.0f)) / steps.
y : 0.0f,
133 (steps.
z > 0.0f) ?
floorf(factor.
z * (steps.
z + 1.0f)) / steps.
z :
138 factor =
safe_divide((value - from_min), (from_max - from_min));
140 factor = (
make_float3(3.0f, 3.0f, 3.0f) - 2.0f * factor) * (factor * factor);
144 factor =
safe_divide((value - from_min), (from_max - from_min));
146 factor = factor * factor * factor * (factor * (factor * 6.0f - 15.0f) + 10.0f);
150 result = to_min + factor * (to_max - to_min);
MINLINE float safe_divide(float a, float b)
@ NODE_MAP_RANGE_SMOOTHERSTEP
@ NODE_MAP_RANGE_SMOOTHSTEP
ccl_device_inline float stack_load_float(const ccl_private float *stack, const uint a)
ccl_device_inline void stack_store_float(ccl_private float *stack, const uint a, const float f)
ccl_device_inline uint4 read_node(KernelGlobals kg, ccl_private int *const offset)
ccl_device_inline void stack_store_float3(ccl_private float *stack, const uint a, const float3 f)
ccl_device_inline float stack_load_float_default(const ccl_private float *stack, const uint a, const uint value)
ccl_device_forceinline void svm_unpack_node_uchar3(const uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z)
ccl_device_forceinline void svm_unpack_node_uchar4(const uint i, ccl_private uint *x, ccl_private uint *y, ccl_private uint *z, ccl_private uint *w)
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(const ccl_private float *stack, const uint a)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define ccl_device_noinline
#define CCL_NAMESPACE_END
constexpr T clamp(T, U, U) RET
ccl_device_noinline int svm_node_vector_map_range(ccl_private float *stack, const uint value_stack_offset, const uint parameters_stack_offsets, const uint results_stack_offsets, const int offset)
CCL_NAMESPACE_BEGIN ccl_device_inline float smootherstep(const float edge0, const float edge1, float x)
ccl_device_noinline int svm_node_map_range(KernelGlobals kg, ccl_private float *stack, const uint value_stack_offset, const uint parameters_stack_offsets, const uint results_stack_offsets, int offset)
MINLINE float smoothstep(float edge0, float edge1, float x)
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()