В Cannon.js демпфирование играет ключевую роль в управлении кинетической энергией тел и стабилизации симуляции. Основные параметры для этого — linearDamping и angularDamping, которые контролируют затухание поступательного и вращательного движения соответственно.
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 отвечает за замедление вращательного движения. Это полезно для контроля крутящего момента и стабилизации вращения объектов после столкновений или внешнего воздействия.
const body = new CANNON.Body({
mass: 2,
shape: new CANNON.Box(new CANNON.Vec3(1, 1, 1)),
angularDamping: 0.2
});
Основные моменты:
body.angularVelocity):[ {new} = {old} (1 - angularDamping)]
Практический эффект:
0.01–0.1) имитирует почти идеальное
вращение с минимальными потерями.0.2–0.5) подходит для большинства
игровых объектов, чтобы вращение постепенно затухало.0.8–1) мгновенно останавливает
вращение.Эти два параметра работают независимо, но их комбинация определяет общую физическую реалистичность:
Пример комбинированной настройки:
const body = new CANNON.Body({
mass: 3,
shape: new CANNON.Sphere(1),
linearDamping: 0.05,
angularDamping: 0.1
});
Такое сочетание позволяет объекту медленно скользить и постепенно прекращать вращение, создавая естественный эффект сопротивления среды.
0.01–0.1), чтобы сохранить динамичность и реакцию на
столкновения.0.3–0.7) для выраженного затухания.dt) — демпфирование
масштабируется с шагом интеграции.Высокие значения демпфирования незначительно увеличивают вычислительные затраты, так как Cannon.js просто умножает скорость на коэффициент. Основная нагрузка по-прежнему приходится на обработку столкновений и интеграцию сил. Поэтому правильная настройка damping критична скорее для реализма, чем для оптимизации.
Эти параметры позволяют создавать как реалистичную физику, так и управляемое, предсказуемое поведение объектов в игровых или образовательных симуляциях.