Трение колеса: skidInfo и frictionSlip

В Ammo.js, физическом движке на основе Bullet Physics, колеса транспортных средств моделируются через объекты btRaycastVehicle. Основная задача таких объектов — эмулировать поведение колёс с учётом трения, скольжения и взаимодействия с поверхностью. Два ключевых параметра, влияющих на динамику колёс, это skidInfo и frictionSlip.


Параметр skidInfo

skidInfo отражает состояние сцепления колеса с поверхностью. Значение этого параметра вычисляется внутри симуляции и изменяется в зависимости от угловой скорости колеса, силы сцепления и нагрузок на него.

Особенности skidInfo:

  • Диапазон значений: обычно от 0 до 1.
  • 1 — полное сцепление колеса с поверхностью (нет пробуксовки).
  • 0 — полное проскальзывание (колесо буксует).
  • Используется для расчёта силы торможения и ускорения.
  • Влияет на визуальные эффекты, например, появление следов шин.

Пример внутреннего расчёта: при высоких нагрузках на колесо и низкой скорости скольжения skidInfo стремится к единице. При резком ускорении или торможении колесо может частично потерять сцепление, что уменьшает skidInfo.


Параметр frictionSlip

frictionSlip определяет сопротивление скольжению колеса по поверхности. Это коэффициент трения, который напрямую влияет на боковое и продольное сцепление колеса.

Ключевые аспекты frictionSlip:

  • Обычно задаётся числом больше нуля, часто в диапазоне 0.5–10.
  • Чем выше значение, тем сильнее сцепление колеса с поверхностью.
  • Малое значение приводит к увеличенному заносу и пробуксовке.
  • Используется при расчёте продольных (торможение/ускорение) и боковых (повороты) сил.

Внутри btRaycastVehicle сила трения определяется через frictionSlip следующим образом:

[ F_{трения} = skidInfo frictionSlip F_{нагрузки}]

где F_нагрузки — сила, с которой колесо прижимается к поверхности.


Взаимодействие skidInfo и frictionSlip

Параметры тесно связаны:

  • frictionSlip задаёт потенциал сцепления, то есть максимальную силу трения.
  • skidInfo отражает реальное текущее сцепление, которое может быть меньше максимального при проскальзывании.

Пример: при резком старте на мокрой поверхности frictionSlip остаётся высоким (потенциальное сцепление сильное), но skidInfo падает из-за пробуксовки колеса, и реальная сила сцепления уменьшается.


Настройка колес для реалистичного поведения

  1. Продольное и боковое трение Каждое колесо можно настроить отдельно. Для этого используются функции setWheelFriction или прямое изменение frictionSlip для колеса. Высокие значения дают меньше пробуксовки, низкие — больше заноса.

  2. Динамика скольжения skidInfo нельзя задавать вручную — это внутренний параметр симуляции. Его значения зависят от:

    • угловой скорости колеса,
    • силы давления на колесо,
    • коэффициента трения поверхности,
    • торможения и ускорения.
  3. Эффекты заноса и drift Для имитации дрифта искусственно можно уменьшить frictionSlip у задних колёс, чтобы они легче теряли сцепление при поворотах. В сочетании с контролем ускорения это позволяет моделировать реалистичное боковое скольжение.


Практические советы

  • Начинать с frictionSlip ≈ 1 для стандартного поведения колес.
  • Для спортивных машин использовать значения 2–4 для передних и 1.5–3 для задних колес (чтобы усилить занос).
  • Следить за нагрузкой на колёса, чтобы skidInfo оставался близким к 1 при нормальном движении.
  • Использовать визуальные индикаторы (следы шин) для отладки реального скольжения.

Интеграция с визуализацией

Чтобы связать физику с графикой:

  1. Получить skidInfo из объекта btWheelInfo.

  2. На основе значения изменять:

    • цвет или прозрачность следа шин,
    • эффекты дыма или песка,
    • звук пробуксовки.
  3. Обновлять параметры в каждом кадре симуляции, чтобы визуальные эффекты точно соответствовали динамике движения.


Итоговые формулы для симуляции

Для каждой оси:

[ F_{продольное} = skidInfo frictionSlip F_{нагрузки} ]

[ F_{боковое} = skidInfo frictionSlip F_{нагрузки} ]

Эти формулы позволяют рассчитывать реальные силы, действующие на колёса, с учётом как потенциала сцепления, так и текущей потери сцепления.


Эта система параметров обеспечивает гибкую настройку поведения колёс в Ammo.js, позволяя моделировать как обычное движение по дороге, так и экстремальные условия с пробуксовкой и заносами.