Commit: 7fa9ab01d6e9deb434777d1635016b73d9835acc
Author: Luca Rood
Date:   Mon Mar 13 01:31:10 2017 -0300
Branches: cloth-improvements
https://developer.blender.org/rB7fa9ab01d6e9deb434777d1635016b73d9835acc

Implement animated cloth velocity initialization

This allows the initial cloth velocity to be set by the vertex
velocities in the underlying animation.

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

M       release/scripts/startup/bl_ui/properties_physics_cloth.py
M       source/blender/blenkernel/BKE_cloth.h
M       source/blender/makesrna/intern/rna_cloth.c
M       source/blender/physics/intern/BPH_mass_spring.cpp

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_cloth.py 
b/release/scripts/startup/bl_ui/properties_physics_cloth.py
index 0fa77b4de52..8a345ca99c0 100644
--- a/release/scripts/startup/bl_ui/properties_physics_cloth.py
+++ b/release/scripts/startup/bl_ui/properties_physics_cloth.py
@@ -146,6 +146,9 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel, Panel):
         row.prop(cloth, "bending_plasticity", text="")
         row.prop(cloth, "bending_yield_factor", text="")
 
+        layout.separator()
+        layout.prop(cloth, "use_initial_velocity")
+
         # Disabled for now
         """
         if cloth.vertex_group_mass:
diff --git a/source/blender/blenkernel/BKE_cloth.h 
b/source/blender/blenkernel/BKE_cloth.h
index 80860932b04..f86fd732947 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -171,6 +171,7 @@ typedef enum {
        CLOTH_SIMSETTINGS_FLAG_ADAPTIVE_SUBFRAMES_VEL = (1 << 0), /* use 
velocity based adaptive subframes*/
        CLOTH_SIMSETTINGS_FLAG_ADAPTIVE_SUBFRAMES_IMP = (1 << 1), /* use 
velocity based adaptive subframes*/
        CLOTH_SIMSETTINGS_FLAG_COLLOBJ = ( 1 << 2 ),// object is only collision 
object, no cloth simulation is done
+       CLOTH_SIMSETTINGS_FLAG_INIT_VEL = ( 1 << 3 ), /* initialize cloth 
velocity from animation */
        CLOTH_SIMSETTINGS_FLAG_TEARING = ( 1 << 4 ),// true if tearing is 
enabled
        CLOTH_SIMSETTINGS_FLAG_CCACHE_EDIT = (1 << 12), /* edit cache in 
editmode */
        CLOTH_SIMSETTINGS_FLAG_NO_SPRING_COMPRESS = (1 << 13), /* don't allow 
spring compression */
diff --git a/source/blender/makesrna/intern/rna_cloth.c 
b/source/blender/makesrna/intern/rna_cloth.c
index c0c20726cdd..717dc88c2f6 100644
--- a/source/blender/makesrna/intern/rna_cloth.c
+++ b/source/blender/makesrna/intern/rna_cloth.c
@@ -853,6 +853,12 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Basemesh Valid", "True if the set 
basemesh is valid");
 
+       prop = RNA_def_property(srna, "use_initial_velocity", PROP_BOOLEAN, 
PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flags", 
CLOTH_SIMSETTINGS_FLAG_INIT_VEL);
+       RNA_def_property_ui_text(prop, "Initialize Velocity", "Initialize 
velocity from animation");
+       RNA_def_property_update(prop, 0, "rna_cloth_update");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+
        /* unused */
 
        /* unused still */
diff --git a/source/blender/physics/intern/BPH_mass_spring.cpp 
b/source/blender/physics/intern/BPH_mass_spring.cpp
index 6e64048708c..aa74e1b6979 100644
--- a/source/blender/physics/intern/BPH_mass_spring.cpp
+++ b/source/blender/physics/intern/BPH_mass_spring.cpp
@@ -1045,17 +1045,20 @@ int BPH_cloth_solve(Object *ob, float frame, 
ClothModifierData *clmd, ListBase *
        float max_impulse = 0.0f;
        float tmp_vec[3];
        float adapt_fact;
+       bool init_vel;
        
        BKE_sim_debug_data_clear_category("collision");
        
        if (!clmd->solver_result)
                clmd->solver_result = (ClothSolverResult 
*)MEM_callocN(sizeof(ClothSolverResult), "cloth solver result");
        cloth_clear_result(clmd);
-       
-       if (clmd->sim_parms->vgroup_mass>0) { /* do goal stuff */
+
+       init_vel = ((clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_INIT_VEL) 
&& (frame == (clmd->point_cache->startframe + 1)));
+
+       if ((clmd->sim_parms->vgroup_mass > 0) || init_vel) { /* do goal and 
velocity stuff */
                for (i = 0; i < mvert_num; i++) {
                        // update velocities with constrained velocities from 
pinned verts
-                       if (verts[i].flags & CLOTH_VERT_FLAG_PINNED) {
+                       if ((verts[i].flags & CLOTH_VERT_FLAG_PINNED) || 
init_vel) {
                                float v[3];
                                sub_v3_v3v3(v, verts[i].xconst, verts[i].xold);
                                // mul_v3_fl(v, clmd->sim_parms->stepsPerFrame);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to