Unity 6.3
0 онлайн 25 гостей 3 в системе
Вход

Спекулятивные CCD

Спекулятивное обнаружение столкновений является CCD алгоритмом для непрерывного спекулятивного режима.

Спекулятивное обнаружение столкновений менее вычислительно требовательно, чем обнаружение столкновений на основе. Оно также работает для столкновений, которые происходят в результате как линейного движения (например, мяч движется по прямой линии), так и вращающегося движения (например, пинбол, столкнувшийся с мячом, когда он вращается на своем шарнире).

Однако Непрерывный спекулятивный также может быть менее точным; так же как и пропущенные столкновения, могут возникать «ложные столкновения», когда алгоритм неправильно предсказывает столкновение и выталкивает коллайдеры с курса.

Понимание спекулятивных CCD

Спекулятивный алгоритм CCD работает путем увеличения минимального граничного поля объекта, выравниваемого по широкой фазовой оси (AABB), основанного на линейном и угловом движении объекта. Алгоритм является спекулятивным, потому что он выбирает все потенциальные контакты во время следующего физического шага и подает их в решающий алгоритм, который убеждается, что все контактные ограничения удовлетворены, так что Rigidbody не туннелирует через столкновение.

Сфера, движущаяся от t0, имеет ожидаемое положение в t1, если на ее пути нет стен. Надув AABB в целевой позе, спекулятивный алгоритм обнаруживает два контакта с нормалями n1 и n2. Затем алгоритм инструктирует решающего учитывать эти контакты, так что сфера не туннелирует через стены.
Сфера, движущаяся из t0, имеет ожидаемое положение в t1, если на ее пути нет стен. Надув AABB в целевой позе, спекулятивный алгоритм обнаруживает два контакта с нормалями n1 и n2. Затем алгоритм инструктирует решателя учитывать эти контакты, так что сфера не туннелирует через стены.

Надувной AABB, основанный на скорости тока, помогает обнаружить все потенциальные контакты вдоль движущейся траектории, что позволяет решателю предотвращать пропущенные столкновения («туннелирование»).

Спекулятивная CCD, как правило, менее ресурсоемка, чем основанная на сканировании CCD, потому что она вычисляет только во время фазы обнаружения столкновений, а не во время фазы решения и интегрирования. Кроме того, спекулятивная CCD может найти контакты, которые основанная на сканировании CCD может упустить, потому что спекулятивная CCD расширяет широкофазную AABB на основе как линейного, так и углового движения объекта.

Однако спекулятивные CCD может вызвать ложное столкновение (или «призрачное столкновение»), когда движение объекта подвержено влиянию спекулятивной точки контакта, когда это не должно быть так. CCD В результате этого объекты, движущиеся на высокой скорости, могут скользить по тесселяционным столкновениям и прыгать вверх, хотя это и не должно происходить. Например, на следующей диаграмме сфера начинается с t0 и перемещается горизонтально вправо с прогнозируемым положением на t1 после интеграции. Надувной AABB перекрывает коробки b0 и b1, и CCD дает два спекулятивных контакта на c0 и c1. Потому что спекулятивные CCD генерирует контакты с использованием алгоритма ближайшей точки, c0 имеет очень наклонную норму, которую решающий предполагает как рампу.

Решитель предполагает, что точка контакта в c0 является рампой, поскольку алгоритм поиска ближайшей точки генерировал неточную контактную норму.
Решитель предполагает, что точка контакта в c0 является рампой, поскольку алгоритм поиска ближайшей точки генерировал неточную контактную норму.

Такая наклонная нормаль заставляет t1 прыгать вверх после интеграции, а не двигаться прямо вперед:

Ложное столкновение, генерируемое в c0, приводит к тому, что сфера ошибочно прыгает вверх вместо того, чтобы двигаться прямо вперед.
Ложное столкновение, генерируемое в c0, приводит к тому, что сфера ошибочно прыгает вверх вместо того, чтобы двигаться прямо вперед.

Спекулятивный CCD также может привести к пропущенным столкновениям, потому что спекулятивные контакты вычисляются только во время фазы обнаружения столкновений. Во время контактного решения, если объект получает слишком много энергии от решателя, он может оказаться вне первоначального надутого AABB после интеграции. Если столкновения происходят только за пределами AABB, объект туннелирует прямо через.

Например, на следующей диаграмме сфера движется влево от t0, в то время как палочка вращается по часовой стрелке. Если сфера набирает слишком много энергии от удара, она может в конце концов выйти из надутой AABB (красный пунктирный прямоугольник) в t1. Если столкновения происходят вне AABB, как показано в синем квадрате ниже, сфера может в конце концов пропустить столкновение и пройти через туннель прямо через него. Это происходит потому, что решитель рассчитывает только контакты внутри надутой AABB, и обнаружение столкновений не выполняется во время решения и интегрирования.

Сфера с надутым AABB с использованием спекулятивного CCD, который рассчитывает контакты только во время фазы обнаружения столкновений, поэтому могут возникнуть пропущенные столкновения.
Сфера с надутым AABB с использованием спекулятивного CCD, который рассчитывает контакты только во время фазы обнаружения столкновений, поэтому могут возникнуть пропущенные столкновения.