Файлы модели транспорта (yft, _hi.yft, ytd) и предупреждение oversized assets

Автор: Nilo3D · Обновлено:

Транспорт в FiveM стримится как модель .yft, высокодетализированная модель _hi.yft и словарь текстур .ytd. FXServer измеряет, сколько памяти нужно каждому файлу после загрузки, и выше 16 MiB выводит предупреждение. Выше 48 MiB он добавляет, что oversized assets "can and WILL lead to streaming issues", то есть слишком большие ассеты приведут к проблемам со стримингом. Обычно помогает уменьшить и сжать текстуры.

Что такое файлы .yft, _hi.yft и .ytd?

У этих трёх файлов фиксированные роли, а называться они должны по имени модели из vehicles.meta.

stream/
  mycar.yft        model: lower LODs, skeleton, collision
  mycar_hi.yft     model: high detail version shown up close
  mycar.ytd        textures (name matches <txdName>)
  mycar+hi.ytd     optional: high resolution versions of the same textures
ФайлСодержимоеКогда игра его использует
<model>.yftТранспорт в виде фрагмента: меши пониженной детализации, кости (двери, колёса, сиденья) и коллизия.Всегда, пока транспорт существует.
<model>_hi.yftВысокодетализированный меш.Только рядом с камерой, в пределах первого значения lodDistances из vehicles.meta.
<txdName>.ytdВсе текстуры транспорта.Всегда.
<txdName>+hi.ytdНеобязательные копии текстур в более высоком разрешении.Рядом с камерой.

Когда первая дистанция LOD больше нуля, игра сама составляет имя высокодетализированной модели: добавляет _hi к имени модели. Поэтому файл должен называться именно так. Детали тюнинга хранятся в отдельных небольших файлах моделей в той же папке и называются так, как указано в carcols.meta.

Что означает предупреждение oversized assets?

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

Asset mycar/mycar.ytd uses 62.5 MiB of physical memory. Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering).

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

Память одного файлаСтрока в консоли
16 MiB или меньшеНичего не выводится.
Больше 16 MiBВыводится синим.
Больше 32 MiBВыводится жёлтым.
Больше 48 MiBДобавляется фраза "Oversized assets can and WILL lead to streaming issues (such as models not loading/rendering)".
Больше 64 MiBВыводится красным.

Эти пороги взяты из исходного кода FXServer (ResourceStreamComponent.cpp). Предупреждение касается компьютеров игроков, а не сервера: каждый игрок рядом с транспортом должен держать этот файл в памяти. Держите каждый файл в пределах 16 MiB, и консоль будет молчать.

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

Сколько памяти занимает текстура?

Память текстуры зависит от разрешения и формата, а не от того, что изображено на картинке. Если уменьшить ширину и высоту вдвое, памяти нужно вчетверо меньше. Сжатые форматы хранят 4 или 8 бит на пиксель вместо 32. Мипмапы добавляют примерно треть.

РазрешениеDXT1 / BC1 (без альфы)DXT5 / BC3 (с альфой)Без сжатия, 32 бита
512 x 5120.17 MiB0.33 MiB1.33 MiB
1024 x 10240.67 MiB1.33 MiB5.33 MiB
2048 x 20482.67 MiB5.33 MiB21.3 MiB
4096 x 409610.7 MiB21.3 MiB85.3 MiB

Значения включают мипмапы. Одна несжатая текстура 4096 уже превышает все пороги предупреждения, а одна текстура 4096 в DXT5 сама по себе занимает больше 16 MiB. Самый частый источник предупреждения: .ytd с несколькими текстурами 4K.

Как уменьшить слишком тяжёлый транспорт?

  1. Найдите файл. Строка в консоли называет ресурс и файл. Сначала исправьте самый большой.
  2. Уменьшите большие текстуры. Текстур кузова и салона в 2048 или 1024 достаточно для транспорта, на который смотрят с обычного игрового расстояния. Мелким деталям, шильдикам и фарам редко нужно больше 512.
  3. Сожмите их. Используйте DXT1 (BC1) для текстур без прозрачности и DXT5 (BC3) для текстур с прозрачностью. Избегайте несжатых форматов.
  4. Удалите неиспользуемые текстуры. В конвертированных моделях часто есть текстуры, которые не использует ни один материал.
  5. Не дублируйте общие текстуры. Текстуры, которые используют несколько единиц транспорта, могут лежать в одном словаре, назначенном родителем в txdRelationships файла vehicles.meta.
  6. Упростите меш. Если в предупреждении указан .yft, в модели слишком много полигонов или основной .yft содержит меш полной детализации вместо младших LOD.
  7. Перезапустите ресурс и снова прочитайте консоль. Если строки нет, каждый файл занимает 16 MiB или меньше.

Настройки LOD, lodDistances и размеры текстур по назначению описаны в гайде как оптимизировать транспорт FiveM.

При чём здесь LOD?

Основной .yft должен содержать облегчённые версии модели, а _hi.yft детальную. Благодаря такому разделению для далёкого транспорта игра держит в памяти только лёгкую модель. Если при конвертации один и тот же тяжёлый меш попал в оба файла, память удваивается, а каждый далёкий транспорт обходится так же дорого, как близкий.

Уровни и их дистанции описаны в гайде о LOD в транспорте FiveM. Пример из нашего каталога: Coil S-Cooter и три ховерборда поставляются с четырьмя LOD, от High до Very Low.

Частые вопросы

Что такое лимит 16 MB в FiveM?
Это первый порог проверки размера ассетов в FXServer. Стримящийся файл, которому после загрузки нужно больше 16 MiB физической или виртуальной памяти, получает предупреждение в консоли. Это предупреждение, а не жёсткая блокировка, но большие ассеты могут не загрузиться у игроков.
Почему мой файл на 5 MB показан как 40 MiB?
Предупреждение показывает потребление памяти после загрузки, а не размер на диске. Стримящиеся файлы сжаты, поэтому размер после загрузки может быть в несколько раз больше размера файла.
В чём разница между .yft и _hi.yft?
.yft содержит меши пониженной детализации, скелет и коллизию и загружен всегда. _hi.yft содержит высокодетализированный меш и загружается только тогда, когда транспорт находится близко к камере.
Какой размер текстур использовать для транспорта FiveM?
Сжатые текстуры 2048 или 1024 для основных поверхностей и 512 или меньше для деталей позволяют большинству транспорта уложиться в 16 MiB. Одна текстура 4096 в DXT5 уже занимает около 21 MiB с мипмапами.
Означает ли предупреждение, что мой сервер лагает?
Нет. Проверка касается памяти на стороне игроков. Риск в том, что модели или текстуры загрузятся поздно или не загрузятся вовсе, особенно когда в одном месте много тяжёлого транспорта.

Источники

Товары из гайда

Все гайды