Система Mipmap Streaming позволяет вам управлять тем, как Unity загружает мипмапы.
Эта страница содержит следующую информацию:
- Обзор
- Начало работы
- Настройка потоковой передачи Mipmap
- Отладка
- Как Unity рассчитывает требуемый уровень MIP
- Ограничения
Информацию об использовании API для расширения функциональности этой системы см. в разделе API системы Mipmap Streaming.
Обзор
Эта система заставляет Unity загружать только MIP-уровни, необходимые для рендеринга текущего компонента CameraA, который создает изображение конкретная точка зрения в вашей сцене. Вывод либо рисуется на экране, либо фиксируется в виде текстуры. Подробнее
Просмотреть в позиции Словарь вместо загрузки всех по умолчанию. Он жертвует небольшим объемом ресурсов ЦП, чтобы сэкономить потенциально большой объем памяти графического процессора.
Вы можете установить общий лимит памяти для всех текстур в приложении, и система автоматически уменьшит уровни MIP, чтобы не выходить за рамки этого бюджета.
В демонстрационном проекте Unity Viking Village Система Mipmap Streaming экономит 25–30 % памяти текстур в зависимости от местоположения камеры.
Начало работы
Включение потоковой передачи Mipmap
Чтобы включить потоковую передачу Mipmap, перейдите в настройки качества Unity (Изменить > Настройки проектаШирокий набор настроек, которые позволяют настроить поведение физики, звука, сети, графики, ввода и многих других областей вашего проекта. Подробнее
См. в Словарь > Качество) и включите Флажок Потоковая передача текстур.
Когда вы включаете этот параметр, в окне настроек качества отображаются настройки, характерные для системы потоковой передачи Mipmap. Подробнее о каждом параметре см. в документации по настройкам качества.
По умолчанию это включает потоковую передачу Mipmap для всех камер в вашем проекте.
Заставить текстуры работать с системой Mipmap Streaming
Теперь вы можете настроить потоковую передачу Mipmap для отдельных текстур. Выберите ресурс текстуры, перейдите в Инспекторокно Unity, в котором отображается информация о текущем выбранном игровом объекте, ресурсе или настройках проекта, что позволяет вам проверять и редактировать значения. Дополнительная информация
Просмотрите в окне Словарь и просмотрите настройки импорта текстур. Откройте настройки Дополнительно и установите флажок Потоковые Mip-карты.
Если вы разрабатываете для Android, вам также необходимо открыть Настройки сборки и установить Метод сжатия на LZ4 или LZ4HC. Unity требует одного из этих сжатияметода хранения данных, который уменьшает объем требуемого места для хранения. См. Сжатие текстур, Сжатие анимации, Сжатие звука, Сжатие компоновки.
См. в Словарь методы для асинхронной загрузки текстур , на который опирается система Mipmap Streaming.
Unity загружает изображения в максимально возможном разрешении, соблюдая при этом бюджет памяти. Вы можете настроить приоритет текстуры с помощью параметра Mip Map Priority в настройках импорта текстур.
Unity использует этот параметр, чтобы определить:
- Каким текстурам отдавать предпочтение при назначении ресурсов.
- В качестве значения смещения MIP при выборе уровня MIP, который соответствует бюджету памяти. Например, с приоритетом 2 система потоковой передачи мип-карт пытается использовать мип-карту на два уровня выше, чем текстуры с приоритетом 0.
Положительные числа дают более высокий приоритет. Допустимые значения находятся в диапазоне от –128 до 127.
Потоковые карты освещения
Вы можете использовать систему потоковой передачи Mipmap для потоковой передачи уровней MIP для карт освещенияпредварительно обработанной текстуры, которая содержит эффекты света источники на статических объектах в сцене. Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
См. в Словарь.
Вы можете редактировать настройки Mip Map Streaming ресурсов карты освещения так же, как и любую другую текстуру, но они сбрасываются до значений по умолчанию, когда Unity регенерирует карты освещения. Чтобы решить эту проблему, вы можете указать Unity применять эти значения при создании карт освещения. Настройки проигрывателяНастройки, позволяющие устанавливать различные финальная игра, созданная Unity. Подробнее
См. в Словарь (Редактировать > Настройки проекта > Проигрыватель) предоставляют два элемента управления для установки потоковой передачи и приоритета для сгенерированных карт освещения: Включена потоковая передача карт освещения и Приоритет потоковой передачи.
Включение Mip Map Streaming и настройка приоритета работают так же для карт освещения, как и для обычных текстур.
Настройка потоковой передачи Mipmap
Вы можете настроить параметры по умолчанию в редакторе Unity, а затем использовать API Mipmap Streaming, чтобы при необходимости переопределить эти параметры.
Настройка бюджета памяти
Свойство Бюджет памяти определяет максимальный объем памяти, который Unity использует для текстур. Если ваш бюджет памяти слишком мал, Unity снижает разрешение текстур в вашей сценеСцена содержит окружение и меню вашей игры. . Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь. Это может привести к тому, что текстуры будут всплывать или загружаться медленно. Однако бюджет памяти должен быть как можно меньше, чтобы выделить память для других ресурсов.
Установите бюджет памяти в окне Настройки качества с помощью свойства Потоковая передача текстур > Бюджет памяти.
Когда бюджет памяти заполнен, Unity отбрасывает мип-карты, которые не использует, чтобы освободить место для тех, которые ему нужны. Вы можете контролировать количество неиспользуемых MIP-карт, которые он отбрасывает, с помощью Уменьшения максимального уровня.
Это значение также является уровнем MIP-карты, который система потоковой передачи MIP-карт изначально загружает при запуске. Например, если для этого параметра установлено значение 2, Unity пропускает два мип-карты с самым высоким значением при первой загрузке.
Установите это значение в окне Настройки качества со свойством Потоковая передача текстур > Уменьшение максимального уровня.
Примечание. Unity отдает предпочтение значению Max Level Reduction, а не бюджету памяти. Он никогда не отбрасывает больше мипмапов, чем значение Max Level Reduction, даже если это приводит к превышению бюджета памяти текстур.
Бюджет памяти включает текстуры, не использующие Mipmap Streaming. Например, если ваш бюджет составляет 100 МБ, а у вас есть 90 МБ текстур, не использующих Mipmap Streaming, Unity попытается уместить все потоковые MIP-карты в оставшиеся 10 МБ. Если это невозможно, он загружает их с более низким разрешением. Unity всегда загружает текстуры, которые не используют Mipmap Streaming, с полным разрешением, даже если это превышает бюджет.
Чтобы выяснить, каким должен быть ваш бюджет памяти:
- Просмотрите значение Texture.desiredTextureMemory во время выполнения проекта.
- Установите значение Memory Budget немного выше, чем значение Texture.desiredTextureMemory.
Это гарантирует наличие достаточного объема памяти текстур для самых ресурсоемких областей вашей сцены и предотвращает падение текстур до более низкого разрешения. Если у вас есть дополнительная доступная память, вы можете установить больший бюджет памяти, чтобы Unity могла хранить данные текстур, которые не видны в вашей сцене, в кэше потоковой передачи.
Настройка камер
По умолчанию, когда вы включаете систему потоковой передачи Mipmap, Unity включает ее для всех камер. При желании вы можете отключить этот параметр.
Контролируйте, включает ли Unity потоковую передачу mipmap для всех камер, в окне Настройки качества с помощью Потоковой передачи текстур > Добавить все камеры. свойство.
Если вы хотите исключить определенную камеру, добавьте компонент потокового контроллера к этой камере, а затем отключите его.
Если вы отключите Добавить все камеры, вы должны включить потоковую передачу mipmap для каждой камеры. Для этого добавьте компонент Streaming Controller в тот же класс GameObjectОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь как компонент камеры.
Этот компонент также позволяет настроить смещение MIP для каждой камеры.
Настройка режима воспроизведения
Потоковая передача Mipmap включена в режиме воспроизведения по умолчанию.
Контролируйте, включает ли Unity потоковую передачу Mipmap в режиме воспроизведения, в окне Настройки редактора с помощью Настройки потоковой передачи > Включить потоковую передачу текстур. в режиме воспроизведения.
Если потоковая передача Mipmap включена в режиме воспроизведения, но не включена в режиме редактирования (или наоборот), переключение в режим воспроизведения и выход из него занимает немного больше времени. Это предотвращает выгрузку и повторную загрузку данных MIP-карт Unity и должно ускорить рабочий процесс Play Mode.
Отладка потоковой передачи Mipmap
В Unity есть встроенный режим просмотра отладки Mipmap Streaming. Чтобы получить к нему доступ, щелкните раскрывающееся меню управления видом сцены и выберите Потоковая передача текстур. В этом режиме просмотра игровые объекты окрашиваются в следующие цвета в зависимости от их статуса в системе Mipmap Streaming:
- Зеленый для текстур, у которых уменьшено количество MIP-карт из-за системы потоковой передачи MIP-карт.
- Красный для текстур с меньшим количеством мипмапов, потому что у системы потоковой передачи мипмапов недостаточно ресурсов, чтобы загрузить их все.
- Синий для текстур, которые не настроены на потоковую передачу или если нет средства визуализации, вычисляющего уровни MIP.
Вы также можете создавать собственные инструменты отладки и визуализации с помощью API отладки.
Важно. Если вы пометите основную текстуру в своем шейдерепрограмме, работающей на графическом процессоре. Подробнее
См. в Словарь с использованием MainTexture, эти текстуры не будут видны в режиме отладки. Чтобы обойти это, всегда используйте свойство текстуры с именем _Maintex
, чтобы указать основную текстуру материала.
Как Unity рассчитывает требуемый уровень мип
Для текстур, использующих Mipmap Streaming, Unity вычисляет правильный уровень MIP, используя один из следующих методов:
- Если вы назначаете текстуру материалу, используемому компонентом Unity Renderer, Unity автоматически вычисляет уровень MIP.
- В противном случае необходимо вручную запрашивать уровни MIP с помощью Texture2D.requestedMipmapLevel.
Если вы этого не сделаете, Unity не сможет рассчитать правильный уровень мип-текстуры и загрузит текстуру, используя мип-мипы низкого качества. Они могут выглядеть размытыми.
Примечание. Следующие системы не используют стандартные компоненты средства визуализации. Это означает, что вы должны вручную установить запрошенные mips для этих систем:
- Текстуры проектора с наклейками.
-
Зонд отраженияКомпонент рендеринга, который захватывает сферическое изображение своего окружения во всех направлениях, подобно камере. Захваченное изображение затем сохраняется как кубическая карта, которую можно использовать для объектов с отражающими материалами. Подробнее
См. в Словаре текстуры: MIP с более низким разрешением — это справочная таблица для шероховатости. Таким образом, если Unity использует более низкий уровень MIP-карты, материалы отображаются с неправильной шероховатостью. - Шейдеры, которые используют координаты текстуры UV в канале, отличном от Mesh.uv (также называемом UV0), или изменяют координаты текстуры в шейдере. Единственными исключениями являются изменения масштаба и перевода (см. ниже).
Ограничения
- Unity не поддерживает потоковую передачу Mipmap на Terrainландшафт вашей сцены. Игровой объект Terrain добавляет в вашу сцену большую плоскую плоскость, и вы можете использовать окно Terrain Inspector для создания подробного ландшафта. Подробнее
См. в Словарь текстуры. Это связано с тем, что текстуры ландшафта должны быть доступны в полном разрешении в любое время, чтобы Unity могла разбивать и смешивать текстуры. - Когда компонент Renderer активен, его сетке требуются действительные метрики распределения UV для расчета желаемого уровня MIP. Unity автоматически рассчитывает метрики распределения в процессе импорта меша.
Если вы создаете сетку из кода, Unity не вычисляет метрики распределения автоматически и поэтому загружает неправильные уровни MIP. Чтобы вручную запустить расчет метрики распределения UV, используйте Mesh.RecalculateUVDistributionMetrics.
- Когда Unity визуализирует потоковую текстуру напрямую с помощью API (например, Graphics.DrawMeshNow, у системы нет ограничений средства визуализации или другой информации для расчета уровень mip. Это означает, что вам нужно установить уровень mip текстуры вручную или отключить потоковую передачу Mipmap для этой текстуры. См. Texture2D.requestedMipmapLevel, чтобы чтобы вручную указать, какой мип-уровень загружает Unity.
- Когда Unity вычисляет мип-уровень для текстуры, он ищет масштаб и перевод этой текстуры в значении
_ST
с тем же именем, что и у текстуры, отмеченной в вашем шейдере. Например, если вы ссылаетесь на свои текстуры в шейдере с помощью_MainTex
, Unity будет искать_MainTex_ST
.