[Bf-blender-cvs] [5e22b41ce1b] functions: normal and emitter velocity inputs

Jacques Lucke noreply at git.blender.org
Tue Jul 9 18:01:57 CEST 2019


Commit: 5e22b41ce1b96a906b4952ee57e5f3a68ba29c07
Author: Jacques Lucke
Date:   Tue Jul 9 17:07:56 2019 +0200
Branches: functions
https://developer.blender.org/rB5e22b41ce1b96a906b4952ee57e5f3a68ba29c07

normal and emitter velocity inputs

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

M	release/scripts/startup/nodes/bparticle_nodes/mesh_emitter.py
M	source/blender/simulations/bparticles/emitters.cpp
M	source/blender/simulations/bparticles/inserters.cpp

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

diff --git a/release/scripts/startup/nodes/bparticle_nodes/mesh_emitter.py b/release/scripts/startup/nodes/bparticle_nodes/mesh_emitter.py
index 61dc51d82f5..759bee82ca7 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/mesh_emitter.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/mesh_emitter.py
@@ -10,4 +10,6 @@ class MeshEmitterNode(bpy.types.Node, BParticlesNode):
     def declaration(self, builder : SocketBuilder):
         builder.fixed_input("object", "Object", "Object")
         builder.fixed_input("rate", "Rate", "Float", default=10)
+        builder.fixed_input("normal_velocity", "Normal Velocity", "Float", default=1)
+        builder.fixed_input("emitter_velocity", "Emitter Velocity", "Float", default=0)
         builder.emitter_output("emitter", "Emitter")
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 5231166fa13..5351211cc85 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -60,6 +60,9 @@ class SurfaceEmitter : public Emitter {
     m_compute_inputs_body->call(fn_in, fn_out, execution_context);
     Object *object = fn_out.get<Object *>(0);
     float rate = fn_out.get<float>(1);
+    float normal_velocity_factor = fn_out.get<float>(2);
+    float emitter_velocity_factor = fn_out.get<float>(3);
+
     float particles_to_emit_f = rate * interface.time_span().duration();
     float fraction = particles_to_emit_f - std::floor(particles_to_emit_f);
     if ((rand() % 1000) / 1000.0f < fraction) {
@@ -77,7 +80,6 @@ class SurfaceEmitter : public Emitter {
     Mesh *mesh = (Mesh *)object->data;
     float4x4 transform_start = m_world_state.update(object->id.name, object->obmat);
     float4x4 transform_end = object->obmat;
-    float normal_factor = 1.0f;
 
     MLoop *loops = mesh->mloop;
     MVert *verts = mesh->mvert;
@@ -114,7 +116,8 @@ class SurfaceEmitter : public Emitter {
       float3 emitter_velocity = (point_at_birth - point_before_birth) / epsilon;
 
       positions.append(point_at_birth);
-      velocities.append(normal_velocity * normal_factor + emitter_velocity * 0.3f);
+      velocities.append(normal_velocity * normal_velocity_factor +
+                        emitter_velocity * emitter_velocity_factor);
       birth_moments.append(birth_moment);
     }
 
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index 2e9f7a46c0e..2aa13b90425 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -214,10 +214,11 @@ static void INSERT_EMITTER_mesh_surface(ProcessNodeInterface &interface)
     }
 
     bSocketList inputs = interface.inputs();
-    SharedFunction fn = create_function(interface.indexed_tree(),
-                                        interface.data_graph(),
-                                        {inputs.get(0), inputs.get(1)},
-                                        interface.bnode()->name);
+    SharedFunction fn = create_function(
+        interface.indexed_tree(),
+        interface.data_graph(),
+        {inputs.get(0), inputs.get(1), inputs.get(2), inputs.get(3)},
+        interface.bnode()->name);
 
     bNode *type_node = linked.node;
     Emitter *emitter = EMITTER_mesh_surface(type_node->name, fn, interface.world_state());



More information about the Bf-blender-cvs mailing list