btVehicleTuning в библиотеке Ammo.js
представляет собой объект конфигурации, используемый для настройки
физических характеристик подвески автомобилей в физическом движке. Этот
объект позволяет управлять реакцией подвески на дорожные неровности,
ускорение, торможение и боковые нагрузки. В отличие от прямого изменения
тел, btVehicleTuning задаёт глобальные параметры, которые
применяются ко всем колесам транспортного средства, обеспечивая
согласованное поведение автомобиля.
Объект btVehicleTuning включает следующие ключевые
параметры:
m_suspensionStiffness Определяет
жёсткость пружины подвески. Влияет на то, насколько автомобиль
“подскакивает” на неровностях. Чем выше значение, тем жёстче
реакция.
m_suspensionCompression Параметр
демпфирования при сжатии пружины. Управляет тем, как быстро подвеска
сжимается при нагрузке. Обычно находится в диапазоне от 0 до 1.
m_suspensionDamping Демпфирование
при обратном ходе, то есть при растяжении пружины. Отвечает за
устойчивость автомобиля после преодоления неровностей.
m_maxSuspensionTravelCm
Максимальное перемещение подвески в сантиметрах. Позволяет ограничить
ход колеса, предотвращая чрезмерное сжатие или отрыв колеса от
поверхности.
m_frictionSlip Коэффициент трения
покрышек относительно поверхности. Влияет на боковое скольжение, дрифт и
стабильность при поворотах.
m_maxSuspensionForce Максимальная
сила, которую подвеска может передавать на шасси. Позволяет ограничить
перегрузки и предотвратить “прыжки” автомобиля при больших
неровностях.
Для создания объекта тюнинга используют стандартный конструктор Ammo.js:
const tuning = new Ammo.btVehicleTuning();
tuning.set_m_suspensionStiffness(20.0);
tuning.set_m_suspensionCompression(0.4);
tuning.set_m_suspensionDamping(0.5);
tuning.set_m_maxSuspensionTravelCm(500);
tuning.set_m_frictionSlip(1.5);
tuning.set_m_maxSuspensionForce(6000);
После создания btVehicleTuning передаётся в конструктор
колёсной системы автомобиля (btRaycastVehicle) при
добавлении колёс:
const vehicle = new Ammo.btRaycastVehicle(tuning, rigidBody, vehicleRaycaster);
vehicle.addWheel(
wheelPosition, // вектор позиции колеса
wheelDirection, // вектор направления подвески
wheelAxle, // вектор оси вращения
suspensionRestLength,
wheelRadius,
tuning,
isFrontWheel
);
Жёсткость и демпфирование
m_suspensionStiffness совместно с
m_suspensionDamping и m_suspensionCompression
определяет поведение колеса при динамических нагрузках. Высокая
жёсткость с низким демпфированием приводит к дерганой, нестабильной
езде.
Ход подвески и максимальная сила
m_maxSuspensionTravelCm ограничивает амплитуду движения
колеса. Если m_maxSuspensionForce меньше силы, создаваемой
столкновением с неровностью, колеса могут “висеть в воздухе”, создавая
неестественное поведение.
Трение покрышек m_frictionSlip
напрямую влияет на сцепление с поверхностью. При низких значениях
автомобиль склонен к заносу, при высоких — к чрезмерной устойчивости, но
с меньшей манёвренностью.
Городской автомобиль:
m_suspensionStiffness: 15–25m_suspensionCompression: 0.3–0.5m_suspensionDamping: 0.4–0.6m_frictionSlip: 1.5–2.0Спортивный автомобиль:
m_suspensionStiffness: 25–40m_suspensionCompression: 0.4–0.6m_suspensionDamping: 0.5–0.7m_frictionSlip: 2.0–3.0Внедорожник:
m_suspensionStiffness: 20–30m_suspensionCompression: 0.2–0.4m_suspensionDamping: 0.3–0.5m_maxSuspensionTravelCm: 500–700m_frictionSlip: 1.2–1.8Эти диапазоны обеспечивают реалистичную динамику, но всегда стоит проверять поведение на тестовой трассе с разными типами поверхностей.
btVehicleTuning позволяет создавать несколько
конфигураций для одного автомобиля, например:
Переключение между объектами btVehicleTuning позволяет
изменять поведение подвески в реальном времени без пересоздания
транспортного средства.
Использование btVehicleTuning в связке с
btRaycastVehicle обеспечивает гибкую и точную настройку
всех аспектов физики колес, делая поведение автомобиля в
Ammo.js максимально приближённым к реальности.