Инструменты редактора Unity для снижения числа материалов и draw calls в сценах:
- Tools → Запекание текстур — объединение текстур материалов в атласы;
- Tools → Запекание мешей — сшивание объектов сцены в секции;
- Tools → Создание LOD — автоматические LOD для объектов и секций.
Все инструменты обратимы: всё запечённое можно распечь обратно. Исходные ассеты (модели, префабы, материалы, текстуры) никогда не изменяются.
Требуется Unity 6000.0 или новее.
В Packages/manifest.json проекта:
{
"dependencies": {
"com.tramontan.texture-mesh-baker": "https://github.com/Tramontan/UnityTextureAndMeshBaker.git"
}
}или Window → Package Manager → + → Install package from git URL… с адресом
https://github.com/Tramontan/UnityTextureAndMeshBaker.git.
Конкретная версия: …UnityTextureAndMeshBaker.git#v1.2.0.
Для разработки самого пакета можно подключить локальную папку:
"com.tramontan.texture-mesh-baker": "file:../../UnityTextureAndMeshBaker"
(путь относительно папки Packages проекта) — правки тогда видны сразу, без коммита.
- Перетащите в окно префабы, модели (FBX), папки или объекты сцены (или «Добавить префабы из открытых сцен»).
- Выберите число материалов на выходе, максимальный размер атласа, отступ. Ниже сразу видно превью раскладки текстур в каждом атласе.
- «Объединить» — создаются атласы, материалы, меши с перенесёнными UV и
префабы-варианты исходных префабов; экземпляры в открытых сценах заменяются.
Всё сохраняется в
Assets/TexturesBaker/Bakes/<имя>/вместе сbake_config.json. - Вкладка «Запечённые» — список запеканий; «Распечь материалы» возвращает исходные префабы в сцены (закрытые сцены с запечёнными префабами тоже находит и исправляет) и удаляет созданные файлы.
Ограничения: материалы с тайлингом UV за пределы 0..1 не объединяются (исключаются автоматически); разные шейдеры не смешиваются в одном материале, если не включено «Приводить к одному шейдеру»; дополнительные карты (normal, emission) в атлас не переносятся.
«Разделять атласы по типу шейдера» (включено по умолчанию) не пускает в один атлас материалы с разными шейдерами или режимами отрисовки — непрозрачный, с вырезкой, прозрачный, двусторонний, — даже если у них один шейдер или включено «Приводить к одному шейдеру»: деревья и дома получат разные атласы. Материалов на выходе должно быть не меньше, чем таких типов.
«Tools → Запекание мешей» создаёт в сцене объект MeshSectionGrid (тег EditorOnly — в билд
не попадает). Режимы разбиения:
- Сетка полос — вертикальные/горизонтальные полосы: «+» над и слева от сетки добавляет полосу, «×» удаляет, точки двигают; есть равномерное разбиение с шагом.
- Зоны вручную — многоугольники: «+ Зона», перетаскивание точек, Ctrl+клик по краю — новая точка, Shift+клик по точке — удалить точку, удерживать Z и тащить — двигать всю зону (клавиша меняется в Edit ▸ Shortcuts ▸ Mesh Section Baker).
- Выделение объектов — секции собираются из выделенных в сцене объектов; панель «Mesh Sections» в Scene view, объекты редактируемой секции подсвечиваются жёлтым.
При запекании секции объекты сшиваются в один меш (по сабмешу на материал), MeshCollider
удаляемых объектов — в один коллайдер. В режиме «Убрать со сцены» исходные объекты полностью
удаляются из сцены — в редакторе и в билде они не загружаются. Их точная копия (экземпляры
префабов со всеми изменениями) хранится в префабе Generated/<сцена>_<id>/Sources/<секция>.prefab,
при распекании объекты создаются заново на тех же местах. Объекты со скриптами, светом,
триггерами и т.п., а также объекты, на которые ссылаются другие объекты сцены, не удаляются —
у них только выключаются рендеры. Сшитые меши сохраняются в Assets/MeshSectionBaker/Generated/.
Секции, запечённые версией до 1.2.0, держат исходники в скрытом контейнере
[MeshSections Sources · EditorOnly] в сцене; кнопка «Удалить исходники со сцены (перенести
в хранилище)» в инспекторе сетки переводит их на новое хранение без распекания.
Выберите объект (или несколько) в сцене — окно сразу показывает треугольники, вершины и существующие уровни LOD. Для каждого уровня задаются доля треугольников и порог переключения (доля высоты экрана); по умолчанию подставляются рекомендуемые значения по сложности и размеру объекта («Рекомендуемые» возвращает их). «Погрешность, пикс.» — сколько LOD может отличаться от оригинала в момент переключения (экран 1080p): если заданный % треугольников даёт ошибку больше, упрощение останавливается раньше. «Отсекать вдали» — последний LOD пропадает на малой высоте (для секций и крупных объектов выключено).
«Создать LOD» добавляет LODGroup и дочерние объекты <имя>_LOD<n> с упрощёнными мешами
(Assets/LodCreator/Generated/<сцена>/, для секции — рядом с её мешами). Исходные рендеры
не меняются. Меши упрощаются только схлопыванием к существующим вершинам, поэтому UV
атласа, нормали и lightmap UV сохраняются точно. «Удалить LOD» возвращает объект к
исходному и удаляет неиспользуемые меши.
Два сценария с секциями:
- LOD у объектов → сшивание. Секция из объектов с LOD собирается по уровням
(
LOD0…LODn) с LODGroup; пороги пересчитываются под размер секции, объекты без LOD входят во все уровни. Отсечение — только если оно есть у всех объектов. - Сшивание → LOD у секции. Выберите сшитую секцию и создайте LOD для её меша; коллизия не трогается. При распекании секции её LOD удаляются вместе с ней.
Порядок работы вместе: сначала запекание текстур, потом сшивание мешей; обратно — сначала распечь секции, потом материалы (инструмент текстур это проверяет). LOD на экземплярах префабов перед заменой префабов (объединение/распекание материалов) нужно удалить — инструмент текстур это тоже проверяет.