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

ПОВРЕЖДЕНИЯВМЯТИНЫ И РЕШЁТКА

Вмятины и решётка

Достаточно сильный удар вдавливает металл кузова, и вмятина остаётся, пока её не отремонтируют. Один Data Asset, профиль, задаёт форму каждой вмятины. На этой странице разобраны настройки, которые формируют вмятину, и способы ремонта кузова. Решётка, которая держит вмятину, атлас, который её рисует, и путь от физического контакта до удара описаны в Основных понятиях. Если эти слова незнакомы, сначала прочитайте её.

Панель, которая получила удар, проваливается в том месте, куда пришёлся удар. Металл сминается как лист: вмятина тянется от контакта гармошкой, растекается по месту удара и становится глубже по мере того, как удар сильнее, до предела. Слабое касание кузов не трогает.

Отладочный удар вдавливает боковину. Вмятина остаётся, пока кузов не отремонтирован.

Краска стирается в тех же местах. См. Краска и царапины.

  • Удар. Удар — это изменение скорости кузова вдоль нормали контакта, в м/с. Кузов получает вмятину, только если удар быстрее Min Delta V (UCFProfile::MinDeltaV, 0.5 м/с). Более медленный контакт вмятины не оставляет.
  • Глубина. Один удар выдавливает Stiffness (UCFProfile::Stiffness, 3 см на м/с) за каждый м/с сверх Min Delta V, но не глубже Max Dent Per Hit (UCFProfile::MaxDentPerHit, 20 см). При значениях по умолчанию удар 15 м/с требует 43.5 см и получает 20 см. Ограничение удерживает один удар заметно ниже Max Displacement, поэтому повторные удары всё равно углубляют вмятину.
  • Ширина. Радиус вмятины — это Base Radius (UCFProfile::BaseRadius, 30 см) плюс Radius Per Delta V (1.5 см на м/с), умноженное на скорость удара. Он никогда не меньше 1.25 ячейки решётки. Lateral Scale (1.5) расширяет вмятину поперёк удара. Широкие короткие вмятины выглядят как смятый металл, узкие и круглые — как резина.
  • Складка. Удар в одну точку, например в столб, сминает металл за местом контакта. Crumple Ratio (3) задаёт, как далеко, кратно глубине вмятины. Удар, который растекается по плоскому участку, например по стене, наоборот, прижимает поверхность ровно.
  • Рваный край. Noise Amount (0.3) случайно снимает немного глубины с каждого узла, поэтому сильная авария оставляет рваный металл, а не ровную пластину. Drag Fraction (0.3) тянет вмятину вдоль поверхности, когда удар скользит.
  • Предел. Ни один узел не уходит дальше Max Displacement (UCFProfile::MaxDisplacement, 60 см). Материалы кузова должны использовать то же число как границу смещения. Основные понятия описывают эту связку.
  • Ремонт. UCFDeformComponent::Repair убирает все вмятины и царапины на всех инстансах и возвращает навесные детали и стёкла на место. Работает он только на сервере (это авторити), остальные инстансы повторяют за ним. Грязь остаётся. Wash убирает грязь.
  • Автоматический ремонт. Auto Repair Delay (UCFSettings::AutoRepairDelay) ремонтирует кузов через столько секунд после последнего повреждения. По умолчанию 0, что означает «никогда».

Эти шаги создают профиль вмятин. Настройка автомобиля такая же, как в Быстром старте.

  1. В Content Browser выберите Add > Miscellaneous > Data Asset, укажите CFProfile и назовите ассет в своём проекте.
  2. Откройте профиль. Оставьте Dents включённым и начните со значений по умолчанию из таблицы ниже. Resolution в группе Lattice — это число узлов решётки по каждой оси. Каждая ось должна быть кратна 4, а проверка ассета предупреждает, если решётка не умещается в один слот атласа.
Lattice
Resolution1688
Lattice Margin10.0
Use Explicit Bounds
Explicit Bounds
Min Radius in Cells1.25
Components
Include Tags0 Array element
Exclude Tags0 Array element
Dents
Dents
Deform Collision
Hinged Parts
Dented Part Collision
Min Delta V0.5
Stiffness3.0
Max Dent Per Hit20.0
Base Radius30.0
Radius Per Delta V1.5
Lateral Scale1.5
Crumple Ratio3.0
Drag Fraction0.3
Noise Amount0.3
Bulge0.5
Bulge Down Share0.3
Max Displacement60.0
Stiffness Zones0 Array element
Группы Lattice, Components и Dents профиля вмятин со значениями по умолчанию.
  1. Передайте кузову профиль. Адаптер автомобиля сам создаёт deform-компонент: выберите адаптер и задайте Deform Profile. Собственный эктор получает CFDeform через Add в группе Crushform, с Profile, который указывает на ассет. Без профиля компонент ничего не делает.
  2. Подключите материалы кузова, как в Быстром старте, шаг 1. Меш, у которого материал не подключён, не двигается.

Blueprint восстанавливает кузов одним вызовом, Repair. Граф ниже выполняется, когда срабатывает пользовательское событие RepairCar. Он получает deform-компонент, который держит адаптер седана, через Get Deform, и вызывает на нём Repair.

Граф выполняется, когда срабатывает событие RepairCar, и вызывает Repair у deform-компонента.

Из C++ удар, который физика не зафиксировала, например объект, который кузов сломал, не касаясь его, передаётся через ApplyWorldHit:

// A 12 m/s hit where the prop stood. Only the machine that simulates the body applies it.
const FVector PropLocation = Prop->GetActorLocation();
const bool bApplied = Deform->ApplyWorldHit(PropLocation, FVector::UpVector, 12.0f);

ApplyWorldHit возвращает false, когда точка лежит за пределами решётки, когда удар слишком мягкий для вмятины или когда этот инстанс не может применять удары к кузову.

СвойствоЧто делаетПо умолчанию
UCFProfile::bDentsВыкл.: удары и прижатия не оставляют ни вмятин, ни царапин. Грязь продолжает работать.Вкл.
UCFProfile::MinDeltaVИзменение скорости, м/с, ниже которого удар не оставляет вмятины.0.5
UCFProfile::StiffnessГлубина вмятины, см, на каждый м/с сверх Min Delta V.3
UCFProfile::MaxDentPerHitСамая большая глубина вмятины от одного удара, см, при жёсткости зоны 1.20
UCFProfile::BaseRadiusРадиус вмятины при нулевой скорости, см.30
UCFProfile::RadiusPerDeltaVРадиус, который добавляется на каждый м/с удара, см.1.5
UCFProfile::LateralScaleРасширяет вмятину поперёк удара.1.5
UCFProfile::CrumpleRatioНасколько далеко точечный удар сминает металл, кратно его глубине.3
UCFProfile::NoiseAmountСлучайная доля глубины точечного удара, которая снимается с каждого узла, до 0.9.0.3
UCFProfile::MaxDisplacementНаибольшее смещение любого узла, см. Материалы кузова используют его как границу смещения.60
UCFSettings::AutoRepairDelayСекунды после последнего повреждения до самостоятельного ремонта кузова. 0 — никогда.0

Откройте Proving Ground в Play In Editor. Команда пропускает машину, которой вы управляете, поэтому целью будет вторая машина: поставьте в поле зрения машину, настроенную с профилем выше, и запомните её имя так, как его показывает World Outliner.

  1. Введите Crushform.DebugImpact 15 <car name>, заменив <car name> на имя этой машины. Удар 15 м/с придётся по названной машине с того места, где вы стоите, а в логе появится строка it is now damaged.
  2. Введите Crushform.Debug 2. Решётка показывается как узлы и балки. Каждый недавний удар оставляет синюю сферу со стрелкой нормали на несколько секунд.
  3. Введите Crushform.RepairAll. В логе появится число отремонтированных кузовов, и вмятины исчезнут.

Crushform.Debug, Crushform.DebugImpact и Crushform.RepairAll — это читы: они работают во всех сборках, кроме Shipping, и в редакторе.

Причина. Изменение скорости равно Min Delta V или меньше него. Вмятина появляется только при ударе сильнее порога.

Решение. Понизьте Min Delta V или ударьте сильнее. Чтобы проверить сам кузов, выполните Crushform.DebugImpact 15 <car name> по нему (см. «Проверка работы»). Если он получает вмятину, значит, удар в игре был слишком мягким.

Причина. Max Dent Per Hit ограничивает один удар 20 см по умолчанию. Более сильный удар не углубляет вмятину сверх этого предела.

Решение. Увеличьте Max Dent Per Hit, оставив его заметно ниже Max Displacement, чтобы повторные удары всё равно углубляли вмятину.

Причина. Auto Repair Delay больше 0. Кузов ремонтируется через столько секунд после последнего повреждения.

Решение. Установите Auto Repair Delay в 0 в Project Settings > Plugins > Crushform, в разделе Repair, или задайте нужную задержку.

Вмятины есть на одних панелях и никогда не появляются на других

Заголовок раздела «Вмятины есть на одних панелях и никогда не появляются на других»

Причина. Include Tags и Exclude Tags профиля фильтруют меши, которые прогибаются. Меш с исключённым тегом никогда не получает вмятин, а деталь, которая двигается относительно кузова, должна быть исключена.

Решение. Проверьте теги компонента панели и два списка в профиле.