Текстуры, файлы и паки · 3 мин чтения

Предупреждение FiveM «oversized asset»: что это значит и как исправить

Читать на:: English · Español · Français · Deutsch · Português · Italiano · Polski · Türkçe

Вы запускаете сервер, и консоль заполняется строками вроде этой:

text
Asset <resource>/<file>.ytd uses <size> MiB of physical memory.

Это предупреждение FiveM о слишком больших ассетах (oversized asset). Это не ошибка, файл всё равно стримится, но оно показывает, какие файлы достаточно тяжёлые, чтобы создать проблемы. Вот что измеряется, почему размер файла на диске мало о чём говорит и как уменьшить эти файлы.

Что измеряет FiveM

При старте сервера FiveM читает заголовок каждого файла в папке stream ресурса. Заголовок говорит, сколько памяти занимает файл после загрузки, в двух частях: physical (графическая память: текстуры и vertex-буферы) и virtual (системная память: остальное в ассете). Пороги, прочитанные из кода самого FiveM, одинаковы для обеих:

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

Предупреждение относится к отдельному файлу. .ytd в 20 MiB будет помечен, даже если остальной сервер лёгкий.

Почему размер на диске обманывает

Стримируемые файлы на диске сжаты, а предупреждение считает то, что они занимают после загрузки. Для текстуры это её размер в GPU-формате со всеми уровнями мипмап, округлённый до целых страниц памяти. Грубая оценка до округления:

Текстура (с мипмапами)DXT1 (без прозрачности)DXT5 (с прозрачностью)
1024 × 10240,67 MiB1,33 MiB
2048 × 20482,67 MiB5,33 MiB
4096 × 409610,67 MiB21,33 MiB

Одна текстура 4096 × 4096 DXT5 уже превышает порог сама по себе, а .ytd из нескольких текстур 2048 может его превысить, выглядя маленьким в проводнике. Округление страниц может сделать сумму заметно больше суммы текстур.

Если файл помечен за virtual (системную) память, дело не в текстурах: это другие данные ассета, например его коллизия. Уменьшение текстур этого не изменит.

Найдите все слишком большие файлы сразу

Вместо чтения консоли перетащите всю папку resources в Server Budget. Инструмент читает те же заголовки в браузере (ничего не загружается) и показывает:

  • Oversized: файлы больше 16 MiB графической памяти, самые тяжёлые сверху.
  • By resource (по ресурсу): что стримит каждый ресурс, отсортировано по памяти.
  • Streamed twice (стримятся дважды): имена файлов, которые стримит более одного ресурса. Игра получает только один из них, поэтому оставьте одну копию.

Список Oversized в Server Budget считает графическую память. Файл, который консоль помечает только за системную память, в нём не появится.

Уменьшите текстуры

Возьмите файлы, помеченные Server Budget (.ytd, .ydr, .yft, .ydd), и перетащите их в Asset Optimizer:

  1. Largest texture size (максимальный размер текстуры). По умолчанию 1024; 2048 — частый выбор для машин и ливрей, которые смотрят вблизи.
  2. Add missing mipmaps (добавить недостающие мипмапы) оставьте включённым: текстуры, сохранённые без них, получат их обратно.
  3. Проверьте оценку ("At 1024 px: about … less texture memory", то есть примерно … меньше памяти текстур при 1024 px) и таблицу файлов.
  4. Нажмите Download the lighter files (.zip) (скачать облегчённые файлы, .zip). Каждый файл вернётся под своим именем: замените им старые.
Asset Optimizer с четырьмя перетащенными stream-файлами: размер каждого файла, самая большая текстура и память текстур, которую сэкономит 1024 px, с включённым Add missing mipmaps
Четыре тестовых файла: в одном текстуры 2048 px, шесть без мипмап; при 1024 px экономится около 9 МБ памяти текстур.

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

Паки, которые повторяют одну и ту же текстуру во многих словарях, могут вместо этого делить её: Texture Dedupe переносит повторяющиеся текстуры в один общий .ytd. Затем перетащите папку в Server Budget снова, чтобы увидеть результат.

Вопросы

16 MiB — жёсткий предел?
Нет. FiveM всё равно стримит файл и только предупреждает. С 48 MiB собственное предупреждение говорит, что такие ассеты вызовут проблемы со стримингом, поэтому любой файл больше 16 MiB считайте кандидатом на уменьшение.
Предупреждение учитывает размер файла на диске?
Нет. Оно считает память, которую файл занимает после загрузки, прочитанную из заголовка файла. Файл может весить на диске заметно меньше 16 МБ и после загрузки всё же превышать 16 MiB.
Станут ли меньшие текстуры хуже выглядеть?
Вблизи текстура 1024 мягче, чем 2048. Издалека игра и так рисует уровни мипмап меньшего размера, а Asset Optimizer сохраняет именно их.

Инструмент для этого

Server Budget

Перетащите папку resources и получите графическую и системную память по ресурсам, все файлы больше 16 MiB и все файлы, которые стримятся дважды. Всё в браузере, ничего не загружается.

Открыть Server Budget

Пригодится также: Asset Optimizer · Texture Dedupe

Другие руководства

Все руководства →

Каждый инструмент можно попробовать бесплатно: 5 экспортов в день. Войдите через Discord, чтобы пользоваться ими.