Демпфирование: linearDamping и angularDamping

В Cannon.js демпфирование играет ключевую роль в управлении кинетической энергией тел и стабилизации симуляции. Основные параметры для этого — linearDamping и angularDamping, которые контролируют затухание поступательного и вращательного движения соответственно.


Linear Damping (Линейное демпфирование)

Linear damping определяет, насколько быстро объект теряет скорость в пространстве. Этот параметр используется для моделирования эффектов сопротивления среды, таких как трение воздуха или жидкости.

const body = new CANNON.Body({
    mass: 5, 
    shape: new CANNON.Sphere(1),
    linearDamping: 0.1
});

Ключевые моменты:

  • Значение задается в диапазоне 0–1.

    • 0 — отсутствие демпфирования, тело движется без потерь скорости.
    • 1 — мгновенная остановка, движение полностью гасится за один шаг симуляции.
  • Линейное демпфирование применяется к вектору скорости тела:

[ {new} = {old} (1 - linearDamping)]

  • Демпфирование работает на каждом шаге интеграции, поэтому его эффект зависит от частоты обновления симуляции (world.step(dt)).

Пример использования для плавного падения:

const world = new CANNON.World();
world.gravity.set(0, -9.82, 0);

const sphere = new CANNON.Body({
    mass: 1,
    shape: new CANNON.Sphere(0.5),
    linearDamping: 0.05
});

sphere.position.set(0, 10, 0);
world.addBody(sphere);

function simulate() {
    world.step(1/60);
    console.log(sphere.position.y, sphere.velocity.y);
    requestAnimationFrame(simulate);
}
simulate();

Даже при отсутствии внешних сил скорость сферы постепенно уменьшается из-за линейного демпфирования, предотвращая бесконечное скольжение.


Angular Damping (Вращательное демпфирование)

Angular damping отвечает за замедление вращательного движения. Это полезно для контроля крутящего момента и стабилизации вращения объектов после столкновений или внешнего воздействия.

const body = new CANNON.Body({
    mass: 2,
    shape: new CANNON.Box(new CANNON.Vec3(1, 1, 1)),
    angularDamping: 0.2
});

Основные моменты:

  • Диапазон значений также 0–1.
  • Применяется к угловой скорости объекта (body.angularVelocity):

[ {new} = {old} (1 - angularDamping)]

  • Angular damping критичен для объектов, которые должны стабильно вращаться без «вечного кручения». Например, кубы и шары после столкновения.

Практический эффект:

  • Малое значение (0.01–0.1) имитирует почти идеальное вращение с минимальными потерями.
  • Среднее значение (0.2–0.5) подходит для большинства игровых объектов, чтобы вращение постепенно затухало.
  • Высокое значение (0.8–1) мгновенно останавливает вращение.

Взаимодействие linearDamping и angularDamping

Эти два параметра работают независимо, но их комбинация определяет общую физическую реалистичность:

  • Линейное демпфирование контролирует движение тела в пространстве.
  • Вращательное демпфирование контролирует вращение и ориентацию.

Пример комбинированной настройки:

const body = new CANNON.Body({
    mass: 3,
    shape: new CANNON.Sphere(1),
    linearDamping: 0.05,
    angularDamping: 0.1
});

Такое сочетание позволяет объекту медленно скользить и постепенно прекращать вращение, создавая естественный эффект сопротивления среды.


Практические рекомендации

  1. Игровая физика: чаще используются низкие значения (0.01–0.1), чтобы сохранить динамичность и реакцию на столкновения.
  2. Симуляции жидкостей или вязких сред: значения могут быть выше (0.3–0.7) для выраженного затухания.
  3. Стабилизация объектов: angularDamping помогает предотвратить хаотическое вращение при взаимодействии с другими телами.
  4. Тестирование: всегда проверять эффекты при различных частотах шагов (dt) — демпфирование масштабируется с шагом интеграции.

Влияние демпфирования на производительность

Высокие значения демпфирования незначительно увеличивают вычислительные затраты, так как Cannon.js просто умножает скорость на коэффициент. Основная нагрузка по-прежнему приходится на обработку столкновений и интеграцию сил. Поэтому правильная настройка damping критична скорее для реализма, чем для оптимизации.


Выводы по использованию

  • LinearDamping — контролирует замедление поступательного движения.
  • AngularDamping — контролирует затухание вращения.
  • Комбинированное использование обеспечивает естественное поведение объектов.
  • Значения подбираются в зависимости от среды и физического эффекта, который требуется симулировать.

Эти параметры позволяют создавать как реалистичную физику, так и управляемое, предсказуемое поведение объектов в игровых или образовательных симуляциях.