Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/function/nodes/node_fn_random_value.cc
| Show All 36 Lines | b.add_input<decl::Int>("Max", "Max_002") | ||||
| .max(100000) | .max(100000) | ||||
| .supports_field(); | .supports_field(); | ||||
| b.add_input<decl::Float>("Probability") | b.add_input<decl::Float>("Probability") | ||||
| .min(0.0f) | .min(0.0f) | ||||
| .max(1.0f) | .max(1.0f) | ||||
| .default_value(0.5f) | .default_value(0.5f) | ||||
| .subtype(PROP_FACTOR) | .subtype(PROP_FACTOR) | ||||
| .supports_field(); | .supports_field(); | ||||
| b.add_input<decl::Int>("ID").implicit_field(); | b.add_input<decl::Int>("Random ID").implicit_field(); | ||||
| b.add_input<decl::Int>("Seed").default_value(0).min(-10000).max(10000).supports_field(); | b.add_input<decl::Int>("Seed").default_value(0).min(-10000).max(10000).supports_field(); | ||||
| b.add_output<decl::Vector>("Value").dependent_field(); | b.add_output<decl::Vector>("Value").dependent_field(); | ||||
| b.add_output<decl::Float>("Value", "Value_001").dependent_field(); | b.add_output<decl::Float>("Value", "Value_001").dependent_field(); | ||||
| b.add_output<decl::Int>("Value", "Value_002").dependent_field(); | b.add_output<decl::Int>("Value", "Value_002").dependent_field(); | ||||
| b.add_output<decl::Bool>("Value", "Value_003").dependent_field(); | b.add_output<decl::Bool>("Value", "Value_003").dependent_field(); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | RandomVectorFunction() | ||||
| this->set_signature(&signature); | this->set_signature(&signature); | ||||
| } | } | ||||
| static fn::MFSignature create_signature() | static fn::MFSignature create_signature() | ||||
| { | { | ||||
| fn::MFSignatureBuilder signature{"Random Value"}; | fn::MFSignatureBuilder signature{"Random Value"}; | ||||
| signature.single_input<float3>("Min"); | signature.single_input<float3>("Min"); | ||||
| signature.single_input<float3>("Max"); | signature.single_input<float3>("Max"); | ||||
| signature.single_input<int>("ID"); | signature.single_input<int>("Random ID"); | ||||
| signature.single_input<int>("Seed"); | signature.single_input<int>("Seed"); | ||||
| signature.single_output<float3>("Value"); | signature.single_output<float3>("Value"); | ||||
| return signature.build(); | return signature.build(); | ||||
| } | } | ||||
| void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | ||||
| { | { | ||||
| const VArray<float3> &min_values = params.readonly_single_input<float3>(0, "Min"); | const VArray<float3> &min_values = params.readonly_single_input<float3>(0, "Min"); | ||||
| const VArray<float3> &max_values = params.readonly_single_input<float3>(1, "Max"); | const VArray<float3> &max_values = params.readonly_single_input<float3>(1, "Max"); | ||||
| const VArray<int> &ids = params.readonly_single_input<int>(2, "ID"); | const VArray<int> &ids = params.readonly_single_input<int>(2, "Random ID"); | ||||
| const VArray<int> &seeds = params.readonly_single_input<int>(3, "Seed"); | const VArray<int> &seeds = params.readonly_single_input<int>(3, "Seed"); | ||||
| MutableSpan<float3> values = params.uninitialized_single_output<float3>(4, "Value"); | MutableSpan<float3> values = params.uninitialized_single_output<float3>(4, "Value"); | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| const float3 min_value = min_values[i]; | const float3 min_value = min_values[i]; | ||||
| const float3 max_value = max_values[i]; | const float3 max_value = max_values[i]; | ||||
| const int seed = seeds[i]; | const int seed = seeds[i]; | ||||
| const int id = ids[i]; | const int id = ids[i]; | ||||
| Show All 15 Lines | RandomFloatFunction() | ||||
| this->set_signature(&signature); | this->set_signature(&signature); | ||||
| } | } | ||||
| static fn::MFSignature create_signature() | static fn::MFSignature create_signature() | ||||
| { | { | ||||
| fn::MFSignatureBuilder signature{"Random Value"}; | fn::MFSignatureBuilder signature{"Random Value"}; | ||||
| signature.single_input<float>("Min"); | signature.single_input<float>("Min"); | ||||
| signature.single_input<float>("Max"); | signature.single_input<float>("Max"); | ||||
| signature.single_input<int>("ID"); | signature.single_input<int>("Random ID"); | ||||
| signature.single_input<int>("Seed"); | signature.single_input<int>("Seed"); | ||||
| signature.single_output<float>("Value"); | signature.single_output<float>("Value"); | ||||
| return signature.build(); | return signature.build(); | ||||
| } | } | ||||
| void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | ||||
| { | { | ||||
| const VArray<float> &min_values = params.readonly_single_input<float>(0, "Min"); | const VArray<float> &min_values = params.readonly_single_input<float>(0, "Min"); | ||||
| const VArray<float> &max_values = params.readonly_single_input<float>(1, "Max"); | const VArray<float> &max_values = params.readonly_single_input<float>(1, "Max"); | ||||
| const VArray<int> &ids = params.readonly_single_input<int>(2, "ID"); | const VArray<int> &ids = params.readonly_single_input<int>(2, "Random ID"); | ||||
| const VArray<int> &seeds = params.readonly_single_input<int>(3, "Seed"); | const VArray<int> &seeds = params.readonly_single_input<int>(3, "Seed"); | ||||
| MutableSpan<float> values = params.uninitialized_single_output<float>(4, "Value"); | MutableSpan<float> values = params.uninitialized_single_output<float>(4, "Value"); | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| const float min_value = min_values[i]; | const float min_value = min_values[i]; | ||||
| const float max_value = max_values[i]; | const float max_value = max_values[i]; | ||||
| const int seed = seeds[i]; | const int seed = seeds[i]; | ||||
| const int id = ids[i]; | const int id = ids[i]; | ||||
| Show All 12 Lines | RandomIntFunction() | ||||
| this->set_signature(&signature); | this->set_signature(&signature); | ||||
| } | } | ||||
| static fn::MFSignature create_signature() | static fn::MFSignature create_signature() | ||||
| { | { | ||||
| fn::MFSignatureBuilder signature{"Random Value"}; | fn::MFSignatureBuilder signature{"Random Value"}; | ||||
| signature.single_input<int>("Min"); | signature.single_input<int>("Min"); | ||||
| signature.single_input<int>("Max"); | signature.single_input<int>("Max"); | ||||
| signature.single_input<int>("ID"); | signature.single_input<int>("Random ID"); | ||||
| signature.single_input<int>("Seed"); | signature.single_input<int>("Seed"); | ||||
| signature.single_output<int>("Value"); | signature.single_output<int>("Value"); | ||||
| return signature.build(); | return signature.build(); | ||||
| } | } | ||||
| void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | ||||
| { | { | ||||
| const VArray<int> &min_values = params.readonly_single_input<int>(0, "Min"); | const VArray<int> &min_values = params.readonly_single_input<int>(0, "Min"); | ||||
| const VArray<int> &max_values = params.readonly_single_input<int>(1, "Max"); | const VArray<int> &max_values = params.readonly_single_input<int>(1, "Max"); | ||||
| const VArray<int> &ids = params.readonly_single_input<int>(2, "ID"); | const VArray<int> &ids = params.readonly_single_input<int>(2, "Random ID"); | ||||
| const VArray<int> &seeds = params.readonly_single_input<int>(3, "Seed"); | const VArray<int> &seeds = params.readonly_single_input<int>(3, "Seed"); | ||||
| MutableSpan<int> values = params.uninitialized_single_output<int>(4, "Value"); | MutableSpan<int> values = params.uninitialized_single_output<int>(4, "Value"); | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| const float min_value = min_values[i]; | const float min_value = min_values[i]; | ||||
| const float max_value = max_values[i]; | const float max_value = max_values[i]; | ||||
| const int seed = seeds[i]; | const int seed = seeds[i]; | ||||
| const int id = ids[i]; | const int id = ids[i]; | ||||
| Show All 11 Lines | RandomBoolFunction() | ||||
| static fn::MFSignature signature = create_signature(); | static fn::MFSignature signature = create_signature(); | ||||
| this->set_signature(&signature); | this->set_signature(&signature); | ||||
| } | } | ||||
| static fn::MFSignature create_signature() | static fn::MFSignature create_signature() | ||||
| { | { | ||||
| fn::MFSignatureBuilder signature{"Random Value"}; | fn::MFSignatureBuilder signature{"Random Value"}; | ||||
| signature.single_input<float>("Probability"); | signature.single_input<float>("Probability"); | ||||
| signature.single_input<int>("ID"); | signature.single_input<int>("Random ID"); | ||||
| signature.single_input<int>("Seed"); | signature.single_input<int>("Seed"); | ||||
| signature.single_output<bool>("Value"); | signature.single_output<bool>("Value"); | ||||
| return signature.build(); | return signature.build(); | ||||
| } | } | ||||
| void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override | ||||
| { | { | ||||
| const VArray<float> &probabilities = params.readonly_single_input<float>(0, "Probability"); | const VArray<float> &probabilities = params.readonly_single_input<float>(0, "Probability"); | ||||
| const VArray<int> &ids = params.readonly_single_input<int>(1, "ID"); | const VArray<int> &ids = params.readonly_single_input<int>(1, "Random ID"); | ||||
| const VArray<int> &seeds = params.readonly_single_input<int>(2, "Seed"); | const VArray<int> &seeds = params.readonly_single_input<int>(2, "Seed"); | ||||
| MutableSpan<bool> values = params.uninitialized_single_output<bool>(3, "Value"); | MutableSpan<bool> values = params.uninitialized_single_output<bool>(3, "Value"); | ||||
| for (int64_t i : mask) { | for (int64_t i : mask) { | ||||
| const int seed = seeds[i]; | const int seed = seeds[i]; | ||||
| const int id = ids[i]; | const int id = ids[i]; | ||||
| const float probability = probabilities[i]; | const float probability = probabilities[i]; | ||||
| values[i] = noise::hash_to_float(id, seed) <= probability; | values[i] = noise::hash_to_float(id, seed) <= probability; | ||||
| ▲ Show 20 Lines • Show All 52 Lines • Show Last 20 Lines | |||||