[Bf-blender-cvs] [5b1d7afb9cd] functions: new particle randomness input
Jacques Lucke
noreply at git.blender.org
Tue Sep 17 15:27:29 CEST 2019
Commit: 5b1d7afb9cdf68e16c4dc7d065910448246f0ba6
Author: Jacques Lucke
Date: Tue Sep 17 15:04:23 2019 +0200
Branches: functions
https://developer.blender.org/rB5b1d7afb9cdf68e16c4dc7d065910448246f0ba6
new particle randomness input
===================================================================
M release/scripts/startup/nodes/bparticle_nodes/particle_inputs.py
M release/scripts/startup/nodes/function_nodes/map_range.py
M release/scripts/startup/nodes/menu.py
M source/blender/simulations/bparticles/particle_function_builder.cpp
M source/blender/simulations/bparticles/particle_function_input_providers.cpp
M source/blender/simulations/bparticles/particle_function_input_providers.hpp
===================================================================
diff --git a/release/scripts/startup/nodes/bparticle_nodes/particle_inputs.py b/release/scripts/startup/nodes/bparticle_nodes/particle_inputs.py
index 11d3d2e57ab..50654e7ac89 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/particle_inputs.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/particle_inputs.py
@@ -63,3 +63,11 @@ class SurfaceWeightNode(bpy.types.Node, BParticlesNode):
def draw(self, layout):
layout.prop(self, "group_name", text="")
+
+
+class ParticleRandomnessInputNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_ParticleRandomnessInputNode"
+ bl_label = "Particle Randomness Input"
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_output("float_value", "Value", "Float")
diff --git a/release/scripts/startup/nodes/function_nodes/map_range.py b/release/scripts/startup/nodes/function_nodes/map_range.py
index 8850f901fdd..01ddc998812 100644
--- a/release/scripts/startup/nodes/function_nodes/map_range.py
+++ b/release/scripts/startup/nodes/function_nodes/map_range.py
@@ -8,8 +8,8 @@ class MapRangeNode(bpy.types.Node, FunctionNode):
def declaration(self, builder):
builder.fixed_input("value", "Value", "Float")
- builder.fixed_input("from_min", "From Min", "Float")
- builder.fixed_input("from_max", "From Max", "Float")
- builder.fixed_input("to_min", "To Min", "Float")
- builder.fixed_input("to_max", "To Max", "Float")
+ builder.fixed_input("from_min", "From Min", "Float", default=0)
+ builder.fixed_input("from_max", "From Max", "Float", default=1)
+ builder.fixed_input("to_min", "To Min", "Float", default=0)
+ builder.fixed_input("to_max", "To Max", "Float", default=1)
builder.fixed_output("value", "Value", "Float")
diff --git a/release/scripts/startup/nodes/menu.py b/release/scripts/startup/nodes/menu.py
index cecc977f343..70bc477f01f 100644
--- a/release/scripts/startup/nodes/menu.py
+++ b/release/scripts/startup/nodes/menu.py
@@ -118,6 +118,7 @@ class InputNodesMenu(bpy.types.Menu):
insert_node(layout, "bp_SurfaceInfoNode", "Surface Info")
insert_node(layout, "bp_SurfaceImageNode", "Image Colors")
insert_node(layout, "bp_SurfaceWeightNode", "Vertex Weights")
+ insert_node(layout, "bp_ParticleRandomnessInputNode", "Particle Randomness")
def insert_node(layout, type, text, settings = {}, icon = "NONE"):
diff --git a/source/blender/simulations/bparticles/particle_function_builder.cpp b/source/blender/simulations/bparticles/particle_function_builder.cpp
index d5d0c45d9e5..263351c0a27 100644
--- a/source/blender/simulations/bparticles/particle_function_builder.cpp
+++ b/source/blender/simulations/bparticles/particle_function_builder.cpp
@@ -1,5 +1,6 @@
#include "FN_llvm.hpp"
#include "BLI_lazy_init_cxx.h"
+#include "BLI_hash.h"
#include "particle_function_builder.hpp"
#include "particle_function_input_providers.hpp"
@@ -134,6 +135,13 @@ static ParticleFunctionInputProvider *INPUT_surface_weight(
return new VertexWeightInputProvider(group_name);
}
+static ParticleFunctionInputProvider *INPUT_randomness_input(
+ VTreeDataGraph &UNUSED(vtree_data_graph), VirtualSocket *vsocket)
+{
+ uint seed = BLI_hash_string(vsocket->vnode()->name().data());
+ return new RandomFloatInputProvider(seed);
+}
+
BLI_LAZY_INIT_STATIC(StringMap<BuildInputProvider>, get_input_providers_map)
{
StringMap<BuildInputProvider> map;
@@ -141,6 +149,7 @@ BLI_LAZY_INIT_STATIC(StringMap<BuildInputProvider>, get_input_providers_map)
map.add_new("bp_SurfaceInfoNode", INPUT_surface_info);
map.add_new("bp_SurfaceImageNode", INPUT_surface_image);
map.add_new("bp_SurfaceWeightNode", INPUT_surface_weight);
+ map.add_new("bp_ParticleRandomnessInputNode", INPUT_randomness_input);
return map;
}
diff --git a/source/blender/simulations/bparticles/particle_function_input_providers.cpp b/source/blender/simulations/bparticles/particle_function_input_providers.cpp
index 9911225baae..8ad4026a5a9 100644
--- a/source/blender/simulations/bparticles/particle_function_input_providers.cpp
+++ b/source/blender/simulations/bparticles/particle_function_input_providers.cpp
@@ -5,6 +5,7 @@
#include "BKE_customdata.h"
#include "BKE_mesh_runtime.h"
#include "BKE_deform.h"
+#include "BLI_hash.h"
#include "particle_function_input_providers.hpp"
@@ -228,4 +229,20 @@ Optional<ParticleFunctionInputArray> VertexWeightInputProvider::compute_weights(
return ParticleFunctionInputArray(weights.as_ref(), true);
}
+Optional<ParticleFunctionInputArray> RandomFloatInputProvider::get(
+ InputProviderInterface &interface)
+{
+ ArrayRef<int> ids = interface.attributes().get<int>("ID");
+
+ uint size = interface.attributes().size();
+ auto random_values = BLI::temporary_allocate_array<float>(size);
+
+ for (uint pindex : interface.pindices()) {
+ float value = BLI_hash_int_01(ids[pindex] + m_seed * 23467);
+ random_values[pindex] = value;
+ }
+
+ return ParticleFunctionInputArray(random_values.as_ref(), true);
+}
+
} // namespace BParticles
diff --git a/source/blender/simulations/bparticles/particle_function_input_providers.hpp b/source/blender/simulations/bparticles/particle_function_input_providers.hpp
index 38cc65d2561..79a36287ecc 100644
--- a/source/blender/simulations/bparticles/particle_function_input_providers.hpp
+++ b/source/blender/simulations/bparticles/particle_function_input_providers.hpp
@@ -69,4 +69,16 @@ class VertexWeightInputProvider : public ParticleFunctionInputProvider {
ArrayRef<uint> surface_info_mapping);
};
+class RandomFloatInputProvider : public ParticleFunctionInputProvider {
+ private:
+ uint m_seed;
+
+ public:
+ RandomFloatInputProvider(uint seed) : m_seed(seed)
+ {
+ }
+
+ Optional<ParticleFunctionInputArray> get(InputProviderInterface &interface) override;
+};
+
} // namespace BParticles
More information about the Bf-blender-cvs
mailing list