Поле расстояния ( или преобразование расстояния или карта расстояния ) - это сеточная структура, где каждая ячейка в сетке представляет кратчайшее расстояние от этой ячейки до ячейки с некоторым другим свойством. Чаще всего это «другое свойство» представляет собой граничный тип ячейки, такой как стена, которую игрок не может пройти, или поверхность меша.
У полей расстояния есть много областей применения. Например, вы можете представить, как они могут быть использованы для реализации управления движением (создавая карты расстояний до опасных или желательных объектов и взвешивая их решения о движении).
Тем не менее, вы специально спросили о столкновении. Использование полей расстояния для обнаружения столкновений между двумя движущимися объектами может быстро стать довольно неэффективным, поскольку восстановление полей расстояний может стать очень медленным по мере увеличения области действия поля (особенно в 3D, хотя методы для улучшения времени генерации являются областью исследования ).
Таким образом, столкновение поля расстояний используется главным образом для обнаружения столкновения динамического объекта со статическим. Чаще всего я видел, как это делается для обнаружения столкновения тканевых (или других деформируемых) объектов с другими неподвижными объектами в сцене .
Грубо говоря, это достигается с помощью подписанного поля расстояния для объекта статического , где один знак (часто отрицательный) представляет собой ячейку внутри сетки , а а другие (очевидно , часто положительны) представляет собой клетку вне сетки. Частицы сетки ткани могут быть преобразованы в локальное пространство статической сетки, и положения «до» и «после» частицы во время данного этапа моделирования ткани могут быть проверены по полю расстояния, чтобы определить, изменился ли знак (и таким образом произошло столкновение). Этот метод обсуждается, например, в статье 2003 года о моделировании одежды .
Обратите внимание, что я бы не советовал использовать поля расстояния в качестве единственного метода обнаружения столкновений. Они могут быть достаточно эффективными для того, в чем они хороши, но они не хороши во всем. Лучший способ добиться эффективного обнаружения столкновений - это часто использовать несколько методов, иерархически, с возрастающей точностью при прохождении иерархии.