59 return "map_range_linear";
61 return "map_range_stepped";
63 return "map_range_smoothstep";
65 return "map_range_smootherstep";
80 if (name !=
nullptr) {
88 GPU_link(mat,
"clamp_range", out[0].link, in[3].link, in[4].link, &out[0].link);
136 float factor =
safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
137 results[i] = to_min[i] + factor * (to_max[i] - to_min[i]);
142 results[i] = (to_min[i] > to_max[i]) ?
clamp_f(results[i], to_max[i], to_min[i]) :
143 clamp_f(results[i], to_min[i], to_max[i]);
180 float factor =
safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
182 results[i] = to_min[i] + factor * (to_max[i] - to_min[i]);
187 results[i] = (to_min[i] > to_max[i]) ?
clamp_f(results[i], to_max[i], to_min[i]) :
188 clamp_f(results[i], to_min[i], to_max[i]);
221 float factor =
safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
223 factor = (3.0f - 2.0f * factor) * (factor * factor);
224 results[i] = to_min[i] + factor * (to_max[i] - to_min[i]);
256 float factor =
safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]);
258 factor = factor * factor * factor * (factor * (factor * 6.0f - 15.0f) + 10.0f);
259 results[i] = to_min[i] + factor * (to_max[i] - to_min[i]);
268 int interpolation_type = bnode.
custom2;
270 switch (interpolation_type) {
void node_type_gpu(struct bNodeType *ntype, NodeGPUExecFunction gpu_fn)
void nodeSetSocketAvailability(struct bNodeSocket *sock, bool is_available)
void node_type_socket_templates(struct bNodeType *ntype, struct bNodeSocketTemplate *inputs, struct bNodeSocketTemplate *outputs)
void node_type_update(struct bNodeType *ntype, void(*updatefunc)(struct bNodeTree *ntree, struct bNode *node))
#define SH_NODE_MAP_RANGE
void node_type_init(struct bNodeType *ntype, void(*initfunc)(struct bNodeTree *ntree, struct bNode *node))
#define NODE_CLASS_CONVERTOR
struct bNodeSocket * nodeFindSocket(const struct bNode *node, eNodeSocketInOut in_out, const char *identifier)
void nodeRegisterType(struct bNodeType *ntype)
MINLINE float clamp_f(float value, float min, float max)
MINLINE float safe_divide(float a, float b)
@ NODE_MAP_RANGE_SMOOTHERSTEP
@ NODE_MAP_RANGE_SMOOTHSTEP
bool GPU_link(GPUMaterial *mat, const char *name,...)
bool GPU_stack_link(GPUMaterial *mat, struct bNode *node, const char *name, GPUNodeStack *in, GPUNodeStack *out,...)
void call(blender::IndexMask mask, blender::fn::MFParams params, blender::fn::MFContext UNUSED(context)) const override
static blender::fn::MFSignature create_signature()
MapRangeFunction(bool clamp)
static blender::fn::MFSignature create_signature()
MapRangeSmootherstepFunction()
void call(blender::IndexMask mask, blender::fn::MFParams params, blender::fn::MFContext UNUSED(context)) const override
MapRangeSmoothstepFunction()
void call(blender::IndexMask mask, blender::fn::MFParams params, blender::fn::MFContext UNUSED(context)) const override
static blender::fn::MFSignature create_signature()
void call(blender::IndexMask mask, blender::fn::MFParams params, blender::fn::MFContext UNUSED(context)) const override
MapRangeSteppedFunction(bool clamp)
static blender::fn::MFSignature create_signature()
void single_input(StringRef name)
void single_output(StringRef name)
void set_signature(const MFSignature *signature)
const MFSignature & signature() const
const void set_not_implemented()
void set_matching_fn(const fn::MultiFunction &function)
void register_node_type_sh_map_range(void)
static void map_range_signature(blender::fn::MFSignatureBuilder *signature, bool use_steps)
static const char * gpu_shader_get_name(int mode)
static bNodeSocketTemplate sh_node_map_range_in[]
static void node_shader_update_map_range(bNodeTree *UNUSED(ntree), bNode *node)
static bNodeSocketTemplate sh_node_map_range_out[]
static void node_shader_init_map_range(bNodeTree *UNUSED(ntree), bNode *node)
static void sh_node_map_range_expand_in_mf_network(blender::nodes::NodeMFNetworkBuilder &builder)
static int gpu_shader_map_range(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
void sh_fn_node_type_base(bNodeType *ntype, int type, const char *name, short nclass, short flag)
struct SELECTID_Context context
Compact definition of a node socket.
NodeExpandInMFNetworkFunction expand_in_mf_network
CCL_NAMESPACE_BEGIN ccl_device_inline float smootherstep(float edge0, float edge1, float x)
ccl_device_inline float smoothstep(float edge0, float edge1, float x)
ccl_device_inline int clamp(int a, int mn, int mx)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)