Открыта запись на курс Vehicles and Props Старт обучения 28 ноября 2024 Преимущества курса: - разбор домашних работ только автором курса; - справедливые фидбеки каждую неделю; - помощь в выполнении тестового задания при трудоустройстве; - рекомендации в топовые студии в РФ при успешном прохождении курса.
Коллизия (Collision)

Коллизия — это упрощённая геометрия, которая повторяет общую форму 3D модели с меньшим количеством полигонов и создает возможность столкновений игрока с 3D объектами в игре. На неё требуется минимальное количество полигонов, отсутствие мелких деталей, определяется все это по принципу достаточности в каждом конкретном случае. Коллизию можно создать автоматически с помощью инструментов игрового движка, либо вручную в 3D редакторе (Maya, Bldender и др.). В частых случаях более точным и дешёвым вариантом для оптимизации ассета будет создание коллизии вручную. В Unreal Engine есть базовая утилита создания геометрии коллизии в Static Mesh Editor.

Создание Collision в ручную

Самостоятельно коллизию можно создать двумя способами. С помощью примитивов в самом движке в разделе Static Mesh Editor - Collision, либо в 3D редакторе (Maya, Bldender и др.). При ручном создании, коллизия должна совпадать по имени с ассетом для которого была сделана, обычно она имеет какие-либо дополнительные префиксы к основному неймингу. Например, если ваш ассет имеет название SM_Wood_Chair_A, то его коллизия будет иметь название UCX_SM_Wood_Chair_A.

Документация Unreal Engine приводит в пример следующие виды префиксов:

  1. UBX_имя ассета – при наличии коллизии в виде бокса без изменений.
  2. UCP_имя ассета – капсульная коллизия, представляющая собой цилиндрический объект с вершинами в виде полушарий. В ней не должно быть большого количества сегментов.
  3. USP_имя ассета – коллизия в виде сферы с небольшим количеством сегментов.
  4. UCX_имя ассета – сложная форма ассета, не имеющая в себе разрывов, отверстий и внутренних углов.

Лучшим решением при создании коллизии является её разбиение на простые примитивы, которым не желательно пересекаться между собой. Если коллизий несколько для одного объекта, они должны иметь уточнения в имени. Коллизия экспортируется вместе с основным мешем в один FBX файл (она может быть скрыта или видимой, это не имеет значения в технической работе коллизии при экспорте), расположение пивота у коллизии и меша должно совпадать и находиться в центре координат.

В выпадающем списке раздела Collision есть различные способы добавления коллизии. Первые три: Add Sphere/Capsule/Box Simplified Collision являются примитивами, которые можно редактировать с помощью пивота при нажатии на зелёную габаритную сетку, кроме того, её можно дублировать через Ctrl+D. Следующие варианты идут с добавлением K-DOP. Это простые генераторы коллизии, где K – число плоскостей, проецируемых по выбранной оси (X, Y, Z).

  • 10 – бокс с 4 забевеленными эджами (гранями) по одной из осей.
  • 18 – бокс со всеми забевеленными эджами.
  • 26 – бокс со всеми забевеленными эджамии и углами.

Автоматическая коллизия Auto Convex Collision

Еще одним вариантом создания автоматической коллизии является Auto Convex Collision. Появляется панель Convex Decomposition, в которой находится три параметра:

  • Hull Count – общее количество примитивов.
  • Max Hull Vertex – общее количество вершин, которое будет иметь коллизия.
  • Hull Precision – коэффициент точности проекции коллизии.

Такой вариант создания коллизии требует точности в выставлении данных параметров, но несмотря на это, он все равно может быть не идеален.

Добавленную коллизию можно удалить через Remove Collision в выпадающем меню при нажатии раздела Collision.

Collision Pressets (коллизионные прессеты)

У любой коллизии также есть Collision Presets, прессеты помогают настроить взаимодействие ассета с различными элементами среды и событиями, среди них можно выбрать:

  • Default – используются параметры выставленные в Static Mesh Editor.
  • Custom – задаются пользовательские параметры для инстанса.
  • NoCollision – нет коллизии.
  • BlockAll – статический объект блокирует по умолчанию все Actor.
  • OverlapAll – статический объект при пересечении задает overlap событие по умолчанию все Actor.
  • BlockAllDynamic – динамический объект блокирует по умолчанию все Actor.
  • OverlapAllDynamic – динамический объект при пересечении задает overlap событие по умолчанию все Actor.
  • IgnoreOnlyPawn – игнорируется только объект типа Pawn (например, персонаж игрока).
  • OverlapOnlyPawn – задает при пересечении overlap событие только объектом типа Pawn.
  • Pawn – сам объект типа Pawn, который может использовать капсульную коллизию.
  • Spectator – объект типа Pawn, который игнорирует все статические Actor.
  • CharacterMesh – объект типа Pawn, который используется для персонажа.
  • PhysicsActor – Actor с симуляцией.
  • Destructible – разрушаемый Actor.
  • InvisibleWall – статический невидимый объект.
  • InvisibleWallDynamic – динамический видимый объект.
  • Trigger – динамический объект, используемый как триггер.
  • Ragdoll – SkeletalMeshComponent с симуляцией.
  • Vehicle – блокирует другой транспорт, статические и динамические объекты.
  • UI – статический объект, который перекрывает все Actor.

Все новые пользовательские коллизии имеют свои свойства по умолчанию

Collision complexity – сложность коллизии:
  • Project Default – задаются параметры по настройкам проекта.
  • Simple and Complex – в зависимости от запросов в сцене может быть использована простая и сложная коллизия.
  • Use Simple Collision as Complex – используется только простая коллизия.
  • Use Complex Collision as Simple – используется только сложная коллизия.

У включенной коллизии может быть 4 возможных состояния:

  • NoCollision – тело коллизии не будет видно и как-либо использовано в пространстве или симуляции. Является лучшим вариантом для оптимизации.
  • Query Only – используется для пространственных запросов. Подходит для движения персонажей и объектов, которые не нуждаются в физической симуляции.
  • Physics Only – подходит для физической симуляции (скелетная анимация и ограничения). Полезно в работе с вторичной анимацией, где не нужно обнаружение костей.
  • Collision Enabled –может быть использовано как для пространственных запросов, так и при физической симуляции.

В меню можно выбрать тип объекта в соответствии с тем, что он будет делать и его реакцию Object Responses, который имеет такие же параметры, задающие ответное действие на соответствующий объект.

  • WorldStatic – используется для неподвижных объектов. Параметр хорошо подходит для объектов с одноименным типом (например: пак коробок или бочек).
  • WorldDynamic – используется для Actor, которые могут быть подвижны под влиянием анимации или кода (например: лифт, двери).
  • Pawn – объекты, контролируемые игроком (например: персонаж).
  • PhysicsBody – объект перемещаемый благодаря физической симуляции.
  • Vehicle – транспорту задается параметр по умолчанию.
  • Destructible – разрушаемому объекту задается параметр по умолчанию.

Collision Response определяет ответную реакцию физического тела (самого объекта) с другими типами трассировки и объектов. Важным уточнением является то, что взаимодействие происходит между двумя физическими телами, что влияет на видимость конечного результата. Тип объекта и ответ коллизии в этом случае очень важные параметры.

  • Ignore – любой объект будет проигнорирован.
  • Overlap – объект, при пересечении с которым может привести к заданному overlap событию, если события нет, он не отличается от игнора.
  • Block – объект будет заблокирован, произойдет столкновение.
  • Trace Responses – используется при трассировке лучей, например при использовании ноды Line Trace Channel в блюпринтах.
  • Visibility – тестирование общей видимости.
  • Camera – при использовании трассировки через камеру на что-либо.
Ваша заявка отправлена!
Если во входящих на почте: нет письма, проверьте папку спам или напишите нам в телеграм