Перейти к содержимому
CRUSHFORMV1.1.0
ПОЛУЧИТЬ НА FAB

ПОВРЕЖДЕНИЯКОЛЛИЗИЯ КУЗОВА

Коллизия кузова

Когда Deform Collision включён, коллизия помятого кузова принимает форму его вмятин. Машина, вдавленная аварией, вдавлена и для других машин, объектов и пешек, которые в неё врезаются. Масса и инерция сохраняют свои значения, поэтому машина едет как прежде.

Помятый седан в виде игры в редакторе с пурпурными каркасными линиями коллизии над кузовом и белыми каркасными линиями коллизии задней детали, которая сорвалась с крепления.
Crushform.ShowCollision 1 после удара в 20 м/с сзади: пурпурный — живая коллизия кузова, белый — коллизия оторвавшейся задней детали.

За вмятинами следует только собственная простая коллизия кузова: боксы, конвексы, сферы и капсулы физических форм корня. Форма, приваренная к кузову из другого компонента, сохраняет свою форму. О профиле и решётке, за которыми следует коллизия, см. Основные понятия.

  • Боксы и конвексы разрезаются на блоки там, где вмятина их изгибает. Плагин режет форму по плоскостям узлов решётки везде, где решётка изгибает её поверхность дальше, чем Collision Block Tolerance от того, что дали бы одни её углы. Каждый блок — это выпуклая оболочка его точек, которую двигает решётка.
  • Сферы и капсулы сохраняют одну выпуклую оболочку своих точек поверхности, которую двигает решётка.
  • Формы без вмятин остаются как есть. Кузов без вмятин сохраняет собственные формы коллизии.

Плагин перестраивает коллизию, когда это нужно. Перестройка начинается, когда точка решётки на форме сдвинулась больше, чем на Collision Rebuild Threshold (2 см), с последней сборки. Сборки идут не чаще одного раза за Collision Rebuild Interval (0.5 с), поэтому вмятина, которая приходит раньше, ждёт остальных вмятин и попадает в ту же сборку. Новые оболочки подменяются на живом кузове, поэтому он сохраняет свою скорость, состояние сна, джоинты и массу.

Ремонт сразу возвращает общие формы. Он не ждёт интервала.

Тяжёлой сборке не обязательно заканчиваться в кадре удара. Collision Defer Frames равно 0 или 1 (по умолчанию 1; значение больше 1 читается как 1). При 1 плагин считает новые оболочки в рабочем потоке, а перестройка и вырез кузова оказываются на кузове до физики следующего кадра. Если рабочий поток к тому времени не закончил, игровой поток ждёт его там. Поэтому кадр удара остаётся коротким, а это важно на слабых машинах, и на медленной машине следующий кадр может оказаться длиннее. Пока оболочки не легли на место, помятый кузов сохраняет прежнюю коллизию. Сборка, запрошенная, пока идёт другая, начинается, когда та закончится, и занимает свой кадр. Оторванная деталь ждёт на своём месте или продолжает качаться на шарнире, пока её вырез не окажется на кузове, и только потом падает: кадром позже или двумя, если шла другая сборка коллизии. Оболочка оторванной детали ложится после физики этого кадра. Задайте 0, чтобы строить всё в кадре удара. Профиль устройства может задать то же значение консольной переменной Crushform.Collision.DeferFrames.

Расшатанные навесные детали тоже следуют за своими вмятинами. Когда дверь или капот отрываются, их коллизия — это одна выпуклая оболочка их помятой формы, если в профиле включён Dented Part Collision или шарнир переопределяет его, и включены Hinged Parts. См. Навесные детали.

Для того чтобы коллизия следовала за вмятинами, должны быть включены две вещи. Dents должны быть включены в профиле, а у корня кузова должно быть физическое тело с простыми формами. Без физического тела плагин ничего не делает и ничего не сообщает. Без простых форм он пишет предупреждение в лог, и коллизия остаётся прежней.

  1. В Content Browser выберите Add > Miscellaneous > Data Asset, укажите CFProfile и назовите его. Профиль задаёт, как кузов получает вмятины. Остальное описано в Вмятинах и решётке. Пример машины использует DA_CF_Profile_Sedan.
  2. Откройте профиль. В категории Dents оставьте Dents включённым и оставьте Deform Collision включённым. Оба включены по умолчанию.
  3. Откройте Blueprint автомобиля, выберите компонент Crushform Chaos Vehicle Adapter и задайте Deform Profile — ваш профиль.
  4. По желанию: настройте значения коллизии в Project Settings > Plugins > Crushform > Collision. Значения по умолчанию подходят для большинства кузовов.
Dents
Dents
Deform Collision
Hinged Parts
Dented Part Collision
Группа Dents профиля вмятин: четыре переключателя, все включены.
Collision
Collision Rebuild Threshold2.0
Collision Rebuild Interval0.5
Collision Block Tolerance1.5
Max Collision Blocks96
Deform Collision
Collision Defer Frames1
Группа Collision в Project Settings, в разделе Plugins > Crushform.

Узла Blueprint нет, и нет вызова C++, который меняет коллизию. Коллизия сама следует за вмятинами, а переключатель находится в профиле. Чтобы вернуть формы, используйте Repair на deform-компоненте. На сервере он убирает вмятины, и коллизия уходит вместе с ними. См. Вмятины и решётку. Повреждения, за которыми следует коллизия, — это те же, о которых сообщают Зоны повреждений и события.

СвойствоЧто делаетПо умолчанию
UCFProfile::bDeformCollisionСледует ли коллизия кузова за его вмятинами. Масса и инерция сохраняют свои значения. Условие редактирования: Dents включён.Вкл.
UCFSettings::bDeformCollisionТо же для всего проекта. Выкл. побеждает любой профиль, а оторванная деталь не вырезается из кузова: она начинает внутри коллизии, и решатель выталкивает её наружу. Project Settings > Plugins > Crushform > Collision.Вкл.
UCFProfile::bDentsОставляют ли удары и прижатия вмятины на кузове вообще. Выкл.: коллизия никогда не меняется.Вкл.
UCFProfile::bDentedPartCollisionСталкивается ли оторванная навесная деталь со своей вмятиной. Нужны Deform Collision и Hinged Parts.Вкл.
UCFSettings::CollisionRebuildThresholdНасколько должна сместиться точка решётки на форме, см, прежде чем коллизия будет собрана заново.2
UCFSettings::CollisionRebuildIntervalМинимальная пауза между двумя сборками коллизии одного кузова, с.0.5
UCFSettings::CollisionDeferFramesСколько кадров тяжёлая сборка коллизии может идти в рабочем потоке, прежде чем оказаться на кузове, 0 или 1. 0 строит её в кадре удара.1
UCFSettings::CollisionBlockToleranceНасколько решётка может изогнуть бокс или конвекс сверх того, что дают их углы, см, прежде чем он разрежется на блоки.1.5
UCFSettings::MaxCollisionBlocksНаибольшее число блоков коллизии, на которые разрезаются боксы и конвексы одного кузова.96

В любой сборке, кроме Shipping, запустите игру в редакторе. Crushform.DebugImpact никогда не бьёт по машине, которой вы управляете, потому что трассировка её пропускает. Подъедьте к припаркованной машине, например BP_VehicleAdvSedan2 на карте Proving Ground, примерно на 3–5 м от её задней части, и введите Crushform.DebugImpact 20 BP_VehicleAdvSedan2. Имя наводит удар, если смотреть с того места, где вы стоите, на точку кузова этой машины, ближайшую к её середине; с 3–5 м сзади удар попадает в заднюю часть. Затем введите Crushform.ShowCollision 1. Пурпурные каркасные линии показывают живую коллизию каждого повреждаемого кузова, а блоки помятого кузова следуют за его помятой формой. Деталь, которая качается или сорвалась с крепления, показывается белым. Crushform.ShowCollision 0 выключает оверлей.

Введите Crushform.RepairAll, чтобы отремонтировать машину. Коллизия сразу возвращается к своим прямым формам.

  • Коллизия остаётся прямой под видимой вмятиной. Либо Dents, либо Deform Collision выключены в профиле, либо Deform Collision выключен в настройках проекта, либо у корня нет физического тела (без предупреждения), либо у физического тела корня нет простой формы коллизии. В последнем случае лог предупреждает, что корень «has no simple collision shape, its collision does not follow the dents». Добавьте простую коллизию корню в его Physics Asset. Чтобы увидеть, с чем сталкивается плагин, введите Crushform.ShowCollision 1: если пурпурный контур остаётся прямым под вмятиной, коллизия за ней не следует.
  • Коллизия догоняет вмятину с небольшой задержкой. Так задумано. Сборка ждёт, пока точка не сдвинется на Collision Rebuild Threshold и пока не пройдёт Collision Rebuild Interval. Понизьте любое из значений, чтобы перестраивать чаще, ценой большего числа перестроений. Когда сборка началась, при Collision Defer Frames 1 она оказывается на кузове до физики следующего кадра; 0 ставит её на кузов в кадре удара ценой более длинного кадра.
  • Шаг физики может ещё идти по формам до вмятины. При асинхронной физике (UPhysicsSettings::bTickPhysicsAsync) удар может дойти до игрового потока уже после начала следующего шага физики, и при 0, и при 1, если кадры не короче шага физики. Во время такого шага тело сохраняет свои формы, какими они были до вмятины.
  • Складка внутри одной ячейки решётки не видна в коллизии. Блоки коллизии не мельче ячейки решётки. Поднимите Resolution профиля, чтобы дать решётке больше узлов.
  • Масштабирование машины во время игры ломает её коллизию. Изменение масштаба помятого кузова во время работы не поддерживается. Масштабируйте машину до того, как она получит вмятины.