Texture memory
Описание
Данная характеристика формируется из всех используемых в материалах текстур. К этому относятся, например:
- Базовые текстуры (основные текстуры, Color Texture, Albedo, могут называться по разному в контексте разных шейдеров и 3D моделирования), определяют цвет и рисунок модели.
- Normal Map - карты нормалей (добавляют объема плоским объектам)
- Маски (указывают шейдеру к какой части текстуры применять эффекты)
- MatCap-текстуры (сферические текстуры, в которых закодировано освещение и отражения материала)
- Metallic Map, Smoothness Map, Roughness Map, Specular Map, AO Map и прочие
TODO Расписать последний пункт.
С памятью текстур можно сделать следующее:
- Уменьшить разрешение текстур (основной способ). Зачастую авторы ставят довольно большое разрешение, которые можно уменьшить без ухудшения качества (и улучшить качество за счет отключения
Crunch Compressionи увеличения размера аватар) - Убрать некоторые маски/карты нормалей/прочее. Это уберет некоторые эффекты в случае масок и видимость объема, и требуется обычно только если нужно совсем ужаться в памяти текстур
- Объединить базовые текстуры, накладываемые друг на друга шейдером.
Размер текстур в видеопамяти зависит от размера картинки и заданного в Unity для нее формата сжатия. Каждый формат имеет свои особенности, рекомендации по используемым форматам неплохо описаны в этой статье на сайте шейдера Poiyomi (на английском).
Данный шаг на текущий момент является деструктивным, т.к. меняет настройки файлов текстур и файлов шейдеров в проекте.
Поэтому:
- Для тела/волос/лица базы аватара сделайте в проекте один раз оптимизацию их размера, чтобы хорошо выглядели на любой версии аватара
- Уменьшение памяти текстур для любого последующего аватара начинайте с текстур одежды.
- Если требуется изменить текстуры/шейдеры, уже используемые в других аватарах (например, на менее оптимизированной версии), то делайте копии файлов, добавляйте их в нужный аватар и работайте с ними.
- После оптимизации запеките аватар и проверьте на клоне используемые текстуры, убедитесь что там остались только нужные текстуры
Часто бывает, что в Outline добавляется основная текстура меша для соответствия цветам на подводке, и если вы меняли текстуру, надо не забыть поменять ее и здесь в таком случае, чтобы старая текстура не занимала видеопамять.
Пакет "Thry's Avatar Performance Tools"
Работать с размерами текстур очень удобно с помощью пакета Thry's Avatar Performance Tools. Он позволяет видеть размер всех используемых в аватаре текстур и сразу же его изменить.
При недеструктивной работе в инструмент с большой долей вероятности могут попасть текстуры, которые будут удалены при загрузке аватара, поэтому собирайте (запекайте) аватар для проверки фактического значения размера текстур и фактически используемых текстур.
- Чтобы его открыть, необходимо в меню сверху выбрать
Thry-Avatar-VRAM
- В поле
Inputдобавьте свой аватар и раскройте вкладкуTextures: - Во вкладке слева направо вам покажет:
- Кнопка со сферой - материалы, в которых используется текстура
- Число с
MiB- размер текстуры в видеопамяти в мегабайтах - Маленькая иконка с названием текстуры - нажатие на нее выделит текстуру в папках проекта. Круг с точкой справа от нее позволяет заменить текстуру в материале
- 3-4 цифры в выпадающем поле - разрешение текстуры. Основной способ уменьшить ее размер
- После указан формат сжатия текстуры, тоже влияет на размер (см. далее)
- Возможные кнопки после покажут вам рекомендации по уменьшению размера, однако торопиться с этим не стоит.

- В списке присутствуют все виды текстур, используемые в материалах
- Normal Map (Карты нормалей) во
VRAM Evaluatorобычно светло-коричневого цвета и/или имеют приписку типа "normal", но если вы на нее переключитесь в проекте - в файле будет синеватого цвета, а в самом начале в инспектореTexture TypeбудетNormal Map. Цвет вVRAM Evaluatorпоказывает формат сжатия.

- Маски - черно-белые, могут иметь приписку
mask. Не имеют специального типа текстуры.

- Иногда маски эмиссии (свечение части текстур на модели) делают сразу цветом, которым он будет светиться (или разными). Такие маски могут иметь приписку "emission" и будут находиться в материале в разделе
Emission. Не имеют специального типа текстуры.

- Текстуры в виде сферы используются для
MatCap-а. Не имеют специального типа текстуры, но выделяются внешним видом

- Прочие текстуры скорее всего являются базовыми.
- На шейдере
LilToonбазовые текстуры будут находиться в разделеMain Color / Alpha

- На шейдере
- Normal Map (Карты нормалей) во
Способы оптимизации
Уменьшение разрешения текстур и изменение формата сжатия текстур
При уменьшении разрешения следует еще руководствоваться внешним видом модели после оптимизации. Поэтому есть ленивый порядок действий и рекомендуемый.
Ленивый способ
Ленивый способ вообще не гарантирует красивый результат, но самый быстрый. После ленивого можно перейти к рекомендуемому чтобы поднять разрешение плохо выглядящих текстур:
- Уменьшайте базовые текстуры и нормали до 2048 (параметр
Max size). Если видите, что текстура находится на мелком предмете - уменьшайте до 1024. - Уменьшайте черно-белые текстуры (маски) до 1024
- Если
VRAM Evaluatorпредлагает поменять формат - нажимайте. - Пройдитесь по текстурам и отключите
Use Crunch Compression- увеличится только вес аватара, но текстуры будут выглядеть лучше.- Если вес аватара важен - используйте и меняйте значения Crunch Compression и смотрите как это будет выглядеть на модели.
Рекомендуемый способ
- Передвиньте окно
VRAM Evaluatorи вид на сцене так, чтобы одновременно был виден аватар на расстоянии около ~0.5 метра. - Для текстуры включите отображение материала (самая левая кнопка со сферой) и запомните его название.
- Найдите этот материал на меше аватара. Нажмите на него, на сцене на секунду будет подсвечена часть меша, к которой относится материал. Пройдитесь по остальным мешам, этот материал может использоваться где-то еще.
- Если нажать на материал во
VRAM Evaluator, вас перекинет на файл материала в проекте, а не в аватаре, поэтому придется найти вручную.
- Если нажать на материал во
- Теперь вы знаете на какую часть модели влияет текстура, куда смотреть на результат при изменении разрешения.
- Обычно
Normal Mapи маски имеют схожие с базовой текстурой/материалом названия. Можете сразу найти относящиеся к этому же материалу такие текстуры
- Обычно
- Нажмите на название текстуры во
VRAM Evaluatorчтобы подсветить ее в проекте (вкладка Project). Выберите файл текстуры в проекте, чтобы открыть настройки ее импорта.- Во вкладке Default задаются параметры текстур для всех платформ (Windows, Android, IOS, если есть), на иконке с изображением монитора - для Windows, на иконке с андроидом - да (да, да).
Max Size- максимальное разрешение текстуры, позволяет уменьшить ее размер (но не наоборот).Resize Algorithm- алгоритм, по которому уменьшается разрешение. Ни разу не трогал эту настройку.Formatоставьте Automatic, тоже ни разу не приходилось трогать.Compressionопределяет сжатие текстуры в видеопамяти.Use Crunch CompressionиCompressor Qualityотвечают за сжатие файла текстур ине влияетна VRAM память текстур. Отключение сжатия повысит качество текстуры, но увеличит вес аватара- На вкладке для Windows в поле
Formatуказаны специфичные для платформы форматы. Именно здесь можно выставить рекомендуемый в статье для карт нормалей BC5.

Объединение/запекание текстур в материале
В некоторых шейдерах (например, LilToon) можно накладывать несколько базовых текстур друг на друга. Каждая такая накладываемая текстура, естественно, занимает видеопамять.
В LilToon для объединения таких текстур в одну, а также для применения корректировок текстуры в материале, можно нажать кнопку Bake в разделе Main Color. Вам предложит сохранить новый файл текстуры в проекте и автоматически заменит его в материале.

Также при наличии Alpha-маски на материале (маска прозрачности) ее можно "запечь" через шейдер в основную текстуру:

Вам так же предложит сохранить новый файл текстур и заменить ее в шейдере. Alpha-маска станет прозрачностью в базовой текстуре. Но это может увеличить память текстуры если она импортировалась без прозрачности (TODO проверить)
Кнопка Bake также может присутствовать в прочих местах материала. "Запекание" используется не только для объединения текстур, но и для применения настроек шейдера к изображению. Например, если вы подстроили цвет текстуры через шейдер, можно немного его разгрузить, применив настройки прямо к файлу текстуры.

TODO Добавить примеры с Poiyomi
Удаление текстур
Для удаления текстур нужно найти их в материале и удалить из соответствующего поля. Выделите ее и нажмите Delete.
Если текстура остается в аватаре после сборки, хотя в материале ее нет, возможно она осталась в каком-то из выключенных разделов шейдера в материале.
В LilToon в разделе Optimization есть кнопка Remove unused textures.
Содержание
📄️ Пример оптимизации текстур
На скриншоте ниже текстуры с открытыми материалами с разрешением 4096 относятся к обуви. Смело можно уменьшать до 1024, на обувь мало кто смотрит с такого близкого расстояния: