[Bf-blender-cvs] [da04c045fe9] functions: velocity and size input for point emitter
Jacques Lucke
noreply at git.blender.org
Tue Jul 16 18:20:42 CEST 2019
Commit: da04c045fe9825b7a4f3987dcd985c43388e5788
Author: Jacques Lucke
Date: Tue Jul 16 18:18:53 2019 +0200
Branches: functions
https://developer.blender.org/rBda04c045fe9825b7a4f3987dcd985c43388e5788
velocity and size input for point emitter
===================================================================
M release/scripts/startup/bl_operators/modifiers.py
M release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
M source/blender/simulations/bparticles/emitters.cpp
M source/blender/simulations/bparticles/emitters.hpp
M source/blender/simulations/bparticles/inserters.cpp
===================================================================
diff --git a/release/scripts/startup/bl_operators/modifiers.py b/release/scripts/startup/bl_operators/modifiers.py
index cc60a7341e6..826c9eacc9e 100644
--- a/release/scripts/startup/bl_operators/modifiers.py
+++ b/release/scripts/startup/bl_operators/modifiers.py
@@ -72,7 +72,7 @@ class NewBParticlesTree(bpy.types.Operator, ModifierOperator):
type_node = tree.nodes.new("bp_ParticleTypeNode")
emitter_node = tree.nodes.new("bp_PointEmitterNode")
- emitter_node.location = (-250, 100)
+ emitter_node.location = (-250, 200)
gravity_node = tree.nodes.new("bp_GravityForceNode")
gravity_node.location = (-250, -100)
diff --git a/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py b/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
index e4812378e51..cfabceea526 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/point_emitter.py
@@ -9,4 +9,6 @@ class PointEmitterNode(bpy.types.Node, BParticlesNode):
def declaration(self, builder : SocketBuilder):
builder.fixed_input("position", "Position", "Vector")
+ builder.fixed_input("velocity", "Velocity", "Vector", default=(1, 0, 0))
+ builder.fixed_input("size", "Size", "Float", default=0.01)
builder.emitter_output("emitter", "Emitter")
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 8f89d610abb..0f78af8818a 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -25,18 +25,21 @@ static float random_float()
void PointEmitter::emit(EmitterInterface &interface)
{
SmallVector<float3> new_positions(m_amount);
- SmallVector<float> new_sizes(m_amount, 0.1f);
+ SmallVector<float3> new_velocities(m_amount);
+ SmallVector<float> new_sizes(m_amount);
SmallVector<float> birth_times(m_amount);
for (uint i = 0; i < m_amount; i++) {
float t = i / (float)m_amount;
- float3 point = m_point.interpolate(t);
- new_positions[i] = point;
+ new_positions[i] = m_point.interpolate(t);
+ new_velocities[i] = m_velocity.interpolate(t);
+ new_sizes[i] = m_size.interpolate(t);
birth_times[i] = interface.time_span().interpolate(t);
}
auto target = interface.particle_allocator().request(m_particle_type_name, new_positions.size());
target.set_float3("Position", new_positions);
+ target.set_float3("Velocity", new_velocities);
target.set_float("Size", new_sizes);
target.set_float("Birth Time", birth_times);
}
diff --git a/source/blender/simulations/bparticles/emitters.hpp b/source/blender/simulations/bparticles/emitters.hpp
index db962de0d78..65ad3c30ded 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -49,12 +49,22 @@ class SurfaceEmitter : public Emitter {
class PointEmitter : public Emitter {
private:
std::string m_particle_type_name;
- InterpolatedFloat3 m_point;
uint m_amount;
+ InterpolatedFloat3 m_point;
+ InterpolatedFloat3 m_velocity;
+ InterpolatedFloat m_size;
public:
- PointEmitter(StringRef particle_type_name, InterpolatedFloat3 point, uint amount)
- : m_particle_type_name(particle_type_name.to_std_string()), m_point(point), m_amount(amount)
+ PointEmitter(StringRef particle_type_name,
+ uint amount,
+ InterpolatedFloat3 point,
+ InterpolatedFloat3 velocity,
+ InterpolatedFloat size)
+ : m_particle_type_name(particle_type_name.to_std_string()),
+ m_amount(amount),
+ m_point(point),
+ m_velocity(velocity),
+ m_size(size)
{
}
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index 51630b92f50..bdf52b890aa 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -267,8 +267,13 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_moving_point(BuildContext &ctx,
body->call__setup_execution_context(fn_in, fn_out);
auto point = ctx.world_state.get_interpolated_value(
- bnode->name, body->get_output<float3>(fn_out, 0, "Position"));
- return std::unique_ptr<PointEmitter>(new PointEmitter(particle_type_name, point, 10));
+ bnode->name + StringRef("Position"), body->get_output<float3>(fn_out, 0, "Position"));
+ auto velocity = ctx.world_state.get_interpolated_value(
+ bnode->name + StringRef("Velocity"), body->get_output<float3>(fn_out, 1, "Velocity"));
+ auto size = ctx.world_state.get_interpolated_value(bnode->name + StringRef("Size"),
+ body->get_output<float>(fn_out, 2, "Size"));
+ return std::unique_ptr<PointEmitter>(
+ new PointEmitter(particle_type_name, 10, point, velocity, size));
}
static void match_inputs_to_node_outputs(FN::DataFlowGraphBuilder &builder,
More information about the Bf-blender-cvs
mailing list