Commit: 4cf48bbe1f74e6c2f728e910c7a319f6962f01df
Author: Martin Felke
Date:   Fri Apr 8 13:52:38 2016 +0200
Branches: fracture_modifier
https://developer.blender.org/rB4cf48bbe1f74e6c2f728e910c7a319f6962f01df

fix for solver / cluster solver iterations override, it caused different 
behavior at loading / refresh

solver iteration override was taken into account too late, after first 
validation which probably caused different simulation behavior using the 
default value for one frame

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

M       source/blender/blenkernel/intern/rigidbody.c

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

diff --git a/source/blender/blenkernel/intern/rigidbody.c 
b/source/blender/blenkernel/intern/rigidbody.c
index c177d50..2b7f8ba 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -226,7 +226,7 @@ void BKE_rigidbody_calc_threshold(float max_con_mass, 
FractureModifierData *rmd,
 
                        thresh = ((min_mass + (rmd->mass_threshold_factor * 
max_mass)) / (min_mass + max_mass)) * max_thresh;
                }
-               else;
+               else
                {
                        con_mass = con->mi1->rigidbody->mass + 
con->mi2->rigidbody->mass;
                        if (rmd->use_mass_dependent_thresholds)
@@ -3400,24 +3400,6 @@ static void handle_regular_breaking(FractureModifierData 
*fmd, Object *ob, Rigid
        float weight = MIN2(rbsc->mi1->thresh_weight, rbsc->mi2->thresh_weight);
        float breaking_angle = fmd->breaking_angle_weighted ? 
fmd->breaking_angle * weight : fmd->breaking_angle;
        float breaking_distance = fmd->breaking_distance_weighted ? 
fmd->breaking_distance * weight : fmd->breaking_distance;
-       int iterations;
-
-       if (fmd->solver_iterations_override == 0) {
-               iterations = rbw->num_solver_iterations;
-       }
-       else {
-               if ((rbsc->mi1->particle_index != -1) && 
(rbsc->mi1->particle_index == rbsc->mi2->particle_index)) {
-                       iterations = fmd->cluster_solver_iterations_override;
-               }
-               else {
-                       iterations = fmd->solver_iterations_override;
-               }
-       }
-
-       if (iterations > 0) {
-               rbsc->flag |= RBC_FLAG_OVERRIDE_SOLVER_ITERATIONS;
-               rbsc->num_solver_iterations = iterations;
-       }
 
        if ((fmd->use_mass_dependent_thresholds || fmd->use_compounds /*|| 
fmd->mass_threshold_factor > 0.0f*/)) {
                BKE_rigidbody_calc_threshold(max_con_mass, fmd, rbsc);
@@ -3441,6 +3423,28 @@ static void handle_regular_breaking(FractureModifierData 
*fmd, Object *ob, Rigid
        }
 }
 
+static void handle_solver_iterations(RigidBodyWorld *rbw, FractureModifierData 
*fmd, RigidBodyShardCon *rbsc)
+{
+       int iterations;
+
+       if (fmd->solver_iterations_override == 0) {
+               iterations = rbw->num_solver_iterations;
+       }
+       else {
+               if ((rbsc->mi1->particle_index != -1) && 
(rbsc->mi1->particle_index == rbsc->mi2->particle_index)) {
+                       iterations = fmd->cluster_solver_iterations_override;
+               }
+               else {
+                       iterations = fmd->solver_iterations_override;
+               }
+       }
+
+       if (iterations > 0) {
+               rbsc->flag |= RBC_FLAG_OVERRIDE_SOLVER_ITERATIONS;
+               rbsc->num_solver_iterations = iterations;
+       }
+}
+
 static bool do_update_modifier(Scene* scene, Object* ob, RigidBodyWorld *rbw, 
bool rebuild)
 {
        ModifierData *md = NULL;
@@ -3546,6 +3550,10 @@ static bool do_update_modifier(Scene* scene, Object* ob, 
RigidBodyWorld *rbw, bo
                                rbsc->start_dist = 0.0f;
                        }
 
+                       /* needs probably taken into account BEFORE validation 
already, instead of after it
+                        * (causing a delay by one frame with old value and 
thus different simulation behavior at start) */
+                       handle_solver_iterations(rbw, fmd, rbsc);
+
                        if (rbsc->physics_constraint && 
!(RB_constraint_is_enabled(rbsc->physics_constraint)))
                        {
                                brokencount++;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to