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

СПИСОК ИЗМЕНЕНИЙ

Список изменений

Тяжёлая авария теперь куда меньше нагружает игровой поток. На машине, где мы измеряли, ни один кадр тяжёлой аварии теперь не тратит на работу Crushform в игровом потоке больше примерно 1.3 мс, тогда как в кадре аварии было несколько миллисекунд.

Повреждённые машины теперь куда дешевле отрисовывать, а проект может ограничить, у скольких из них рисуются повреждения. На GPU Mali-G76 под OpenGL ES 3.1 на его максимальной частоте слот повреждённого кузова вместо примерно 80 мс на кадр занимает примерно 4 мс. На настольном GPU выигрыш мы не измеряли.

Новое:

  • Работа с коллизией вне игрового потока. Вырез оторванной детали, перестройка помятого кузова и оболочка оторванной детали идут в рабочем потоке. UCFSettings::CollisionDeferFrames (1) или Crushform.Collision.DeferFrames принимает 0 или 1. При 1 перестройка и вырез кузова оказываются на кузове до физики следующего кадра. 0 строит всё в кадре удара, как в 1.0.0.
  • Переключатель проекта для коллизии, следующей за вмятинами. UCFSettings::bDeformCollision (вкл.) или Crushform.Collision.Deform. Выключенное значение побеждает любой профиль, поэтому профиль устройства может выключить её для слабых устройств.
  • Осколки стекла — это Niagara-система. По умолчанию используется UCFSettings::DefaultGlassShardSystem, а UCFGlassDefinition::ShardSystem задаёт другую для определения. Они больше не используют пул обломков и его предел. Crushform.Glass.ShardScale задаёт долю разлетающихся осколков, а Crushform.Glass.MaxLiveShards (512) ограничивает число осколков, живых одновременно.
  • Панели, которые разбиваются вместе, стартуют с разницей в кадр. Crushform.Glass.ShardSystemsPerFrame (1) задаёт, сколько систем осколков стартует в одном кадре. 0 снимает ограничение.
  • Звуки ударов стартуют по несколько за раз. UCFImpactFeedbackSettings::MaxSoundsPerFrame (2) задаёт, сколько их стартует в одном кадре. Остальные ждут до UCFImpactFeedbackSettings::SoundQueueSeconds (0.15 с), самые сильные первыми, а затем отбрасываются.
  • Именованные scope трассировки на всём пути удара. Их перечисляет страница Производительность.
  • Раздельные пределы отрисовки для вмятин и для грязи. Вмятины и царапины: UCFSettings::DentCullDistance и UCFSettings::MaxDentedBodies или Crushform.Dents.CullDistance и Crushform.Dents.MaxBodies. Грязь на кузове и колёсах: UCFSettings::DirtCullDistance и UCFSettings::MaxDirtyBodies или Crushform.Dirt.CullDistance и Crushform.Dirt.MaxBodies. Первыми рисуются ближайшие кузова, причём те, что на экране, раньше тех, что за его пределами. Все четыре по умолчанию равны 0, то есть предела нет, а профиль устройства может задать их для каждого устройства отдельно.
  • Сгенерированные LOD у Sedan. У его Static Mesh появились ещё три LOD, вплоть до примерно десятой части треугольников, и вся машина меняет LOD на одной дистанции. Меши с Nanite рисуются как раньше; платформа без Nanite рисует эти LOD, как и стекло везде.
  • Простой LOD у осины. SM_CF_Tree с 804 треугольниками — это LOD1 дерева в BP_CF_Tree. Android и iOS рисуют его через минимальный LOD меша; на других платформах остаётся полная осина.
  • Android и iOS. Каждый рантайм-модуль теперь разрешает обе платформы как целевые, наряду с Win64, Linux и Mac. Android запускали на Mali-G76 под OpenGL ES 3.1; iOS пока не собирали и не запускали. На телефоне используйте пределы отрисовки выше и выключите UCFSettings::bDeformCollision.

Изменённое:

  • Деформация читает меньше. Вершина вычисляется один раз за вызов шейдера, примерно с 11 чтениями атласа вместо 32. Кузов без вмятин и царапин в вершинной стадии не читает ничего.
  • Грязь читает меньше. Пиксель делает 2 фильтрованных чтения вместо 8. RT_CF_DirtAtlas и RT_CF_DirtFreshAtlas теперь читаются билинейно; проект со своими атласами грязи тоже должен задать им билинейный фильтр.
  • CF_DirtBlend, CF_DirtAmount и CF_DirtFresh принимают сэмплер атласа. Собственный узел Custom проекта, который их вызывает, передаёт его следующим аргументом после атласа.
  • Линии царапин одни и те же на любой дистанции. Шейдер теперь вычисляет их, а не берёт порог по текстуре, поэтому они не мерцают, не рассыпаются и не появляются только вблизи. Дальняя линия становится бледнее, а ещё дальше линии сливаются в ровное осветление. UCFProfile::MaxScratch по умолчанию теперь 0.033 вместо 0.1: на разбитой машине примерно втрое меньше линий.

Изменённое поведение при настройках по умолчанию:

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

Задайте Crushform.Collision.DeferFrames равным 0, чтобы вернуть прежнее время для обоих случаев.

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

Первый публичный выпуск.