Position Correction (Коррекция положений)
Солверы типично решают систему для соблюдения ограничений в скоростях; следовательно, в позиционной части ограничения может накапливаться ошибка. Для того чтобы "поставить" на место элементы ограничения, используют техники по коррекции положений.
Описание
Существует два основных метода, используемых для коррекции положений на данный момент.
Самый простой и быстрый способ - стабилизация Баумгарте (Baumgarte stabilization). Он заключается в следующем: добавлять в систему силы к данному ограничению, пропорционально позиционной ошибке в ограничении. Силу стабилизации определяет коэффициент исправления ошибки. Минусы данного метода заключаются в следующем:
- не всегда можно корректно подобрать параметры стабилизации (при сильном натяжении и/или при сложных конструкциях возникает "дрожание" в местах соединения);
- добавление силы влечет за собой реакцию не одномоментную, а на протяжении нескольких последующих шагов симуляции (например, при стабилизации контактных соединений к обычному отскоку может добавится составляющая коррекции и тела будут вести себя неправдоподобно в экстремальных случаях - абсолютно упругий/неупругий удары);
Для решения последней проблемы используется метод псевдо скоростей (Pseudo Velocities). Идея метода заключается в том, чтобы раздельно хранить две составляющие: скорости и псевдо-скорости (скорости, направленные только на коррекцию положений). После интегрирования скорости остаются неизменными, а псевдо-скорости обнуляются, что и позволяет соблюсти принцип одномоментности коррекции положений.
Метод Pseudo Velocities, интегрированный в схему решения системы ограничений от Erin Catto, Sequential Impulses, получил название Split Impulses.
Существуют более точные методы коррекции положений, например - Nonlinear Gauss-Seidel, которые требуют все больше вычислений на каждой итерации солвера, но на данный момент их использование не оправданно.
Ссылки
"Post-Stabilization for Rigid Body Simulation with Contact and Constraints", M. Cline, D. Pai
Форум Bullet'а, Erin Catto описывает алгоритмы
Форум Bullet'а, некоторые пояснения по теме
Что такое Position Correction (Коррекция положений)?
#constraint, #dynamics, #физика, #rigid body
11 июня 2009