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

СПРАВОЧНИКНАСТРОЙКИ

UCFSettings

МОДУЛЬCrushformЗАГОЛОВОКCFSettings.hРОДИТЕЛЬUDeveloperSettings

Blueprint: Crushform

Общепроектные настройки Crushform: Project Settings > Plugins > Crushform.

Функции

AUTHORITY · сервер, на каждом инстансеLOCAL · этот инстансPURE · только чтение
const UCFSettings* Get()
C++ ONLY

Объект настроек Crushform проекта (объект класса по умолчанию).

const FCFDirtChannelSettings& GetDirtChannel(ECFDirtChannel Channel) const
PUREC++ ONLY

Настройки одного канала грязи.

FCollisionResponseTemplate GetLoosePartCollision() const
PUREC++ ONLY

Коллизия, которую навесная деталь получает, когда начинает качаться или отделилась: шаблон Loose Part Collision Profile, а если там None или не указан профиль, собственная коллизия плагина. Собственная коллизия плагина не требует профиля или канала коллизий в проекте: физическое тело, которое блокирует мир и игнорирует пешки, автомобили, камеры, трассировки видимости, разрушаемые объекты и другие физические тела, в том числе другие отделившиеся детали. В любом случае шарнир затем делает так, что автомобили блокируют деталь только с одной стороны.

void ApplyConsoleVariables(EConsoleVariableFlags SetBy = ECVF_SetByProjectSetting) const
PUREC++ ONLY

Записывает настройки в их консольные переменные с заданным приоритетом. По умолчанию это приоритет проектной настройки, который консольная команда или профиль устройства переопределяет.

int32 GetCollisionDeferFrames()
C++ ONLY

Сколько кадров тяжёлая сборка коллизии может отложить, 0 или 1, как их задаёт Crushform.Collision.DeferFrames: отрицательное значение консоли ничего не откладывает, а значение больше 1 читается как 1.

bool IsCollisionDeformEnabled()
C++ ONLY

Могут ли коллизия кузова и деталей следовать за вмятинами в этом проекте, как это задаёт Crushform.Collision.Deform. Выкл. побеждает Deform Collision профиля.

float GetDentCullDistance()
C++ ONLY

На каком расстоянии от камеры рисуются вмятины и царапины, в см, как его задаёт Crushform.Dents.CullDistance. 0: без предела.

int32 GetMaxDentedBodies()
C++ ONLY

Сколько кузовов рисуют вмятины и царапины, как это задаёт Crushform.Dents.MaxBodies. 0: без предела.

float GetDirtCullDistance()
C++ ONLY

На каком расстоянии от камеры рисуется грязь, в см, как его задаёт Crushform.Dirt.CullDistance. 0: без предела.

int32 GetMaxDirtyBodies()
C++ ONLY

Сколько кузовов рисуют грязь, как это задаёт Crushform.Dirt.MaxBodies. 0: без предела.

Свойства

float DentCullDistance = 0.0f

На каком расстоянии от камеры рисуются вмятины и царапины кузова, в см. За этим расстоянием кузов рисуется целым и снова показывает их, когда подходит ближе. Прекращается только отрисовка: решётка, коллизия, репликация и события повреждений продолжают работать. 0: без предела. Действует только на этой машине. Переопределяется Crushform.Dents.CullDistance или профилем устройства.

По умолчанию
0.0f
Категория
Culling
int32 MaxDentedBodies = 0

Сколько кузовов рисуют вмятины и царапины: ближайшие, причём те, что на экране, первыми; проверяется несколько раз в секунду. У остальных прекращается только отрисовка. 0: без предела. Действует только на этой машине. Переопределяется Crushform.Dents.MaxBodies или профилем устройства.

По умолчанию
0
Категория
Culling
float DirtCullDistance = 0.0f

На каком расстоянии от камеры рисуется грязь кузова, на нём самом и на его колёсах, в см. За этим расстоянием они рисуются чистыми и снова показывают грязь, когда подходят ближе. Пока грязь отсечена, она стоит на месте на этой машине: не копится и не сходит, а продолжает меняться, когда кузов снова показан. Мойка, заливка и добавление грязи по-прежнему применяются. 0: без предела. Действует только на этой машине. Переопределяется Crushform.Dirt.CullDistance или профилем устройства.

По умолчанию
0.0f
Категория
Culling
int32 MaxDirtyBodies = 0

Сколько кузовов рисуют грязь: ближайшие, причём те, что на экране, первыми; проверяется несколько раз в секунду. Грязь остальных стоит на месте на этой машине, как за Dirt Cull Distance. 0: без предела. Действует только на этой машине. Переопределяется Crushform.Dirt.MaxBodies или профилем устройства.

По умолчанию
0
Категория
Culling
TSoftObjectPtr<UTexture> Atlas

Текстура RGBA8, которую читает каждый деформируемый меш, без мипов и sRGB: Render Target или несжатая Texture2D с NeverStream. Её размер определяет число слотов.

Категория
Atlas
int32 SlotWidth = 256

Текселей по ширине одного слота. Решётка помещается, когда ResX * ResZ <= SlotWidth. Слоты мозаикой заполняют атлас; шейдер читает начало каждого слота из Custom Primitive Data.

По умолчанию
256
Категория
Atlas
int32 SlotHeight = 8

Строк текселей одного слота. Решётка помещается, когда ResY <= SlotHeight.

По умолчанию
8
Категория
Atlas
int32 CustomDataOffset = 0

Первый индекс Custom Primitive Data, в который пишет Crushform; начиная с него используется 18 float-значений. Когда он меняется, редактор пересобирает функции материалов, которые его запекают (Crushform.RebakeOffsets делает это вручную); сохраните их, чтобы результат сохранился.

По умолчанию
0
Категория
Atlas
int32 WheelCustomDataOffset = 34

Первый индекс Custom Primitive Data для четырёх каналов грязи меша колеса и их рангов слоёв (CF::WheelData). Это отдельное смещение: колесо никогда не несёт блок деформации, а его шина часто несёт другие данные с индекса 0 (их несёт деформация шин), поэтому по умолчанию это последние два float-значения. Когда он меняется, редактор пересобирает функции материалов, которые его запекают (Crushform.RebakeOffsets делает это вручную); сохраните их, чтобы результат сохранился.

По умолчанию
34
Категория
Atlas
int32 TireCustomDataOffset = 0

Первый индекс Custom Primitive Data для записей контакта меша шины (CF::TireData, 32 float-значения). Шина никогда не несёт блок деформации, но не должна перекрываться с блоком грязи колеса по Wheel Custom Data Offset (по умолчанию 0..31 не задевает 34..35). Когда он меняется, редактор пересобирает функции материалов, которые его запекают (Crushform.RebakeOffsets делает это вручную); сохраните их, чтобы результат сохранился.

По умолчанию
0
Категория
Atlas
int32 GlassCustomDataOffset = 18

Первый индекс Custom Primitive Data для трещин стеклянной панели (CF::GlassData, 16 float-значений); панель тоже деформируемый меш, поэтому не должна перекрываться с 18 float-значениями от Custom Data Offset. Когда он меняется, редактор пересобирает функции материалов, которые его запекают (Crushform.RebakeOffsets делает это вручную); сохраните их, чтобы результат сохранился.

По умолчанию
18
Категория
Atlas
int32 MaxReportsPerBatch = 8

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

По умолчанию
8
Категория
Network
float MaxReportsPerSecond = 60.0f

Отчётов в секунду, которые сервер принимает от одного компонента. Отправитель тратит из ведра такой глубины; у сервера оно в 1.5 раза глубже, так как сетевой джиттер сбивает в пачки отчёты, которые отправитель разнёс по времени.

По умолчанию
60.0f
Категория
Network
float ScrapeReportInterval = 0.1f

Секунды между двумя отчётами о царапинах одного компонента.

По умолчанию
0.1f
Категория
Network
float MaxScrapeDt = 0.25f

Самое длинное скольжение, которое может представлять один отчёт о царапине, в секундах.

По умолчанию
0.25f
Категория
Network
float PendingReportTimeout = 10.0f

Секунды, в течение которых клиент хранит предсказанный удар, который сервер ни подтвердил, ни отклонил.

По умолчанию
10.0f
Категория
Network
float ContactGapSeconds = 0.1f

Секунды, в течение которых тело может не получать удара от другого тела, прежде чем следующий удар засчитается как новый контакт, который может оставить вмятину. Тело, лежащее на другом, получает удар на каждом шаге физики несколькими порциями выталкивания солвера; эти удары составляют один контакт и, после того как прошло его окно удара, оставляют вмятину только на пике. Кадр длиннее этого (подвисание) растягивает его за пределы кадра.

По умолчанию
0.1f
Категория
Contact
float ContactSpikeRatio = 2.0f

Во сколько раз удар должен быть сильнее текущего уровня контакта, чтобы снова оставить вмятину в том же контакте: авария поверх покоя. Он открывает собственное окно удара.

По умолчанию
2.0f
Категория
Contact
float ContactImpactWindowSeconds = 0.25f

Секунды от начала контакта или от пика в нём, в течение которых каждый удар всё ещё оставляет вмятину: сам удар оставляет вмятину на каждом шаге физики, который он занимает. После этого контакт в покое (лежание, давление) оставляет вмятину только при пике.

По умолчанию
0.25f
Категория
Contact
float ContactRestingSpeed = 0.5f

Относительная скорость в точке контакта, м/с, ниже которой устойчивый контакт считается покоящимся и перестаёт оставлять вмятины. Тело, лежащее или давящее на другое, почти не движется относительно него; тело, проносящееся мимо (например, автомобиль, с силой захлопывающий дверь), продолжает оставлять вмятины на каждом шаге, как при аварии.

По умолчанию
0.5f
Категория
Contact
float AutoRepairDelay = 0.0f

Секунды после последнего повреждения тело самостоятельно ремонтируется на каждом инстансе, как это делает Repair; 0 — никогда.

По умолчанию
0.0f
Категория
Repair
TSoftObjectPtr<UCFSurfaces> Surfaces

Одна строка на каждый физический материал: грязь, звук качения и эффект качения каждой поверхности. Без неё ни одно тело не покрывается грязью.

Категория
Surfaces
TSoftObjectPtr<UCFProfile> DefaultProfile

Профиль деформации для тела, которое его не указывает; его читает адаптер автомобиля.

Категория
Profile
TSoftObjectPtr<UTextureRenderTarget2D> DirtAtlas

Render Target RGBA8 размером с атлас: пыль R, грязь G, снег B, влага A, слот в слот с решёткой. Материалы кузова должны использовать тот же самый в MF_CF_Paint.

Категория
Dirt
TSoftObjectPtr<UTextureRenderTarget2D> ScratchAtlas

Render Target RG8 размером с атлас: покрытие царапинами R и направление G, слот в слот с решёткой. Материалы кузова должны использовать тот же самый в MF_CF_Deform.

Категория
Atlas
TSoftObjectPtr<UMaterialParameterCollection> DirtLook

Коллекция параметров материала, которую читают функции грязи (MPC_CF_Dirt): внешний вид грязи на каждом автомобиле. Плагин поставляет коллекцию по этому пути, и функции грязи читают её отсюда. Ничто в рантайм-модуле её не загружает: она лежит здесь, чтобы игровой код её находил и задавал её параметры по именам CF::DirtLook.

Категория
Dirt
float DirtUpdateInterval = 0.2f

Секунды между двумя обновлениями грязи одного тела.

По умолчанию
0.2f
Категория
Dirt
float DirtReferenceSpeed = 8.0f

Скорость шины, м/с, при которой ставки поверхности применяются как записано.

По умолчанию
8.0f
Категория
Dirt
float MaxDirtSpeedScale = 2.0f

Максимальный множитель ставок, на который умножаются ставки более быстрой шины.

По умолчанию
2.0f
Категория
Dirt
FCFDirtChannelSettings DustChannel

Канал пыли: его имя, то, как он накладывается на другие каналы, и насколько быстро он очищается.

Категория
Dirt|Channels
FCFDirtChannelSettings MudChannel

Канал грязи: его имя, то, как он накладывается на другие каналы, и насколько быстро он очищается.

Категория
Dirt|Channels
FCFDirtChannelSettings SnowChannel

Канал снега: его имя, то, как он накладывается на другие каналы, и насколько быстро он очищается.

Категория
Dirt|Channels
FCFDirtChannelSettings WetChannel

Канал влаги: его имя, то, как он накладывается на другие каналы, и насколько быстро он очищается.

Категория
Dirt|Channels
ECFDirtLayerOrder DirtLayerOrder = ECFDirtLayerOrder::Fixed

Что определяет, какой слой лежит над каким: Z Order каждого канала или слой, который получил грязь последним. Каналы оверлея всегда лежат над каждым слоем. Most Recent On Top требует Dirt Fresh Atlas.

По умолчанию
ECFDirtLayerOrder::Fixed
Категория
Dirt|Channels
TSoftObjectPtr<UTextureRenderTarget2D> DirtFreshAtlas

Render Target RGBA8 размером с атлас грязи, который для каждого текселя и канала записывает, насколько недавно канал получил грязь, в порядке каналов Dirt Atlas. Читается, только когда Dirt Layer Order равен Most Recent On Top.

Категория
Dirt
float DirtEventInterval = 0.5f

Минимальная пауза, с, между двумя событиями изменения грязи одного тела.

По умолчанию
0.5f
Категория
Dirt|Events
float DirtEventThreshold = 0.02f

На сколько должна измениться средняя грязь любой стороны тела в любом канале с последнего события, 0..1, чтобы сработало следующее.

По умолчанию
0.02f
Категория
Dirt|Events
TSoftObjectPtr<UMaterialFunctionInterface> BodyDirtLook

Функция материала, которая заменяет вид грязи кузова (MF_CF_Paint) в материалах проекта. Её входы названы по пинам MF_CF_Paint (Base Color, Roughness, Metallic) и MF_CF_DirtAmount, а также Normal (собственная нормаль материала или плоская, если её нет). Её выходы названы по пинам, которые она заменяет, плюс Normal, который занимает место нормали материала. Base Color обязателен. Имена пинов сопоставляются так, как написаны: регистр не важен, пробелы важны. Не задано: встроенный вид.

Категория
Look
TSoftObjectPtr<UMaterialFunctionInterface> WheelDirtLook

Функция материала, которая заменяет вид грязи колеса (MF_CF_WheelDirt). Её входы названы по пинам MF_CF_WheelDirt (Base Color, Roughness, Metallic) и MF_CF_WheelDirtAmount, а также Normal (собственная нормаль материала или плоская, если её нет). Её выходы названы по пинам, которые она заменяет, плюс Normal, который занимает место нормали материала. Base Color обязателен. Имена пинов сопоставляются так, как написаны: регистр не важен, пробелы важны. Не задано: встроенный вид.

Категория
Look
TSoftObjectPtr<UMaterialFunctionInterface> GlassCrackLook

Функция материала, которая заменяет внешний вид трещин стеклянной панели (MF_CF_GlassCrack). Её входы называются по пинам MF_CF_GlassCrack (Base Color, Roughness, Opacity, Normal) и MF_CF_GlassCrackData, выходы — по пинам, которые она заменяет; Opacity обязателен. Имена пинов сопоставляются как написано: регистр не важен, пробелы важны. Не задано: встроенный вид.

Категория
Look
TSoftObjectPtr<UNiagaraSystem> DefaultGlassShardSystem

Niagara-система, которая бросает осколки стеклянной панели, чьё определение не называет Shard System. Она должна открывать параметры осколков из NS_CF_GlassShards плагина и слоты мешей от User.CF_ShardMesh0 до User.CF_ShardMesh5 — шесть, которые есть у системы плагина по умолчанию: седьмой отличный меш осколка определения и следующие за ним используют эти слоты заново.

Категория
Glass
FName LoosePartCollisionProfile

Профиль коллизии, который навесная деталь получает, когда начинает качаться или отделилась. None (Reset to Default) использует собственную коллизию плагина, которой не нужно ничего из проекта (см. GetLoosePartCollision). Заданный здесь профиль должен блокировать мир и игнорировать пешки. Что бы он ни говорил об автомобилях, шарнир делает так, что они блокируют деталь только с одной стороны: они держат её и отодвигают, но ничего не ощущают в ответ.

Категория
Loose Parts
float SwingDamping = 1.0f

Демпфирование качающейся детали относительно её шарнира, как twist velocity drive джоинта. Оно также демпфирует Swing Spring: у привода одно Damping на оба.

По умолчанию
1.0f
Категория
Loose Parts
float SwingSpring = 0.0f

Пружина, возвращающая качающуюся деталь в закрытое положение, как жёсткость twist-привода джоинта, независимо от её массы (acceleration-привод, масштабируется p.Chaos.JointConstraint.AngularDriveStiffnessScale, 1.5). Chaos масштабирует её инерцией детали относительно её центра, пока деталь поворачивается вокруг своей оси: дверь или капот, навешенные за край, возвращаются примерно с четверти от 1.5, умноженных на это значение, рад/с^2 на радиан открытия (собственная частота примерно половина квадратного корня из 1.5, умноженных на это значение, рад/с), демпфируется Swing Damping. Деталь, которую закрывает её собственный вес, например капот, не нуждается в ней; дверь на вертикальной оси остаётся там, где её качнули, и без неё; деталь, которая висит открытой на одном креплении, например бампер, подтягивается назад пружиной. Джоинты, созданные после изменения, получают новое значение. 0: без пружины.

По умолчанию
0.0f
Категория
Loose Parts
float StopBounce = 0.0f

Насколько упруги упоры качающейся детали на обоих концах хода (у джоинта один twist-лимит на оба). 0: упор физического движка, который держит деталь намертво. Выше него упор — это пружина, в которую деталь проваливается, прежде чем её отбросит назад: при значении чуть выше 0 проваливание составляет лишь 0.05 её скорости, примерно четверть при 0.66, около половины при 1, где дверь, захлопнутая со скоростью 180 град/с, сначала уходит на 4 град за закрытое положение (15 град при 720 град/с). Открытый конец тоже проскакивает: при 0.66 дверь, распахнутая на 180 град/с, уходит примерно на 1.3 град за свой Open Angle. Капот, лежащий на упоре, немного в него проваливается: 0.2 град при 0.66, 0.9 град при 1. Джоинты, созданные после изменения, получают новое значение.

По умолчанию
0.0f
Категория
Loose Parts
float BumpResponse = 0.0f

Дополнительный толчок, который получает качающаяся деталь, когда кузов дёргается: поворот, который ускорение кузова в точке оси сообщает детали вокруг её оси, умноженный на это число, сверх того, что даёт физика. 0: только физика. Только на инстансе, который симулирует кузов и является его источником ударов: там, где кузов воспроизводится, его сетевые коррекции читались бы как рывки. Читается по движению кузова в game thread: при асинхронной физике толчок следует за рывком с задержкой чтения, в несколько фиксированных шагов (p.AsyncInterpolationMultiplier), тогда как собственная доля физики приходит сразу. Устойчивое ускорение тоже толкает: капот поднимается, пока кузов падает в прыжке. Деталь, которая качается сильнее, быстрее набирает свой Shake Off Travel. Читается каждый кадр: изменение действует сразу.

По умолчанию
0.0f
Категория
Loose Parts
float SwingStartKick = 90.0f

Угловая скорость, град/с, которую деталь получает в сторону своей открытой стороны, когда начинает качаться, чтобы она приоткрылась.

По умолчанию
90.0f
Категория
Loose Parts
float SwingSettleTime = 1.0f

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

По умолчанию
1.0f
Категория
Loose Parts
float ArmLoadShare = 0.5f

Доля Break Force и Break Torque шарнира, которую его джоинт может выдерживать и оставаться взведённым по окончании времени успокоения. Джоинт, несущий больше, остаётся невзведённым и взводится, когда не несёт больше четверти секунды (CFHinge::ArmQuietTime): деталь, прижатая на месте чем-то, что на неё давит, продолжает висеть, а не рвётся в тот момент, когда заканчивается время успокоения. Держите значение ниже 1, чтобы нагрузка чуть ниже порогов не взводила джоинт, который порвётся кадром позже. 0: взводится без учёта нагрузки.

По умолчанию
0.5f
Категория
Loose Parts
float TornPartHoldMargin = 20.0f

На каком расстоянии, см, другой автомобиль должен быть от закрытого места детали, оторванной вмятиной, чтобы удержать деталь там. Авария вминает кузов раньше, чем другой автомобиль доходит до детали; если отпустить, пока он ещё у детали, она оказалась бы между двумя телами, бесконечно тяжёлыми для неё, и её выбросило бы или заклинило в собственном кузове. Деталь падает в тот кадр, когда тот автомобиль отодвинулся дальше, — за кадр или два при аварии. 0: удерживается, только пока автомобиль касается её места или сближается с ним в пределах Torn Part Hold Lookahead, либо пока в этом месте что-то стоит. Для запаса учитываются только автомобили: земля под низкой деталью или стена, к которой прислонён автомобиль, никогда не уходят.

По умолчанию
20.0f
Категория
Loose Parts
float TornPartHoldLookahead = 0.05f

Секунды вперёд, на которые автомобиль, сближающийся с оторванной деталью, считается уже у неё: запас растёт на его скорость сближения, умноженную на это значение. Контакт аварии возникает раньше, чем тела встречаются: другая машина может быть всё ещё более чем в 20 см от двери, когда вмятина её отрывает, и оказаться у неё через несколько миллисекунд. Автомобиль, который отъезжает, учитывается только по запасу.

По умолчанию
0.05f
Категория
Loose Parts
float DetachedLifetime = 60.0f

Секунды, которые отделившаяся деталь лежит, прежде чем уйти в грунт.

По умолчанию
60.0f
Категория
Loose Parts
float DetachedSinkTime = 2.0f

Секунды, за которые деталь уходит в землю на свою высоту и скрывается.

По умолчанию
2.0f
Категория
Loose Parts
float CollisionRebuildThreshold = 2.0f

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

По умолчанию
2.0f
Категория
Collision
float CollisionRebuildInterval = 0.5f

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

По умолчанию
0.5f
Категория
Collision
float CollisionBlockTolerance = 1.5f

Помятый бокс или выпуклый объём кузова разрезается на блоки коллизии там, где решётка изгибает его дальше этого, см, от того, что дают одни его углы.

По умолчанию
1.5f
Категория
Collision
int32 MaxCollisionBlocks = 96

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

По умолчанию
96
Категория
Collision
bool bDeformCollision = true

Следует ли коллизия за вмятинами вообще в этом проекте: блоки кузова, вырез для оторванной детали и помятая оболочка расшатанной детали. Выкл.: каждый автомобиль сохраняет коллизию из ассета, что бы ни говорил его профиль, а вмятины только рисуются. Deform Collision профиля всё равно может выключить её для одного автомобиля. Читается, когда у автомобиля начинается игра. Проектное значение `Crushform.Collision.Deform`; профиль устройства или консоль его переопределяет.

По умолчанию
true
Категория
Collision
int32 CollisionDeferFrames = 1

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

По умолчанию
1
Категория
Collision