×
Меню
Индекс

Collision detection

Выделенная заметка о методах работы движка по детектированию столкновений объектов.
За прошедшие, с последнего релиза заметок, пары лет, был собран и обработан некоторый дополнительный материал, использование которого будет полезным для более эффективной работы с моделями. Точнее, давно известные данные были обработаны и каталогизированы для лучшего понимания вопроса.
 
Просчет столкновений (взаимопересечений) - определение возможности прохождения одного объекта сквозь поверхность другого объекта.
Или взаимодействие двух объектов посредством своих поверхностей между собой.))
Которое действие требует, от движка, приличных вычислений, что сказывается на падении фпс и разных глюках.
Опять провались сквозь Кантон Вивека? А это как раз тема этой заметки!
Существа тупят на ровном месте? Вполне может быть, что вы зашли снова по правильному адресу!
 
Общее представление:
Фактический просчет столкновений осуществляется только для "живых" объектов и только с двумя, тремя, типами "неживых" объектов.
Живые: Нпс и Существа + магические снаряды и отчасти все прочие метательные предметы. Стрелы, болты, дротики.
Неживые: Static, Activators и статичные Lights объекты.
Т.е. модели светильников которые нельзя переносить и которые имеют некоторую видимую модель.
Здесь и далее:
Под "типами объектов", имеются в виду разделы в ТЕС КС.
"Живые" объекты - НПС и Существа + все метательное оружие.
"Неживые" - статики, активаторы, статичные светильники.
"Все прочие" - да, все что не входит в первые два типа. Предметы, книги, отмычки и пр.
 
Для всех остальных типов объектов столкновения не просчитываются.
Или, точнее будет сказать, просчитываются, но на минимальному уровне.
Так чтобы брошенный в мир предмет разместился по некоторой поверхности, а не исчез где-то под ней.
Вероятно, здесь учитывается только ось Z.
Хотя, как показали сборки МВСЕ и МСП от 05 2021, можно учитывать и XY, помещая объект вдоль косой поверхности.
Т.е. под некоторым углом.
Однако, для чистого МВ, верно только просчет по оси Z без "вращения" относительно оной.
Дальше, никаких просчетов не происходит. Объект становится полностью проходим и никак не реагирует на пролетающие сквозь него стрелы.
Надо полагать, что все дело в древности движка и сложности просчета всех столкновений, отчего упрощения помещали везде, где можно и где не стоило.
А в целях дополнительных оптимизаций, в движке, предусмотрены некоторые специальные объекты позволяющие упросить эти вычисления.
Помимо самих объектов, существуют также и алгоритмы позволяющие с разной точностью производить эти вычисления, что опять же должно влиять на фпс.
Отчего, правильно созданная геометрия (оных объектов) и правильно настроенные методы вычислений, позволяют несколько улучшить производительность.
Т.е. для МВ вычисления столкновений существенно влияют на производительность!
Поэтому, понимать, как и что здесь работает, может быть весьма полезным в целях правильной оптимизаций локаций и моделей существ.
 
Помимо прочего, коллизии взаимодействуют с АИ!
Что в свою очередь будет влиять на фпс и точность локализации живого объекта в пространстве относительно поверхностей.
Но, к сожалению, АИ в МВ до безобразия  примитивен.
Даже самые простые вычисления положения (существа) в пространстве требуют дополнительных маркеров, которые необходимо создавать в редакторе.
(те. самые Path Greed, без которых боты отчаянно тупят и не хотят ходить по пустошам эшленда).
Впрочем это уже немного другая история, однако об этом тоже здесь следует упомянуть.
Также, неправильно настроенные коллизии объектов (живых и неживых) влияют на поведения ботов.
Т.е. будет ли "видеть" существо другой живой объект, или нет.
Например, когда существо сможет стрелять в игрока, а когда даже не отреагирует.
Это тоже зависит от просчета коллизий объектов!
 
Итого, у нас есть "объекты" и "методы".
Хотя, методы (просчета столкновений) назначаются на все объекты (ноды и шейпы), но есть и особые объекты, которые позволяют немного улучшить ситуацию, за счет сокращения вычислений.
О чем здесь и будет показано.
Какие есть объекты для ускорения просчетов столкновений и, какие методы они для этого на них используются.
 
И у нас их ажно целых 3 типа! + несколько методов, настроек для каждого.
Что бы упросить чтение этой статьи, она была порезана на несколько вложенных.
Можно открыть первую заметку, из нее пойдут ссылки на остальные статьи.
 

Специальные объекты созданные для упрощения просчета столкновений.
 
Заметка про специальный "Контейнер" созданный для оптимизации просчетов коллизий в "неживых" объектах.
Заметка про методы просчета столкновений для "неживых" объектов, впрочем актуально и для "живых".
 
Заметка про специальный Объект (не контейнер) оптимизирующий просчеты преимущественно только для "живых" объектов.
Заметка про методы работы этого объекта. Каким он может быть и что из этого может получаться.
 
Заметка по Nif.xml файлу.
Который потребует некоторых правок для включения правильных настроек "специального объекта"!
Правки сомнительной необходимости, т.к. в МВ нормально работает только Box.
Да и то, в файлах существ только.
 
Краткое примечание о третьем и самом ходовом методе работы движка с коллизиями.
 
Аглицкая "академическая" статейка выделенная из Maximmerse.chm с указанием, как создавать прокси геометрию в МАХе.
См. здесь.
Попутно поясняющая в целом и в общем что это такое и с чем это едят.
Увы, для МВ, мало актуально...
И да, ТЕСэкспортер, не умеет управлять созданием прокси геометрии по указанному там методу.
Все, что он может, это создавать простой ББ, если некий объект в сцене был назван Bounding Box. См. здесь об этом.
 
Общеознакометительная аглицкая заметка по АБВ.
 
Еще одна аглицкая "академическая" статейка о теории взаимодействия разных типов детектирования коллизий между собой.
Несет "абстрактный" интерес, для МВ, по видимости, мало актуально.
Но для полноты картины, добавим и ее.
 
А здесь заметка по кол-ву треугольников в модели.
Аглицкая(С)
Для полноты картины можно заглянуть и в нее.
 
Заметка с наблюдениями и тестами.
Где описываются некоторые тесты с разными типами детектирования коллизий.
 
Заметка по ББ в целом и общем.
Где, Bounding Box описывается в качестве самостоятельного объекта ниф файла
Что и как он делает в игре.
Обязательно к прочтению!
Т.е. это практические наблюдения об использования этого объекта в игре!
 
Заметка про РК.
Описывает, что и как он делает в игре.
Ее обязательно надо читать!
Т.е. это практические наблюдения об использования этого объекта в игре!
 
Это смежная тема, но некоторые наблюдения относятся и к прокси геометрии.
Также много скриншотов!
 
Заметка со всякими общими примечаниями.
Общие примечания и некоторые картинки.
Смотреть в последнюю очередь.
 
Примечание.
Для ОпМВ, ситуация может быть заметно иной.
Т.к. поддержка прокси геометрии и флагов оной, возможна в полной мере.