[Bf-blender-cvs] [54b40587e4b] functions: output vector from Perlin Noise node

Jacques Lucke noreply at git.blender.org
Tue Nov 12 14:30:10 CET 2019


Commit: 54b40587e4bbf0339a9ca7c366514a86541de500
Author: Jacques Lucke
Date:   Tue Nov 12 14:15:59 2019 +0100
Branches: functions
https://developer.blender.org/rB54b40587e4bbf0339a9ca7c366514a86541de500

output vector from Perlin Noise node

===================================================================

M	release/scripts/startup/nodes/bparticle_nodes/forces.py
M	release/scripts/startup/nodes/function_nodes/noise.py
M	source/blender/functions/intern/multi_functions/mixed.cc
M	source/blender/functions/intern/multi_functions/mixed.h
M	source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc

===================================================================

diff --git a/release/scripts/startup/nodes/bparticle_nodes/forces.py b/release/scripts/startup/nodes/bparticle_nodes/forces.py
index 2644fb014a6..19e8d66c9d3 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/forces.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/forces.py
@@ -4,7 +4,7 @@ from .. base import SimulationNode
 from .. node_builder import NodeBuilder
 
 
-class AddForcesNode(bpy.types.Node, SimulationNode):
+class ForceNode(bpy.types.Node, SimulationNode):
     bl_idname = "fn_ForceNode"
     bl_label = "Force"
 
diff --git a/release/scripts/startup/nodes/function_nodes/noise.py b/release/scripts/startup/nodes/function_nodes/noise.py
index 3706f548ec3..92914c8e1dc 100644
--- a/release/scripts/startup/nodes/function_nodes/noise.py
+++ b/release/scripts/startup/nodes/function_nodes/noise.py
@@ -11,4 +11,5 @@ class PerlinNoiseNode(bpy.types.Node, FunctionNode):
         builder.fixed_input("position", "Position", "Vector")
         builder.fixed_input("amplitude", "Amplitude", "Float", default=1)
         builder.fixed_input("scale", "Scale", "Float", default=1)
-        builder.fixed_output("noise", "Noise", "Float")
+        builder.fixed_output("noise_1d", "Noise", "Float")
+        builder.fixed_output("noise_3d", "Noise", "Vector")
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index e977798d11e..fe191e86c2d 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -9,6 +9,7 @@
 #include "BLI_string_map.h"
 #include "BLI_array_cxx.h"
 #include "BLI_noise.h"
+#include "BLI_hash.h"
 
 #include "DNA_object_types.h"
 #include "DNA_mesh_types.h"
@@ -549,4 +550,32 @@ void MF_PerlinNoise_3D_to_1D::call(const MFMask &mask,
   }
 }
 
+MF_PerlinNoise_3D_to_3D::MF_PerlinNoise_3D_to_3D()
+{
+  MFSignatureBuilder signature("Perlin Noise 3D to 3D");
+  signature.readonly_single_input<float3>("Position");
+  signature.readonly_single_input<float>("Amplitude");
+  signature.readonly_single_input<float>("Scale");
+  signature.single_output<float3>("Noise");
+  this->set_signature(signature);
+}
+
+void MF_PerlinNoise_3D_to_3D::call(const MFMask &mask,
+                                   MFParams &params,
+                                   MFContext &UNUSED(context)) const
+{
+  VirtualListRef<float3> positions = params.readonly_single_input<float3>(0, "Position");
+  VirtualListRef<float> amplitudes = params.readonly_single_input<float>(1, "Amplitude");
+  VirtualListRef<float> scales = params.readonly_single_input<float>(2, "Scale");
+  MutableArrayRef<float3> r_noise = params.uninitialized_single_output<float3>(3, "Noise");
+
+  for (uint i : mask.indices()) {
+    float3 pos = positions[i];
+    float x = BLI_gNoise(scales[i], pos.x, pos.y, pos.z + 1000.0f, false, 1);
+    float y = BLI_gNoise(scales[i], pos.x, pos.y + 1000.0f, pos.z, false, 1);
+    float z = BLI_gNoise(scales[i], pos.x + 1000.0f, pos.y, pos.z, false, 1);
+    r_noise[i] = float3(x, y, z) * amplitudes[i];
+  }
+}
+
 }  // namespace FN
diff --git a/source/blender/functions/intern/multi_functions/mixed.h b/source/blender/functions/intern/multi_functions/mixed.h
index 31f16372643..0bb4404afbe 100644
--- a/source/blender/functions/intern/multi_functions/mixed.h
+++ b/source/blender/functions/intern/multi_functions/mixed.h
@@ -173,6 +173,12 @@ class MF_PerlinNoise_3D_to_1D final : public MultiFunction {
   void call(const MFMask &mask, MFParams &params, MFContext &context) const override;
 };
 
+class MF_PerlinNoise_3D_to_3D final : public MultiFunction {
+ public:
+  MF_PerlinNoise_3D_to_3D();
+  void call(const MFMask &mask, MFParams &params, MFContext &context) const override;
+};
+
 template<typename FromT, typename ToT, ToT (*Compute)(const FromT &)>
 class MF_Mappping final : public MultiFunction {
  public:
diff --git a/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
index b767e0c56bd..f70363f6b0e 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
@@ -447,8 +447,19 @@ static void INSERT_compare(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 
 static void INSERT_perlin_noise(VTreeMFNetworkBuilder &builder, const VNode &vnode)
 {
-  const MultiFunction &fn = builder.construct_fn<MF_PerlinNoise_3D_to_1D>();
-  builder.add_function(fn, {0, 1, 2}, {3}, vnode);
+  {
+    const MultiFunction &fn = builder.construct_fn<MF_PerlinNoise_3D_to_1D>();
+    MFBuilderFunctionNode &node = builder.add_function(fn, {0, 1, 2}, {3});
+    builder.map_sockets(vnode.inputs(), node.inputs());
+    builder.map_sockets(vnode.output(0), node.output(0));
+  }
+
+  {
+    const MultiFunction &fn = builder.construct_fn<MF_PerlinNoise_3D_to_3D>();
+    MFBuilderFunctionNode &node = builder.add_function(fn, {0, 1, 2}, {3});
+    builder.map_sockets(vnode.inputs(), node.inputs());
+    builder.map_sockets(vnode.output(1), node.output(0));
+  }
 }
 
 void add_vtree_node_mapping_info(VTreeMultiFunctionMappings &mappings)



More information about the Bf-blender-cvs mailing list