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

ИНТЕГРАЦИЯПРОФИЛИ И ПРЕСЕТЫ

Профили и пресеты

Профиль — это ассет данных, который настраивает одну систему для одного типа кузова: как автомобиль получает вмятины, как деформируются его шины, как звучит двигатель. Плагин читает профиль из компонента, которому принадлежит система, поэтому в одном проекте может работать сразу несколько профилей. На этой странице перечислены классы профилей, место каждого из них, пресеты, которые плагин поставляет в папке 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 хранит настройки одного кузова. Его свойства сгруппированы по категориям, которые показаны на панели 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Глубина вмятины в сантиметрах на каждый м/с сверх MinDeltaV3
UCFProfile::MaxDentPerHitСамая глубокая вмятина от одного удара в сантиметрах там, где жёсткость зоны равна 120
UCFProfile::CrumpleRatioГлубина смятия металла от точечного удара, как доля глубины вмятины3
UCFProfile::MaxDisplacementМаксимальное смещение любого узла в сантиметрах. Материалы кузова используют его как Max World Position Offset Displacement60
UCFProfile::StiffnessZonesБоксы, в которых кузов жёстче или мягче остальных участковПусто
UCFProfile::DentAbrasionИзнос краски, добавляемый на каждый сантиметр вмятины0.002
UCFProfile::MinScrapeSpeedСкорость скольжения в м/с, ниже которой контакты не трогают краску1.5
UCFProfile::MaxPlausibleDeltaVСамый быстрый удар или скольжение, о которых может сообщить клиент, в м/с. Сервер отклоняет всё, что выше40
UCFProfile::DirtScaleУмножает каждое отложение грязи на кузове. Ноль оставляет его чистым1
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 профиля вмятин по умолчанию.

Настройки вмятин описывают, как гнётся металл. Первыми меняйте 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::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 хранит петли звука двигателя и то, как они воспроизводятся:

  • 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_DefaultProfileUCFProfileЗначение проекта по умолчанию для кузова, который не указывает профиль
/Crushform/Presets/DA_CF_DefaultTireProfileUCFTireProfileЗначение проекта по умолчанию для шины на адаптере
/Crushform/Presets/DA_CF_GlassLaminatedUCFGlassDefinitionСтеклянная панель из ламинированного стекла
/Crushform/Presets/DA_CF_GlassTemperedUCFGlassDefinitionСтеклянная панель из закалённого стекла

У седана плагина есть собственные профили: /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.