Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/shader/nodes/node_shader_map_range.cc
| Show First 20 Lines • Show All 266 Lines • ▼ Show 20 Lines | void call(blender::IndexMask mask, | ||||
| const blender::VArray<float3> &values = params.readonly_single_input<float3>(0, "Vector"); | const blender::VArray<float3> &values = params.readonly_single_input<float3>(0, "Vector"); | ||||
| const blender::VArray<float3> &from_min = params.readonly_single_input<float3>(1, "From Min"); | const blender::VArray<float3> &from_min = params.readonly_single_input<float3>(1, "From Min"); | ||||
| const blender::VArray<float3> &from_max = params.readonly_single_input<float3>(2, "From Max"); | const blender::VArray<float3> &from_max = params.readonly_single_input<float3>(2, "From Max"); | ||||
| const blender::VArray<float3> &to_min = params.readonly_single_input<float3>(3, "To Min"); | const blender::VArray<float3> &to_min = params.readonly_single_input<float3>(3, "To Min"); | ||||
| const blender::VArray<float3> &to_max = params.readonly_single_input<float3>(4, "To Max"); | const blender::VArray<float3> &to_max = params.readonly_single_input<float3>(4, "To Max"); | ||||
| blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); | blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); | float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); | ||||
| results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; | results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; | ||||
| } | } | ||||
| if (clamp_) { | if (clamp_) { | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| results[i] = clamp_range(results[i], to_min[i], to_max[i]); | results[i] = clamp_range(results[i], to_min[i], to_max[i]); | ||||
| } | } | ||||
| } | } | ||||
| Show All 26 Lines | void call(blender::IndexMask mask, | ||||
| const blender::VArray<float3> &from_min = params.readonly_single_input<float3>(1, "From Min"); | const blender::VArray<float3> &from_min = params.readonly_single_input<float3>(1, "From Min"); | ||||
| const blender::VArray<float3> &from_max = params.readonly_single_input<float3>(2, "From Max"); | const blender::VArray<float3> &from_max = params.readonly_single_input<float3>(2, "From Max"); | ||||
| const blender::VArray<float3> &to_min = params.readonly_single_input<float3>(3, "To Min"); | const blender::VArray<float3> &to_min = params.readonly_single_input<float3>(3, "To Min"); | ||||
| const blender::VArray<float3> &to_max = params.readonly_single_input<float3>(4, "To Max"); | const blender::VArray<float3> &to_max = params.readonly_single_input<float3>(4, "To Max"); | ||||
| const blender::VArray<float3> &steps = params.readonly_single_input<float3>(5, "Steps"); | const blender::VArray<float3> &steps = params.readonly_single_input<float3>(5, "Steps"); | ||||
| blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(6, "Vector"); | blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(6, "Vector"); | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); | float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); | ||||
| factor = float3::safe_divide(float3::floor(factor * (steps[i] + 1.0f)), steps[i]); | factor = math::safe_divide(math::floor(factor * (steps[i] + 1.0f)), steps[i]); | ||||
| results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; | results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; | ||||
| } | } | ||||
| if (clamp_) { | if (clamp_) { | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| results[i] = clamp_range(results[i], to_min[i], to_max[i]); | results[i] = clamp_range(results[i], to_min[i], to_max[i]); | ||||
| } | } | ||||
| } | } | ||||
| Show All 22 Lines | void call(blender::IndexMask mask, | ||||
| const blender::VArray<float3> &values = params.readonly_single_input<float3>(0, "Vector"); | const blender::VArray<float3> &values = params.readonly_single_input<float3>(0, "Vector"); | ||||
| const blender::VArray<float3> &from_min = params.readonly_single_input<float3>(1, "From Min"); | const blender::VArray<float3> &from_min = params.readonly_single_input<float3>(1, "From Min"); | ||||
| const blender::VArray<float3> &from_max = params.readonly_single_input<float3>(2, "From Max"); | const blender::VArray<float3> &from_max = params.readonly_single_input<float3>(2, "From Max"); | ||||
| const blender::VArray<float3> &to_min = params.readonly_single_input<float3>(3, "To Min"); | const blender::VArray<float3> &to_min = params.readonly_single_input<float3>(3, "To Min"); | ||||
| const blender::VArray<float3> &to_max = params.readonly_single_input<float3>(4, "To Max"); | const blender::VArray<float3> &to_max = params.readonly_single_input<float3>(4, "To Max"); | ||||
| blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); | blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); | float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); | ||||
| clamp_v3(factor, 0.0f, 1.0f); | clamp_v3(factor, 0.0f, 1.0f); | ||||
| factor = (float3(3.0f) - 2.0f * factor) * (factor * factor); | factor = (float3(3.0f) - 2.0f * factor) * (factor * factor); | ||||
| results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; | results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; | ||||
| } | } | ||||
| } | } | ||||
| }; | }; | ||||
| class MapRangeSmootherstepVectorFunction : public blender::fn::MultiFunction { | class MapRangeSmootherstepVectorFunction : public blender::fn::MultiFunction { | ||||
| Show All 18 Lines | void call(blender::IndexMask mask, | ||||
| const blender::VArray<float3> &values = params.readonly_single_input<float3>(0, "Vector"); | const blender::VArray<float3> &values = params.readonly_single_input<float3>(0, "Vector"); | ||||
| const blender::VArray<float3> &from_min = params.readonly_single_input<float3>(1, "From Min"); | const blender::VArray<float3> &from_min = params.readonly_single_input<float3>(1, "From Min"); | ||||
| const blender::VArray<float3> &from_max = params.readonly_single_input<float3>(2, "From Max"); | const blender::VArray<float3> &from_max = params.readonly_single_input<float3>(2, "From Max"); | ||||
| const blender::VArray<float3> &to_min = params.readonly_single_input<float3>(3, "To Min"); | const blender::VArray<float3> &to_min = params.readonly_single_input<float3>(3, "To Min"); | ||||
| const blender::VArray<float3> &to_max = params.readonly_single_input<float3>(4, "To Max"); | const blender::VArray<float3> &to_max = params.readonly_single_input<float3>(4, "To Max"); | ||||
| blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); | blender::MutableSpan<float3> results = params.uninitialized_single_output<float3>(5, "Vector"); | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| float3 factor = float3::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); | float3 factor = math::safe_divide(values[i] - from_min[i], from_max[i] - from_min[i]); | ||||
| clamp_v3(factor, 0.0f, 1.0f); | clamp_v3(factor, 0.0f, 1.0f); | ||||
| factor = factor * factor * factor * (factor * (factor * 6.0f - 15.0f) + 10.0f); | factor = factor * factor * factor * (factor * (factor * 6.0f - 15.0f) + 10.0f); | ||||
| results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; | results[i] = factor * (to_max[i] - to_min[i]) + to_min[i]; | ||||
| } | } | ||||
| } | } | ||||
| }; | }; | ||||
| static void map_range_signature(blender::fn::MFSignatureBuilder *signature, bool use_steps) | static void map_range_signature(blender::fn::MFSignatureBuilder *signature, bool use_steps) | ||||
| ▲ Show 20 Lines • Show All 275 Lines • Show Last 20 Lines | |||||