[Bf-blender-cvs] [d4f44e67c4d] soc-2021-simulation-display: Fix: Incorrect acceleration. Store velocities of only the last substep, subtract previous velocity from current

soumya pochiraju noreply at git.blender.org
Wed Aug 18 21:48:25 CEST 2021


Commit: d4f44e67c4da36138f17a7bc16e9af45f59d854d
Author: soumya pochiraju
Date:   Wed Aug 18 23:47:53 2021 +0530
Branches: soc-2021-simulation-display
https://developer.blender.org/rBd4f44e67c4da36138f17a7bc16e9af45f59d854d

Fix: Incorrect acceleration. Store velocities of only the last substep, subtract previous velocity from current

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

M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/draw/engines/overlay/overlay_extra.c

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

diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 4912b16833a..5c2daef6997 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2213,8 +2213,10 @@ static void rigidbody_get_debug_draw_data(RigidBodyWorld *rbw, float substep, bo
       if (ob->rigidbody_object != NULL) {
         rbRigidBody *rbo = (rbRigidBody *)(ob->rigidbody_object->shared->physics_object);
 
-        if((ob->rigidbody_object->sim_display_options & RB_SIM_VELOCITY) ||
-           (ob->rigidbody_object->sim_display_options & RB_SIM_ACCELERATION)) {
+        if(((ob->rigidbody_object->sim_display_options & RB_SIM_VELOCITY) ||
+           (ob->rigidbody_object->sim_display_options & RB_SIM_ACCELERATION)) &&
+            is_last_substep)
+        {
           /* Get velocity. */
           copy_v3_v3(ob->rigidbody_object->pvel, ob->rigidbody_object->vel);
           RB_body_get_linear_velocity(rbo, ob->rigidbody_object->vel);
@@ -2249,8 +2251,14 @@ static void rigidbody_get_debug_draw_data(RigidBodyWorld *rbw, float substep, bo
                 add_v3_v3(ob->rigidbody_object->fric_forces[k].vector, fric_forces[k]);
               }
 
-              if(is_last_substep && fabsf(len_v3(ob->rigidbody_object->norm_forces[k].vector))>0.0f) {
-                  mul_v3_fl(ob->rigidbody_object->vec_locations[k].vector, (1.0f/(float)(len_v3(ob->rigidbody_object->norm_forces[k].vector))));
+              if(is_last_substep) {
+                  if(fabsf(len_v3(ob->rigidbody_object->norm_forces[k].vector))>0.0f) {
+                    mul_v3_fl(ob->rigidbody_object->vec_locations[k].vector, (1.0f/(float)(len_v3(ob->rigidbody_object->norm_forces[k].vector))));
+                  }
+                  else {
+                      zero_v3(ob->rigidbody_object->vec_locations[k].vector);
+                  }
+
               }
           }
         }
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index 3ae1c0e8b64..09a5d15b0e0 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -1793,12 +1793,10 @@ static void OVERLAY_acceleration_extra(OVERLAY_Data *data,
   int text_flag = rbo->sim_display_options & RB_SIM_TEXT;
 
   /* Calculate timestep. */
-  const float ctime = DEG_get_ctime(depsgraph);
-  const float frame_diff = ctime - scene->rigidbody_world->ltime;
-  const float timestep = (1.0f / (float)FPS * scene->rigidbody_world->time_scale)/ scene->rigidbody_world->substeps_per_frame;
+  const float timestep = (1.0f / (float)FPS * scene->rigidbody_world->time_scale);
 
   float acc[3];
-  sub_v3_v3v3(acc, rbo->pvel, rbo->vel);
+  sub_v3_v3v3(acc, rbo->vel, rbo->pvel);
   mul_v3_fl(acc, 1 / timestep);
   OVERLAY_vector_extra(data, acc, rbo->pos, scale, min_clamp, color, text_flag);
 }



More information about the Bf-blender-cvs mailing list