В Ammo.js, физическом движке на основе Bullet
Physics, колеса транспортных средств моделируются через объекты
btRaycastVehicle. Основная задача таких объектов —
эмулировать поведение колёс с учётом трения, скольжения и взаимодействия
с поверхностью. Два ключевых параметра, влияющих на динамику колёс, это
skidInfo и frictionSlip.
skidInfo отражает состояние сцепления колеса с
поверхностью. Значение этого параметра вычисляется внутри симуляции и
изменяется в зависимости от угловой скорости колеса, силы сцепления и
нагрузок на него.
Особенности skidInfo:
1 — полное сцепление колеса с поверхностью (нет
пробуксовки).0 — полное проскальзывание (колесо буксует).Пример внутреннего расчёта: при высоких нагрузках на колесо и низкой
скорости скольжения skidInfo стремится к единице. При
резком ускорении или торможении колесо может частично потерять
сцепление, что уменьшает skidInfo.
frictionSlip определяет сопротивление скольжению колеса
по поверхности. Это коэффициент трения, который
напрямую влияет на боковое и продольное сцепление колеса.
Ключевые аспекты frictionSlip:
Внутри btRaycastVehicle сила трения определяется через
frictionSlip следующим образом:
[ F_{трения} = skidInfo frictionSlip F_{нагрузки}]
где F_нагрузки — сила, с которой колесо прижимается к
поверхности.
Параметры тесно связаны:
frictionSlip задаёт потенциал
сцепления, то есть максимальную силу трения.skidInfo отражает реальное текущее
сцепление, которое может быть меньше максимального при
проскальзывании.Пример: при резком старте на мокрой поверхности
frictionSlip остаётся высоким (потенциальное сцепление
сильное), но skidInfo падает из-за пробуксовки колеса, и
реальная сила сцепления уменьшается.
Продольное и боковое трение Каждое колесо можно
настроить отдельно. Для этого используются функции
setWheelFriction или прямое изменение
frictionSlip для колеса. Высокие значения дают меньше
пробуксовки, низкие — больше заноса.
Динамика скольжения skidInfo нельзя
задавать вручную — это внутренний параметр симуляции. Его значения
зависят от:
Эффекты заноса и drift Для имитации дрифта
искусственно можно уменьшить frictionSlip у задних колёс,
чтобы они легче теряли сцепление при поворотах. В сочетании с контролем
ускорения это позволяет моделировать реалистичное боковое
скольжение.
frictionSlip ≈ 1 для стандартного поведения
колес.skidInfo
оставался близким к 1 при нормальном движении.Чтобы связать физику с графикой:
Получить skidInfo из объекта
btWheelInfo.
На основе значения изменять:
Обновлять параметры в каждом кадре симуляции, чтобы визуальные эффекты точно соответствовали динамике движения.
Для каждой оси:
[ F_{продольное} = skidInfo frictionSlip F_{нагрузки} ]
[ F_{боковое} = skidInfo frictionSlip F_{нагрузки} ]
Эти формулы позволяют рассчитывать реальные силы, действующие на колёса, с учётом как потенциала сцепления, так и текущей потери сцепления.
Эта система параметров обеспечивает гибкую настройку поведения колёс в Ammo.js, позволяя моделировать как обычное движение по дороге, так и экстремальные условия с пробуксовкой и заносами.