Как оптимизировать транспорт FiveM: полигоны, LOD и бюджет текстур
Транспорт FiveM оптимизирован, когда каждому стримящемуся файлу нужно 16 MiB памяти или меньше, у модели есть меши пониженной детализации для дальних расстояний, а vehicles.meta сообщает игре, когда переключаться между ними. На практике это означает текстуры 2048 пикселей или меньше в сжатом формате, четыре уровня LOD ниже высокодетализированного меша и lodDistances вроде 10, 25, 50, 100, 500, 500.
На что ориентироваться?
FiveM не задаёт лимита полигонов. Сервер измеряет память, которая нужна каждому стримящемуся файлу после загрузки, и предупреждает, если она больше 16 MiB на файл. Поэтому цель задаётся на файл, а не на транспорт: .yft, _hi.yft и .ytd проверяются каждый отдельно. Пороги этого предупреждения описаны в гайде о файлах модели транспорта и предупреждении oversized assets.
| Файл | Что делает его тяжёлым | Что делать |
|---|---|---|
.ytd | Разрешение и формат текстур | Уменьшить и сжать текстуры. |
_hi.yft | Число треугольников детального меша | Удалить геометрию, которую никто не видит, упростить плотные части. |
.yft | Число треугольников младших уровней плюс коллизия | Сделать настоящие младшие LOD вместо копий детального меша. |
Цифра из нашей собственной работы: машина из симрейсинга, которую мы конвертировали, пришла примерно с 512,000 треугольников. После конвертации и до какого-либо упрощения её файлу модели всё ещё требовалось около 28 MiB виртуальной памяти, что намного выше первого порога предупреждения. Модели, сделанные для других игр, не рассчитаны на этот бюджет, так что будьте готовы их упрощать.
Как измерить транспорт?
- Консоль сервера. Запустите ресурс и прочитайте консоль. Для каждого файла больше 16 MiB появляется строка с именем файла и его размером в MiB. Если строк нет, все файлы прошли проверку.
- Треугольники по уровням в Blender. В Sollumz Tools > Drawables > LOD Tools > Auto LOD выберите Drawable Model, и панель покажет LOD Statistics: треугольники и вершины каждого уровня, у которого есть меш.
- Текстуры. Память текстуры зависит только от разрешения и формата. Таблица есть в гайде о файлах модели: текстура 2048 x 2048 в DXT5 занимает 5.33 MiB, а 4096 занимает 21.3 MiB.
Какие уровни LOD есть у транспорта?
Sollumz даёт каждому Drawable Model пять слотов. При экспорте верхний становится _hi.yft, а остальные четыре попадают в основной .yft.
| Уровень Sollumz | Файл | Значение lodDistances, которое его завершает | Стоковый Sultan |
|---|---|---|---|
| Very High | _hi.yft | 1-е | 10 м |
| High | .yft | 2-е | 25 м |
| Medium | .yft | 3-е | 50 м |
| Low | .yft | 4-е | 100 м |
| Very Low | .yft | 5-е | 500 м |
Шестое значение задаёт расстояние, на котором транспорт перестаёт отрисовываться. Дистанции хранятся в vehicles.meta, а не в модели:
<!-- _hi, High, Medium, Low, Very Low, fade out (metres) -->
<lodDistances content="float_array">
10.000000
25.000000
50.000000
100.000000
500.000000
500.000000
</lodDistances>
Стоковый скутер Faggio использует 15, 30, 50, 100, 500, 500. Ошибка, которую мы встречали в конвертированных машинах: строка вроде 10, 150, 150, 150, 150, 150. Меш High рисуется до 150 м, а затем машина исчезает, поэтому младшие уровни никогда не показываются, даже если они есть в модели. Поле объясняется в разборе vehicles.meta, а что такое LOD, рассказано в гайде о LOD в транспорте FiveM.
Как создать LOD в Sollumz?
Откройте Sollumz Tools > Drawables > LOD Tools > Auto LOD. Инструмент копирует образцовый меш и упрощает его для каждого отмеченного уровня, затем Generate LODs заполняет слоты.
| Настройка | По умолчанию | Значение |
|---|---|---|
| Reference Mesh | Меш, который копируется и упрощается. Берите самый детальный. | |
| Method | Collapse | Collapse подходит для общего случая. Un-Subdivide подходит для мешей, созданных подразделением, Planar растворяет плоские участки. |
| Decimate Step | 0.6 | Один общий шаг, применяемый для каждого уровня. |
| Per-LOD Ratios | Выкл. | Если включено, у каждого уровня свой коэффициент. По умолчанию это 0.90, 0.70, 0.50, 0.30 и 0.15 от Very High до Very Low, а вместо коэффициента уровню можно задать целевое число треугольников. |
| Decimate from Original | Выкл. | Упрощать каждый уровень от образца, а не от уровня выше. |
Автоматическое упрощение служит отправной точкой. Что мы потом проверяем вручную:
- Свет. Мелкие светящиеся части схлопываются первыми и исчезают. Оставляйте для поворотников и задних фонарей исходный меш на каждом уровне или защищайте их от упрощения.
- Части на разных костях. Упрощайте каждую модель отдельно, чтобы у двери никогда не было общей вершины с кузовом.
- Силуэт. Самый младший уровень должен выглядеть правильно только со 100 м и дальше. Салон, двигатель и днище можно убрать полностью.
- Колёса мотоциклов. На двухколёсном транспорте, который мы делали, игра не рисовала отдельную модель колеса на самом младшем уровне. Стоковые мотоциклы решают это простой формой колеса внутри меша кузова этого уровня, и мы делаем так же.
Какие размеры текстур использовать для транспорта?
Вот размеры, которые мы используем по ролям. Никогда не увеличивайте текстуры: текстура, которая пришла в 1024, остаётся в 1024.
| Текстура | Размер |
|---|---|
| Ливрея, основной атлас, рассеиватели фар | 2048 |
| Карта нормалей кузова, шина | 1024 |
| Повторяющиеся детальные текстуры (карбон, ткань, решётки) | 512 |
| Мелкие детали салона | 256 |
| Сплошные цвета | 4 x 4 |
- Формат. DXT1 (BC1) без прозрачности, DXT5 (BC3) с прозрачностью. Текстура в DXT1 занимает вдвое меньше памяти, чем та же текстура в DXT5.
- Сплошные цвета. Сохраняйте одноцветные текстуры 4 x 4 без сжатия. Они почти ничего не стоят, а блочное сжатие сдвигало наши тёмно-серые цвета в фиолетовый и зелёный.
- Общие текстуры. Картам specular, normal и грязи, которые уже есть в общих текстурах транспорта игры, копия в вашем
.ytdне нужна. - Неиспользуемые текстуры. В конвертированных моделях есть текстуры, которые не использует ни один материал. Удалите их.
- Конвертируйте вне Blender. Уменьшайте и сжимайте текстуры в отдельной программе и загружайте результат. Пересохранение изображений из Blender затемняло наши текстуры.
Можно ли оптимизировать уже готовый транспорт?
Да, из исходного файла. Откройте .blend, из которого транспорт был экспортирован, добавьте младшие уровни и экспортируйте заново. Чего мы избегаем: импортировать готовый .yft в Blender и экспортировать обратно. Такой круг переписывал мелкие значения в скелете, и на одном нашем транспорте этого хватило, чтобы сломать анимации посадки и выхода в игре.
Текстуры менять постфактум безопаснее. .ytd можно открыть, заменить его текстуры на меньшие с теми же именами и сохранить, не трогая модель. Инструменты для каждой задачи описаны в гайде CodeWalker или Sollumz.
Чек-лист оптимизации
- Нет текстур больше 2048 и нет несжатых, кроме цветов 4 x 4.
- В
.ytdнет неиспользуемых текстур. - У модели есть меш Very High и четыре младших уровня.
- Свет по-прежнему виден на каждом уровне.
- В
lodDistancesшесть возрастающих значений, а не одно и то же число несколько раз. - Консоль сервера не выводит строку о размере для этого ресурса.
Весь процесс моделирования описан в гайде о создании транспорта FiveM в Blender с Sollumz. Пример из нашего каталога: Coil S-Cooter и три ховерборда поставляются с четырьмя LOD, от High до Very Low.
Частые вопросы
- Сколько полигонов должно быть у машины FiveM?
- FiveM не задаёт лимита полигонов. Сервер измеряет память каждого стримящегося файла и предупреждает выше 16 MiB, поэтому практический предел такой: .yft и _hi.yft, каждый из которых занимает не больше этого размера.
- Какие lodDistances использовать для аддон-машины?
- Стоковый Sultan использует 10, 25, 50, 100, 500, 500, и с этого безопасно начинать. Каждое значение завершает один уровень: _hi, High, Medium, Low, Very Low, затем исчезновение.
- Как сделать LOD в Sollumz?
- Используйте Sollumz Tools > Drawables > LOD Tools > Auto LOD. Выберите образцовый меш, отметьте уровни, которые нужно создать, и нажмите Generate LODs. Затем проверьте свет и силуэт вручную.
- Какой размер текстур лучше для транспорта FiveM?
- Мы используем 2048 для ливреи или основного атласа, 1024 для карты нормалей кузова и шин, 512 для повторяющихся деталей и 256 для мелких деталей салона, всё в DXT1 или DXT5.
- Учитывается ли _hi.yft в проверке 16 MiB?
- Каждый файл проверяется отдельно. .yft, _hi.yft и .ytd должны каждый занимать не больше 16 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 для транспорта
- Файлы модели транспорта (yft, _hi.yft, ytd) и предупреждение oversized assets
- Проблемы с аддон-транспортом в FiveM: причины и решения
- Как исправить "You lack the required entitlement" на сервере FiveM
- Как конвертировать мод машины для одиночной GTA 5 в аддон FiveM
- Как ховерборд в FiveM работает без скрипта
- Как сделать транспорт для FiveM в Blender с Sollumz 2.9
- Как настроить коллизию транспорта в Sollumz
- Покупка транспорта для FiveM: что проверить до оплаты
- Паки машин FiveM или отдельный транспорт
- Машины реальных брендов в FiveM: можно или нет?
- CodeWalker или Sollumz: какой инструмент нужен для транспорта FiveM?
