Решили: сорок семь grayscale-текстур UI переименованы по схеме {Роль}_{Мотив}, где роль совпадает с папкой (Backdrops · Banners · Frames · Plates · Masks), а мотив называет рисунок словом, а не номером: Frame_Filigree, Plate_Feather, Mask_Glow_Wide. Инвентарь пачки генерируется скриптом scripts/gen_texture_inventory.py в Reference - UI Texture Inventory.

Почему: имя файла — это и есть адрес текстуры, потому что USS ссылается на неё путём через url() и никакого id не понимает. SO-каталог наподобие AudioCatalog работал бы только для C#, а UI пойдёт через USS — заводить его сейчас значило бы положить шов под пустоту. Отсюда и требование к имени: оно должно позволять ВЫБРАТЬ текстуру, не открывая её. Номерная схема (Frame_Ornate_01..10) отвергнута именно поэтому — по ней выбор идёт перебором. Прежние имена приходили от генератора (ChatGPT Image 23 авг. 2026 г., 12_41_24 (11).png): кириллица, запятые и пробелы в пути, сортировка, где (10) стоит перед (9).

Инвентарь генерируется, а не пишется руками, по причине из Journal - Code Owns Truth: рукописный список файлов отстаёт от диска за неделю. Прецедент — audio-inventory.

Сказано: «Также переименуешь их корректно? Чтобы норм назывались понятно и в одном стиле. Также стоит поменять название абстрактной текстурки. А то зачем-то ты поменяла её отдельно от других» (23.08.2026, сессия 3dfc278f). Про место конспекта — «Возможно даже не в документации коспектировать а прямо в ассетах юнити, хз как лучше?»; выбран маршрут «инвентарь скриптом плюс запись в журнал», в ассеты не пишется ничего.

Грабли:

  • MenuBackdrop_Light.png был не отдельно названной текстурой, а КОПИЕЙ. Замер разницы с Background ver 5 (ныне Backdrop_Facets) — 0.13 из 255, то есть тот же кадр, отмасштабированный в 1920x1080 и с бесполезной альфой 201–255. Ссылок по GUID на него не было: задник меты берёт материал из MapStyle, а не текстуру напрямую. Файл удалён.
  • Прозрачности нет ни у одного файла пачки. Шахматка на рамках и пластинах нарисована пикселями — так генератор изображает прозрачный фон, которого не отдаёт. Замер: верхний ряд у всех Frames и Plates — тона 233–253. Пока белое поле не вырезано в альфу, класть эти текстуры поверх фона нельзя.
  • Серые они не полностью: разброс каналов до 19 (Backdrop_Ridges). При тонировании через -unity-background-image-tint-color это даёт паразитный оттенок.
  • Размеры произвольные и не кратны 4 (2035x773, 1942x809): Unity не сожмёт такие в BC/DXT и положит в RGBA32.
  • Спор про 9-slice для Plates закрыт в пользу 9-slice. Довод против («орнаментальные концы плывут от длины слова») был замером ПРОСТОЙ растяжки, а не 9-slice — у него концы уходят в углы и не тянутся вовсе, то есть ровно это и чинится. Настоящая цена другая и она мелкая: рельеф запечён вместе с цветом, поэтому :hover можно только тинтовать целиком, а «светится только кромка» на растре не сделать.
  • Переименование шло через AssetDatabase.RenameAsset при живом редакторе — правка .meta на диске здесь потеряла бы GUID. execute_code блокирует AssetDatabase.DeleteAsset проверкой безопасности, нужен safety_checks=false.

Владелец правды: сами файлы в Assets/_Project/Art/Textures (Grayscale), таблица — scripts/gen_texture_inventory.py, форма кнопки — Assets/_Project/Scripts/UI/Components/PlateButton.cs.