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

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to