diff --git a/source/blender/draw/engines/eevee_next/eevee_velocity.cc b/source/blender/draw/engines/eevee_next/eevee_velocity.cc
index 87407fb887294192f958691b6819204e5327d826..ea688fa96d8d1147396054aadfb869b02a0c7707 100644
--- a/source/blender/draw/engines/eevee_next/eevee_velocity.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_velocity.cc
@@ -164,7 +164,8 @@ bool VelocityModule::step_object_sync(Object *ob,
       object_steps[STEP_PREVIOUS]->get_or_resize(
           vel.obj.ofs[STEP_PREVIOUS]) = ob->object_to_world();
     }
-    if (vel.obj.ofs[STEP_NEXT] == -1) {
+    /* STEP_NEXT is not used in viewport. */
+    if (vel.obj.ofs[STEP_NEXT] == -1 && !inst_.is_viewport()) {
       vel.obj.ofs[STEP_NEXT] = object_steps_usage[STEP_NEXT]++;
       object_steps[STEP_NEXT]->get_or_resize(vel.obj.ofs[STEP_NEXT]) = ob->object_to_world();
     }
@@ -213,11 +214,11 @@ bool VelocityModule::step_object_sync(Object *ob,
   if (step_ == STEP_CURRENT && has_motion == true && has_deform == false) {
     const float4x4 &obmat_curr = (*object_steps[STEP_CURRENT])[vel.obj.ofs[STEP_CURRENT]];
     const float4x4 &obmat_prev = (*object_steps[STEP_PREVIOUS])[vel.obj.ofs[STEP_PREVIOUS]];
-    const float4x4 &obmat_next = (*object_steps[STEP_NEXT])[vel.obj.ofs[STEP_NEXT]];
     if (inst_.is_viewport()) {
       has_motion = (obmat_curr != obmat_prev);
     }
     else {
+      const float4x4 &obmat_next = (*object_steps[STEP_NEXT])[vel.obj.ofs[STEP_NEXT]];
       has_motion = (obmat_curr != obmat_prev || obmat_curr != obmat_next);
     }
   }
@@ -314,6 +315,7 @@ void VelocityModule::step_swap()
     std::swap(geometry_steps[step_a], geometry_steps[step_b]);
     std::swap(camera_steps[step_a], camera_steps[step_b]);
     std::swap(step_time[step_a], step_time[step_b]);
+    std::swap(object_steps_usage[step_a], object_steps_usage[step_b]);
 
     for (VelocityObjectData &vel : velocity_map.values()) {
       vel.obj.ofs[step_a] = vel.obj.ofs[step_b];
@@ -344,6 +346,9 @@ void VelocityModule::begin_sync()
   step_ = STEP_CURRENT;
   step_camera_sync();
   object_steps_usage[step_] = 0;
+
+  /* STEP_NEXT is not used for viewport. (See #131134) */
+  BLI_assert(!inst_.is_viewport() || object_steps_usage[STEP_NEXT] == 0);
 }
 
 /* This is the end of the current frame sync. Not the step_sync. */