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