[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