Файлы модели транспорта (yft, _hi.yft, ytd) и предупреждение oversized assets
Транспорт в 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 512 | 0.17 MiB | 0.33 MiB | 1.33 MiB |
| 1024 x 1024 | 0.67 MiB | 1.33 MiB | 5.33 MiB |
| 2048 x 2048 | 2.67 MiB | 5.33 MiB | 21.3 MiB |
| 4096 x 4096 | 10.7 MiB | 21.3 MiB | 85.3 MiB |
Значения включают мипмапы. Одна несжатая текстура 4096 уже превышает все пороги предупреждения, а одна текстура 4096 в DXT5 сама по себе занимает больше 16 MiB. Самый частый источник предупреждения: .ytd с несколькими текстурами 4K.
Как уменьшить слишком тяжёлый транспорт?
- Найдите файл. Строка в консоли называет ресурс и файл. Сначала исправьте самый большой.
- Уменьшите большие текстуры. Текстур кузова и салона в 2048 или 1024 достаточно для транспорта, на который смотрят с обычного игрового расстояния. Мелким деталям, шильдикам и фарам редко нужно больше 512.
- Сожмите их. Используйте DXT1 (BC1) для текстур без прозрачности и DXT5 (BC3) для текстур с прозрачностью. Избегайте несжатых форматов.
- Удалите неиспользуемые текстуры. В конвертированных моделях часто есть текстуры, которые не использует ни один материал.
- Не дублируйте общие текстуры. Текстуры, которые используют несколько единиц транспорта, могут лежать в одном словаре, назначенном родителем в
txdRelationshipsфайла vehicles.meta. - Упростите меш. Если в предупреждении указан
.yft, в модели слишком много полигонов или основной.yftсодержит меш полной детализации вместо младших LOD. - Перезапустите ресурс и снова прочитайте консоль. Если строки нет, каждый файл занимает 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 с мипмапами.
- Означает ли предупреждение, что мой сервер лагает?
- Нет. Проверка касается памяти на стороне игроков. Риск в том, что модели или текстуры загрузятся поздно или не загрузятся вовсе, особенно когда в одном месте много тяжёлого транспорта.
Источники
- FXServer source: asset size check (ResourceStreamComponent.cpp)
- Sollumz, Blender add-on for GTA V assets
Товары из гайда
- Coil S-Cooter: Электросамокат FiveM
- Airglider: Ховерборд FiveM
- Girlboard: Ховерборд FiveM
- Neonboard: Ховерборд FiveM
Все гайды
- Как установить ресурс FiveM из Cfx.re Escrow (Granted Assets)
- Как добавить кастомный транспорт на сервер ESX, QBCore или QBox
- Что такое LOD у транспорта в FiveM?
- Как добавить аддон-транспорт на сервер FiveM
- Разбор vehicles.meta по полям
- Разбор handling.meta: поля, единицы и флаги
- Разбор carvariations.meta и carcols.meta
- Разбор vehiclelayouts.meta: сиденья, точки входа и анимации
- Справочник data_file в fxmanifest для транспорта
- Проблемы с аддон-транспортом в FiveM: причины и решения
- Как исправить "You lack the required entitlement" на сервере FiveM
- Как конвертировать мод машины для одиночной GTA 5 в аддон FiveM
- Как ховерборд в FiveM работает без скрипта
- Как сделать транспорт для FiveM в Blender с Sollumz 2.9
- Как оптимизировать транспорт FiveM: полигоны, LOD и бюджет текстур
- Как настроить коллизию транспорта в Sollumz
- Покупка транспорта для FiveM: что проверить до оплаты
- Паки машин FiveM или отдельный транспорт
- Машины реальных брендов в FiveM: можно или нет?
- CodeWalker или Sollumz: какой инструмент нужен для транспорта FiveM?
