ИНТЕГРАЦИЯПРОФИЛИ И ПРЕСЕТЫ
Профили и пресеты
Профиль — это ассет данных, который настраивает одну систему для одного типа кузова: как автомобиль получает вмятины, как деформируются его шины, как звучит двигатель. Плагин читает профиль из компонента, которому принадлежит система, поэтому в одном проекте может работать сразу несколько профилей. На этой странице перечислены классы профилей, место каждого из них, пресеты, которые плагин поставляет в папке Presets (/Crushform/Presets), и другие значения слова «пресет» в плагине.
На этой странице нет графа Blueprint. Профиль задаётся в значениях по умолчанию класса или в C++ до начала игры, и ни одна функция Blueprint не задаёт его компоненту: UCFDeformComponent::Profile имеет BlueprintReadOnly, а UCFTireComponent::SetProfile доступна только в C++.
Где задаётся каждый профиль
Заголовок раздела «Где задаётся каждый профиль»| Класс ассета | Что настраивает | Задаётся в | Значение проекта по умолчанию | Значение плагина по умолчанию |
|---|---|---|---|---|
UCFProfile | Как кузов получает вмятины, потёртости краски и грязь | UCFDeformComponent::Profile или DeformProfile на адаптере автомобиля | UCFSettings::DefaultProfile | /Crushform/Presets/DA_CF_DefaultProfile |
UCFTireProfile | Как шина трассирует поверхность и деформируется | UCFTireComponent::Profile или TireProfile на адаптере автомобиля | UCFTireSettings::DefaultProfile | /Crushform/Presets/DA_CF_DefaultTireProfile |
UCFEngineSoundProfile | Петли, высота тона и затухание звука двигателя | UCFEngineAudioComponent::Profile или EngineSoundProfile на адаптере автомобиля | UCFEngineSettings::DefaultProfile | /Crushform/Engine/DA_CF_DefaultEngineSound |
Остальные ассеты данных плагина являются определениями, а не профилями. Стеклянные панели принимают UCFGlassDefinition, разрушаемые объекты — UCFBreakablePropDefinition, деревья — UCFTreeConfig, а звуки ударов — UCFImpactFeedbackSet. У каждого из них есть своя страница в этом руководстве. Поверхности, которые задают грязь и звук качения для каждого покрытия, принимают ассет UCFSurfaces, указанный в UCFSettings::Surfaces.
Создавайте все эти ассеты через Add > Miscellaneous > Data Asset в Content Browser и выбирайте нужный класс. Плагин не регистрирует собственной фабрики и собственной категории ассетов.
Задание профиля кузову
Заголовок раздела «Задание профиля кузову»Компонент без профиля ничего не делает. Для UCFDeformComponent это происходит без предупреждений: решётка не строится. Компонент читает свой профиль при начале игры, поэтому задайте его одним из двух способов:
- В значениях по умолчанию класса Blueprint, в поле Profile в Details компонента.
- В C++ между
SpawnActorDeferredиFinishSpawning, до начала игры компонента.
У автомобиля с адаптером оставьте поле профиля адаптера пустым, чтобы взять значение проекта по умолчанию. Адаптер передаёт компонентам деформации и шин значение проекта по умолчанию, когда поле пустое. Компонент двигателя, если у него нет собственного профиля, тоже использует значение проекта по умолчанию. Явно заданное значение в поле адаптера всегда важнее.
Если профиль задан, но ни один меш владельца не может деформироваться, компонент пишет предупреждение и остаётся выключенным:
%s has a profile but no deformable mesh components; Crushform stays offОбычная причина — список Include Tags, которому не соответствует ни один меш, или владелец, все меши которого исключены через Exclude Tags.
UCFProfile
Заголовок раздела «UCFProfile»UCFProfile хранит настройки одного кузова. Его свойства сгруппированы по категориям, которые показаны на панели Details. В таблице перечислены свойства, определяющие внешний вид и поведение повреждений. Полный список находится в справочнике API.
| Свойство | Что делает | По умолчанию |
|---|---|---|
UCFProfile::Resolution | Узлы решётки по каждой оси. Каждая ось кратна 4, а решётка должна помещаться в один слот атласа | 16, 8, 8 |
UCFProfile::LatticeMargin | На сколько сантиметров решётка выходит за коллизию кузова с каждой стороны | 10 |
UCFProfile::bUseExplicitBounds | Использует ExplicitBounds как бокс решётки вместо бокса коллизии | Выключено |
UCFProfile::IncludeTags | Деформируются только компоненты мешей с одним из этих тегов. Пусто означает все Static Mesh и Skeletal Mesh | Пусто |
UCFProfile::ExcludeTags | Компоненты мешей с одним из этих тегов никогда не деформируются. Используйте его для движущихся частей, например дверей | Пусто |
UCFProfile::bDents | Выключено: удары, сдавливания и отчёты никогда не оставляют на кузове вмятин или царапин | Включено |
UCFProfile::bDeformCollision | Коллизия кузова следует за вмятинами | Включено |
UCFProfile::bHingedParts | Выключено: навесные детали никогда не качаются, не отваливаются и не отрываются | Включено |
UCFProfile::MinDeltaV | Скорость удара в м/с, ниже которой кузов не получает вмятин | 0.5 |
UCFProfile::Stiffness | Глубина вмятины в сантиметрах на каждый м/с сверх MinDeltaV | 3 |
UCFProfile::MaxDentPerHit | Самая глубокая вмятина от одного удара в сантиметрах там, где жёсткость зоны равна 1 | 20 |
UCFProfile::CrumpleRatio | Глубина смятия металла от точечного удара, как доля глубины вмятины | 3 |
UCFProfile::MaxDisplacement | Максимальное смещение любого узла в сантиметрах. Материалы кузова используют его как Max World Position Offset Displacement | 60 |
UCFProfile::StiffnessZones | Боксы, в которых кузов жёстче или мягче остальных участков | Пусто |
UCFProfile::DentAbrasion | Износ краски, добавляемый на каждый сантиметр вмятины | 0.002 |
UCFProfile::MinScrapeSpeed | Скорость скольжения в м/с, ниже которой контакты не трогают краску | 1.5 |
UCFProfile::MaxPlausibleDeltaV | Самый быстрый удар или скольжение, о которых может сообщить клиент, в м/с. Сервер отклоняет всё, что выше | 40 |
UCFProfile::DirtScale | Умножает каждое отложение грязи на кузове. Ноль оставляет его чистым | 1 |
| Lattice | ||
|---|---|---|
| Resolution | 1688 | |
| Lattice Margin | 10.0 | |
| Use Explicit Bounds | ||
| Explicit Bounds | ||
| Min Radius in Cells | 1.25 | |
| Components | ||
| Include Tags | 0 Array element | |
| Exclude Tags | 0 Array element | |
| Dents | ||
| Dents | ||
| Deform Collision | ||
| Hinged Parts | ||
| Dented Part Collision | ||
| Min Delta V | 0.5 | |
| Stiffness | 3.0 | |
| Max Dent Per Hit | 20.0 | |
| Base Radius | 30.0 | |
| Radius Per Delta V | 1.5 | |
| Lateral Scale | 1.5 | |
| Crumple Ratio | 3.0 | |
| Drag Fraction | ||
| Noise Amount | ||
| Bulge | ||
| Bulge Down Share | ||
| Max Displacement | 60.0 | |
| Stiffness Zones | 0 Array element | |
Настройки вмятин описывают, как гнётся металл. Первыми меняйте Stiffness, MaxDentPerHit и MaxDisplacement. Держите MaxDentPerHit заметно меньше MaxDisplacement, чтобы повторные удары всё ещё углубляли вмятину. Затем проверьте материалы: их Max World Position Offset Displacement должен быть не меньше MaxDisplacement плюс амплитуда складок. Материалы и шейдеры объясняет это ограничение.
Зоны жёсткости
Заголовок раздела «Зоны жёсткости»UCFProfile::StiffnessZones — это список боксов в пространстве корневого компонента. У каждой зоны свой Stiffness: значение 1 даёт вмятины такой же глубины, как у остального кузова, значение 3 даёт вмятины глубиной в треть, а 0.5 — вдвое глубже. У зоны также есть EdgeWidth, MaxDepth (ноль берёт MaxDisplacement профиля) и переключатель bMirrored, который распространяет зону и на симметричную сторону кузова относительно его центральной линии. Name нужен только редактору. Зоны задаются в Zone Editor, а Crushform.ShowZones 1 рисует их.
UCFTireProfile
Заголовок раздела «UCFTireProfile»UCFTireProfile задаёт, как один тип шин трассирует поверхность и деформируется. Основные настройки:
| Свойство | Что делает | По умолчанию |
|---|---|---|
UCFTireProfile::TraceChannel | Канал, по которому трассирует шина: ландшафт, камни и дорога | ECC_WorldStatic |
UCFTireProfile::NumArcSamples | Лучи по дуге контакта. Нечётное число оставляет один луч строго вниз | 13 |
UCFTireProfile::NumLateralRows | Ряды по протектору. Три покрывают оба края и центр протектора | 3 |
UCFTireProfile::MaxDeflection | Самая глубокая видимая вмятина в сантиметрах | 14 |
UCFTireProfile::RestingDeflection | На сколько сжата стоящая шина, как доля её радиуса | 0.05 |
UCFTireProfile::LoadSensitivity | Насколько растёт просадка в покое при текущей нагрузке на колесо | 1 |
UCFTireProfile::MaxLoadFactor | Предел коэффициента нагрузки, до которого может дойти просадка | 2.5 |
UCFTireProfile::MergeAngleDeg | Близкие контакты сливаются в один, только если их нормали отличаются не больше чем на это значение, в градусах. Низкое значение пускает маленькое круглое препятствие под большой шиной в четыре контакта, и земля под шиной теряет свой | 45 |
UCFTireProfile::MinObstacleRadius | Наименьший радиус, см, до которого читается кривизна круглого препятствия. Более тонкое препятствие, например труба, прогибает шину так, будто оно такой толщины | 3 |
UCFTireProfile::RimRadiusOverride | Радиус обода, см. 0 читает параметр RimRadius материала шины | 0 |
UCFTireProfile::RubberMargin | Резина, которая остаётся между препятствием и ободом, см, когда колесо сдвинуто с препятствия | 2 |
UCFTireProfile::MaxPush | Наибольший сдвиг всего колеса с препятствия, см. За этим пределом обод может войти в препятствие | 10 |
Три настройки обода, RimRadiusOverride, RubberMargin и MaxPush, важны только для колеса, чей хост принимает выталкивание; см. Host-интерфейсы.
Компонент шин без профиля оставляет шины круглыми. Он пишет строку уровня Verbose и больше ничего не делает. У автомобиля с адаптером, когда поле TireProfile адаптера пустое, используется значение проекта по умолчанию DA_CF_DefaultTireProfile. Бюджет, который решает, какие шины деформируются, задаётся в Crushform Tire, а не в профиле.
UCFEngineSoundProfile
Заголовок раздела «UCFEngineSoundProfile»UCFEngineSoundProfile хранит петли звука двигателя и то, как они воспроизводятся:
- Layers: петли в любом порядке. Компонент сортирует их по оборотам, а слой без звука пропускается.
- Attenuation: обязателен. Без него звук двигателя остаётся выключенным.
- Coast Volume: доля полной громкости, которая слышна без нагрузки. По умолчанию 0.6.
- Min Pitch и Max Pitch: самая низкая и самая высокая высота тона, на которой играет петля, относительно записанной скорости. По умолчанию 0.5 и 2.
- Starter Sound и Shutdown Sound: петля стартера, пока двигатель прокручивается, и звук, когда работающий двигатель выключается.
Если у компонента нет профиля и нет значения проекта по умолчанию, двигатель остаётся беззвучным, и об этом пишется в лог.
Поставляемые пресеты
Заголовок раздела «Поставляемые пресеты»Пресеты — это контент плагина. В Content Browser откройте Settings и отметьте Plugin Content, затем откройте Plugins › Crushform Content › Presets, папку /Crushform/Presets. В папке четыре ассета:
| Ассет | Класс | Назначение |
|---|---|---|
/Crushform/Presets/DA_CF_DefaultProfile | UCFProfile | Значение проекта по умолчанию для кузова, который не указывает профиль |
/Crushform/Presets/DA_CF_DefaultTireProfile | UCFTireProfile | Значение проекта по умолчанию для шины на адаптере |
/Crushform/Presets/DA_CF_GlassLaminated | UCFGlassDefinition | Стеклянная панель из ламинированного стекла |
/Crushform/Presets/DA_CF_GlassTempered | UCFGlassDefinition | Стеклянная панель из закалённого стекла |
У седана плагина есть собственные профили: /Crushform/Blueprints/Sedan/DA_CF_Profile_Sedan и /Crushform/Blueprints/Sedan/DA_CF_TireProfile_CitySample. Прежде чем настраивать пресет, скопируйте его в свой проект, чтобы обновление плагина не перезаписало ваши значения.
Другие пресеты
Заголовок раздела «Другие пресеты»В плагине слово «пресет» означает ещё три вещи. Ни одна из них не является профилем.
- Пресеты зон — это именованные наборы значений зон для Zone Editor. Они хранятся в
UCFEditorSettings::ZonePresets, в Project Settings > Crushform Zone Editor. У каждого естьName,Stiffness,MaxDepthиEdgeWidth. Они существуют только в редакторе. - Пресеты отладочных повреждений заполняют кузов повреждениями в режиме отладки:
Lightдаёт три мягких удара,Medium— шесть,Heavy— десять, аWreck— восемнадцать ударов, близких к допустимому максимуму. - Пресеты отладочной грязи заполняют кузов смесью грязи в режиме отладки:
Dusty— только пыль,Muddy— грязь с пылью в треть от этого количества,Snowy— только снег, аWet— только влага.
Отладочные пресеты находятся в модуле CrushformDebug и ничего не меняют в вашем проекте. Они нужны, чтобы опробовать системы на панели отладки.
Проверка работы
Заголовок раздела «Проверка работы»- В Content Browser откройте профиль и проверьте, что в его Details видны группы, перечисленные выше.
- Запустите Validate Assets для профиля. Разрешение, которое атлас не может вместить, или некорректные зоны жёсткости выводятся как ошибка.
- В сборке, которая не Shipping, выполните
Crushform.Debug 1на кузове с заданным профилем. Его повреждённые узлы показывают, где кузов получил вмятину.
Решение проблем
Заголовок раздела «Решение проблем»Вмятин не появляется, и в логе нет предупреждения
Заголовок раздела «Вмятин не появляется, и в логе нет предупреждения»Причина. У компонента нет профиля. Решётка не строится, и для этого случая в лог ничего не пишется.
Решение. Задайте профиль в значениях по умолчанию класса или в C++ до начала игры. У автомобиля с адаптером задайте Deform Profile или оставьте поле пустым, чтобы взять DA_CF_DefaultProfile.
Лог сообщает, что разрешение ограничено
Заголовок раздела «Лог сообщает, что разрешение ограничено»%s: profile %s resolution %s does not fit an atlas slot, clamped to %sПричина. Разрешение не помещается в один слот атласа, поэтому решётка уменьшается. Слот вмещает не более ResX * ResZ узлов и не более ResY рядов.
Решение. Уменьшайте Resolution, пока решётка не поместится, или увеличьте размер слота в Project Settings > Plugins > Crushform > Atlas. Data Validation сообщает о той же проблеме как об ошибке.
Шины остаются круглыми
Заголовок раздела «Шины остаются круглыми»Причина. У компонента шин нет профиля шин. Лог сообщает об этом только на уровне Verbose:
%s: no tyre profile is set, the vehicle's tyres stay roundРешение. Задайте UCFTireProfile на компоненте шин или задайте Tire Profile на адаптере автомобиля, который при пустом поле берёт значение проекта по умолчанию.
Двигатель беззвучен
Заголовок раздела «Двигатель беззвучен»Причина. На компоненте нет профиля звука двигателя, а в проекте нет значения по умолчанию. Лог сообщает:
%s: no engine sound profile here or in Project Settings > Plugins > Crushform Engine; the engine stays silentРешение. Задайте UCFEngineSoundProfile на компоненте или задайте значение по умолчанию в Project Settings > Plugins > Crushform Engine. Профилю также нужен Attenuation.