[Bf-blender-cvs] [d979cd2690d] functions: use Surface Info node instead of Collision Info
Jacques Lucke
noreply at git.blender.org
Wed Sep 4 19:43:32 CEST 2019
Commit: d979cd2690d1790ec8e622ea0a26db41b25b6e17
Author: Jacques Lucke
Date: Wed Sep 4 14:23:00 2019 +0200
Branches: functions
https://developer.blender.org/rBd979cd2690d1790ec8e622ea0a26db41b25b6e17
use Surface Info node instead of Collision Info
===================================================================
M release/scripts/startup/nodes/bparticle_nodes/particle_inputs.py
M source/blender/simulations/bparticles/action_contexts.hpp
M source/blender/simulations/bparticles/emitters.cpp
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 f403d3166bd..8042524c0d1 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/particle_inputs.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/particle_inputs.py
@@ -16,12 +16,13 @@ class ParticleInfoNode(bpy.types.Node, BParticlesNode):
builder.fixed_output("age", "Age", "Float")
-class CollisionInfoNode(bpy.types.Node, BParticlesNode):
- bl_idname = "bp_CollisionInfoNode"
- bl_label = "Collision Info"
+class SurfaceInfoNode(bpy.types.Node, BParticlesNode):
+ bl_idname = "bp_SurfaceInfoNode"
+ bl_label = "Surface Info"
def declaration(self, builder: NodeBuilder):
builder.fixed_output("normal", "Normal", "Vector")
+ builder.fixed_output("velocity", "Velocity", "Vector")
class SurfaceImageNode(bpy.types.Node, BParticlesNode):
diff --git a/source/blender/simulations/bparticles/action_contexts.hpp b/source/blender/simulations/bparticles/action_contexts.hpp
index d0d60153d77..aad23a431c9 100644
--- a/source/blender/simulations/bparticles/action_contexts.hpp
+++ b/source/blender/simulations/bparticles/action_contexts.hpp
@@ -18,7 +18,7 @@ class MeshSurfaceContext : public ActionContext {
ArrayRef<float3> m_local_normals;
ArrayRef<float3> m_world_normals;
ArrayRef<uint> m_looptri_indices;
- ArrayRef<float3> m_surface_velocities;
+ ArrayRef<float3> m_world_surface_velocities;
public:
MeshSurfaceContext(Object *object,
@@ -27,14 +27,14 @@ class MeshSurfaceContext : public ActionContext {
ArrayRef<float3> local_normals,
ArrayRef<float3> world_normals,
ArrayRef<uint> looptri_indices,
- ArrayRef<float3> surface_velocities)
+ ArrayRef<float3> world_surface_velocities)
: m_object(object),
m_world_transforms(world_transforms),
m_local_positions(local_positions),
m_local_normals(local_normals),
m_world_normals(world_normals),
m_looptri_indices(looptri_indices),
- m_surface_velocities(surface_velocities)
+ m_world_surface_velocities(world_surface_velocities)
{
}
@@ -63,7 +63,7 @@ class MeshSurfaceContext : public ActionContext {
m_world_transforms = ArrayRef<float4x4>(world_transforms_buffer, size);
m_world_normals = ArrayRef<float3>(world_normals_buffer, size);
- m_surface_velocities = ArrayRef<float3>(surface_velocities_buffer, size);
+ m_world_surface_velocities = ArrayRef<float3>(surface_velocities_buffer, size);
m_buffers_to_free.extend(
{world_transforms_buffer, world_normals_buffer, surface_velocities_buffer});
@@ -109,9 +109,9 @@ class MeshSurfaceContext : public ActionContext {
return m_looptri_indices;
}
- ArrayRef<float3> surface_velicities() const
+ ArrayRef<float3> world_surface_velicities() const
{
- return m_surface_velocities;
+ return m_world_surface_velocities;
}
};
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 5a06461b8f3..49702438bdd 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -303,7 +303,8 @@ void SurfaceEmitter::emit(EmitterInterface &interface)
for (uint i = 0; i < particles_to_emit; i++) {
float3 position_before_birth = transforms_before_birth[i].transform_position(
local_positions[i]);
- surface_velocities[i] = (positions_at_birth[i] - position_before_birth) / epsilon;
+ surface_velocities[i] = (positions_at_birth[i] - position_before_birth) / epsilon /
+ interface.time_span().duration();
}
TemporaryArray<float3> world_normals(particles_to_emit);
diff --git a/source/blender/simulations/bparticles/particle_function_builder.cpp b/source/blender/simulations/bparticles/particle_function_builder.cpp
index eeae31356b5..85fe8c004ee 100644
--- a/source/blender/simulations/bparticles/particle_function_builder.cpp
+++ b/source/blender/simulations/bparticles/particle_function_builder.cpp
@@ -83,10 +83,19 @@ static ParticleFunctionInputProvider *INPUT_particle_info(VTreeDataGraph &vtree_
}
}
-static ParticleFunctionInputProvider *INPUT_collision_info(
- VTreeDataGraph &UNUSED(vtree_data_graph), VirtualSocket *UNUSED(vsocket))
+static ParticleFunctionInputProvider *INPUT_surface_info(VTreeDataGraph &UNUSED(vtree_data_graph),
+ VirtualSocket *vsocket)
{
- return new CollisionNormalInputProvider();
+ if (STREQ(vsocket->name(), "Normal")) {
+ return new SurfaceNormalInputProvider();
+ }
+ else if (STREQ(vsocket->name(), "Velocity")) {
+ return new SurfaceVelocityInputProvider();
+ }
+ else {
+ BLI_assert(false);
+ return nullptr;
+ }
}
static ParticleFunctionInputProvider *INPUT_surface_image(VTreeDataGraph &UNUSED(vtree_data_graph),
@@ -111,7 +120,7 @@ BLI_LAZY_INIT_STATIC(StringMap<BuildInputProvider>, get_input_providers_map)
{
StringMap<BuildInputProvider> map;
map.add_new("bp_ParticleInfoNode", INPUT_particle_info);
- map.add_new("bp_CollisionInfoNode", INPUT_collision_info);
+ map.add_new("bp_SurfaceInfoNode", INPUT_surface_info);
map.add_new("bp_SurfaceImageNode", INPUT_surface_image);
map.add_new("bp_SurfaceWeightNode", INPUT_surface_weight);
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 be9a0a56b74..9e95b13b5f0 100644
--- a/source/blender/simulations/bparticles/particle_function_input_providers.cpp
+++ b/source/blender/simulations/bparticles/particle_function_input_providers.cpp
@@ -30,7 +30,7 @@ Optional<ParticleFunctionInputArray> AttributeInputProvider::get(InputProviderIn
}
}
-Optional<ParticleFunctionInputArray> CollisionNormalInputProvider::get(
+Optional<ParticleFunctionInputArray> SurfaceNormalInputProvider::get(
InputProviderInterface &interface)
{
ActionContext *action_context = interface.action_context();
@@ -42,6 +42,18 @@ Optional<ParticleFunctionInputArray> CollisionNormalInputProvider::get(
return ParticleFunctionInputArray(surface_info->world_normals(), false);
}
+Optional<ParticleFunctionInputArray> SurfaceVelocityInputProvider::get(
+ InputProviderInterface &interface)
+{
+ ActionContext *action_context = interface.action_context();
+ auto *surface_info = dynamic_cast<MeshSurfaceContext *>(action_context);
+ if (surface_info == nullptr) {
+ return {};
+ }
+
+ return ParticleFunctionInputArray(surface_info->world_surface_velicities(), false);
+}
+
Optional<ParticleFunctionInputArray> AgeInputProvider::get(InputProviderInterface &interface)
{
auto birth_times = interface.attributes().get<float>("Birth Time");
diff --git a/source/blender/simulations/bparticles/particle_function_input_providers.hpp b/source/blender/simulations/bparticles/particle_function_input_providers.hpp
index 7c301d085d7..f8f1dff775b 100644
--- a/source/blender/simulations/bparticles/particle_function_input_providers.hpp
+++ b/source/blender/simulations/bparticles/particle_function_input_providers.hpp
@@ -20,7 +20,11 @@ class AttributeInputProvider : public ParticleFunctionInputProvider {
Optional<ParticleFunctionInputArray> get(InputProviderInterface &interface) override;
};
-class CollisionNormalInputProvider : public ParticleFunctionInputProvider {
+class SurfaceNormalInputProvider : public ParticleFunctionInputProvider {
+ Optional<ParticleFunctionInputArray> get(InputProviderInterface &interface) override;
+};
+
+class SurfaceVelocityInputProvider : public ParticleFunctionInputProvider {
Optional<ParticleFunctionInputArray> get(InputProviderInterface &interface) override;
};
More information about the Bf-blender-cvs
mailing list