Перейти к основному содержимому

Texture memory

Описание

Данная характеристика формируется из всех используемых в материалах текстур. К этому относятся, например:

  1. Базовые текстуры (основные текстуры, Color Texture, Albedo, могут называться по разному в контексте разных шейдеров и 3D моделирования), определяют цвет и рисунок модели.
  2. Normal Map - карты нормалей (добавляют объема плоским объектам)
  3. Маски (указывают шейдеру к какой части текстуры применять эффекты)
  4. MatCap-текстуры (сферические текстуры, в которых закодировано освещение и отражения материала)
  5. Metallic Map, Smoothness Map, Roughness Map, Specular Map, AO Map и прочие

    TODO Расписать последний пункт.

С памятью текстур можно сделать следующее:

  1. Уменьшить разрешение текстур (основной способ). Зачастую авторы ставят довольно большое разрешение, которые можно уменьшить без ухудшения качества (и улучшить качество за счет отключения Crunch Compression и увеличения размера аватар)
  2. Убрать некоторые маски/карты нормалей/прочее. Это уберет некоторые эффекты в случае масок и видимость объема, и требуется обычно только если нужно совсем ужаться в памяти текстур
  3. Объединить базовые текстуры, накладываемые друг на друга шейдером.

Размер текстур в видеопамяти зависит от размера картинки и заданного в Unity для нее формата сжатия. Каждый формат имеет свои особенности, рекомендации по используемым форматам неплохо описаны в этой статье на сайте шейдера Poiyomi (на английском).

warning

Данный шаг на текущий момент является деструктивным, т.к. меняет настройки файлов текстур и файлов шейдеров в проекте.

Поэтому:

  1. Для тела/волос/лица базы аватара сделайте в проекте один раз оптимизацию их размера, чтобы хорошо выглядели на любой версии аватара
  2. Уменьшение памяти текстур для любого последующего аватара начинайте с текстур одежды.
  3. Если требуется изменить текстуры/шейдеры, уже используемые в других аватарах (например, на менее оптимизированной версии), то делайте копии файлов, добавляйте их в нужный аватар и работайте с ними.
  4. После оптимизации запеките аватар и проверьте на клоне используемые текстуры, убедитесь что там остались только нужные текстуры
к сведению

Часто бывает, что в Outline добавляется основная текстура меша для соответствия цветам на подводке, и если вы меняли текстуру, надо не забыть поменять ее и здесь в таком случае, чтобы старая текстура не занимала видеопамять.

Пакет "Thry's Avatar Performance Tools"

Работать с размерами текстур очень удобно с помощью пакета Thry's Avatar Performance Tools. Он позволяет видеть размер всех используемых в аватаре текстур и сразу же его изменить.

warning

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

  1. Чтобы его открыть, необходимо в меню сверху выбрать Thry - Avatar - VRAM Thry Avatar VRAM Calculator
  2. В поле Input добавьте свой аватар и раскройте вкладку Textures:
  3. Во вкладке слева направо вам покажет:
    1. Кнопка со сферой - материалы, в которых используется текстура
    2. Число с MiB - размер текстуры в видеопамяти в мегабайтах
    3. Маленькая иконка с названием текстуры - нажатие на нее выделит текстуру в папках проекта. Круг с точкой справа от нее позволяет заменить текстуру в материале
    4. 3-4 цифры в выпадающем поле - разрешение текстуры. Основной способ уменьшить ее размер
    5. После указан формат сжатия текстуры, тоже влияет на размер (см. далее)
    6. Возможные кнопки после покажут вам рекомендации по уменьшению размера, однако торопиться с этим не стоит.

Текстуры в VRAM Evaluator

  1. В списке присутствуют все виды текстур, используемые в материалах
    1. Normal Map (Карты нормалей) во VRAM Evaluator обычно светло-коричневого цвета и/или имеют приписку типа "normal", но если вы на нее переключитесь в проекте - в файле будет синеватого цвета, а в самом начале в инспекторе Texture Type будет Normal Map. Цвет в VRAM Evaluator показывает формат сжатия.
      Normal Map
    2. Маски - черно-белые, могут иметь приписку mask. Не имеют специального типа текстуры.
      Маски
    3. Иногда маски эмиссии (свечение части текстур на модели) делают сразу цветом, которым он будет светиться (или разными). Такие маски могут иметь приписку "emission" и будут находиться в материале в разделе Emission. Не имеют специального типа текстуры.
      Цветная маска эмиссии
    4. Текстуры в виде сферы используются для MatCap-а. Не имеют специального типа текстуры, но выделяются внешним видом
      alt text
    5. Прочие текстуры скорее всего являются базовыми.
      Color Texture
      1. На шейдере LilToon базовые текстуры будут находиться в разделе Main Color / Alpha
        Main Color LilToon

Способы оптимизации

Уменьшение разрешения текстур и изменение формата сжатия текстур

При уменьшении разрешения следует еще руководствоваться внешним видом модели после оптимизации. Поэтому есть ленивый порядок действий и рекомендуемый.

Ленивый способ

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

  1. Уменьшайте базовые текстуры и нормали до 2048 (параметр Max size). Если видите, что текстура находится на мелком предмете - уменьшайте до 1024.
  2. Уменьшайте черно-белые текстуры (маски) до 1024
  3. Если VRAM Evaluator предлагает поменять формат - нажимайте.
  4. Пройдитесь по текстурам и отключите Use Crunch Compression - увеличится только вес аватара, но текстуры будут выглядеть лучше.
    1. Если вес аватара важен - используйте и меняйте значения Crunch Compression и смотрите как это будет выглядеть на модели.

Рекомендуемый способ

  1. Передвиньте окно VRAM Evaluator и вид на сцене так, чтобы одновременно был виден аватар на расстоянии около ~0.5 метра.
  2. Для текстуры включите отображение материала (самая левая кнопка со сферой) и запомните его название.
  3. Найдите этот материал на меше аватара. Нажмите на него, на сцене на секунду будет подсвечена часть меша, к которой относится материал. Пройдитесь по остальным мешам, этот материал может использоваться где-то еще.
    1. Если нажать на материал во VRAM Evaluator, вас перекинет на файл материала в проекте, а не в аватаре, поэтому придется найти вручную.
  4. Теперь вы знаете на какую часть модели влияет текстура, куда смотреть на результат при изменении разрешения.
    1. Обычно Normal Map и маски имеют схожие с базовой текстурой/материалом названия. Можете сразу найти относящиеся к этому же материалу такие текстуры
  5. Нажмите на название текстуры во VRAM Evaluator чтобы подсветить ее в проекте (вкладка Project). Выберите файл текстуры в проекте, чтобы открыть настройки ее импорта.
    1. Во вкладке Default задаются параметры текстур для всех платформ (Windows, Android, IOS, если есть), на иконке с изображением монитора - для Windows, на иконке с андроидом - да (да, да).
    2. Max Size - максимальное разрешение текстуры, позволяет уменьшить ее размер (но не наоборот).
    3. Resize Algorithm - алгоритм, по которому уменьшается разрешение. Ни разу не трогал эту настройку.
    4. Format оставьте Automatic, тоже ни разу не приходилось трогать.
    5. Compression определяет сжатие текстуры в видеопамяти.
    6. Use Crunch Compression и Compressor Quality отвечают за сжатие файла текстур и не влияет на VRAM память текстур. Отключение сжатия повысит качество текстуры, но увеличит вес аватара
    7. На вкладке для Windows в поле Format указаны специфичные для платформы форматы. Именно здесь можно выставить рекомендуемый в статье для карт нормалей BC5.
      Texture Import settings

Объединение/запекание текстур в материале

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

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

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

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

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

TODO Добавить примеры с Poiyomi

Удаление текстур

Для удаления текстур нужно найти их в материале и удалить из соответствующего поля. Выделите ее и нажмите Delete. Если текстура остается в аватаре после сборки, хотя в материале ее нет, возможно она осталась в каком-то из выключенных разделов шейдера в материале. В LilToon в разделе Optimization есть кнопка Remove unused textures.

Содержание