Решили: части скелетного юнита пакуются в один Sprite Atlas V2 —
Assets/_Project/Art/Sprites/Bone Animations/BoneParts.spriteatlasv2, packable — папка
Bone Animations целиком, поэтому новые наборы частей подхватываются сами. Настройки: padding 4,
Tight Packing выключен, Allow Rotation включён, Alpha Dilation включён, Filter Mode Bilinear,
мипмапы выключены, Uncompressed.
Почему: атласов в проекте не было ни одного, а спрайтовый батчинг склеивает только то, что лежит в одной текстуре. На арене Y-сортировка перемешивает порядок отрисовки, поэтому без атласа батчи рвутся на каждой смене части. Выбор объёма — вердикт Макса 2026-07-30: один атлас на части скелета сейчас, деление по видам юнитов — когда появятся уникальные наборы; атлас переживёт перерисовку под сетку 96.
Tight Packing выключен намеренно: он делает меш спрайта обтянутым по альфе, а при билинейной фильтрации это срезает кромку. Alpha Dilation, наоборот, включён — он заливает прозрачные пиксели цветом соседа, и кромка не подмешивает пустоту при фильтрации. На рендере кромка вышла чище, чем у россыпи без dilation.
Грабли:
- Настройки атласа V2 живут в импортере, а не в ассете.
SpriteAtlasAsset.Saveзаписывает толькоpackables;SetPackingSettings/SetTextureSettingsна объектеSpriteAtlasAssetв файл не попадают, и.metaмолча остаётся на дефолтах импортера (Tight Packing и Rotation включены, Alpha Dilation выключен). Настраивать черезAssetImporter.GetAtPath(...) as SpriteAtlasImporter, свойстваpackingSettings/textureSettings, затемSaveAndReimport. - Атлас перекрывает фильтрацию отдельных текстур. Bilinear и выключенные мипмапы пришлось
повторить на атласе — иначе правка из
2026-07-30-sprite-filtering-bilinear-no-mipsобнулилась бы молча. - Атлас сейчас дороже россыпи по памяти: страница POT 1024×1024 Uncompressed — 4 МБ, тогда как десять частей занимают 0.9 МБ, заполнение около четверти. Allow Rotation в 512 не уложил. Это осознанная цена: заполнение вырастет вместе с числом частей, а батчинг нужен уже сейчас. Если цена станет неудобной раньше — включать сжатие, а не Tight Packing.
SpriteAtlas.spriteCountвозвращает 26 при десяти уникальных спрайтах, аGetSpritesотдаёт клоны с суффиксом(Clone), которые надо уничтожать. Считать по уникальным именам.
Владелец правды: BoneParts.spriteatlasv2.meta (настройки упаковки и фильтрации), этот файл
(почему так и чем оплачено).