Поделиться через


Рекомендации по производительности сетки

Производительность

Эта статья содержит общие сведения о важности производительности при создании содержимого в Сетке. Framerate — это самый простой модуль для рационализации производительности. Обычно интервал кадров измеряется в кадрах в секунду (fps) или сколько раз приложение может отображать изображение в секунду. Взаимодействие с пользователем может значительно снизиться, если содержимое не выполняется в оптимальной частоте кадров. Чтобы помочь вам отслеживать и достичь качества кадров, Сетка предоставляет различные инструменты и рекомендации.

В приведенной ниже таблице перечислены целевые кадры для каждой платформы Сетки.

ПК Android (Quest)
Мониторинг частоты обновления (минимум 30fps) 72fps

Простые и сложные сцены

Как и во всех трехмерных разработках, в Сетке существует компромисс между визуальной точностью и производительностью. В зависимости от компьютера, на котором запущена сетка, пользователь может столкнуться с снижением производительности, особенно если сцена сложна.

Думайте о производительности, как финансовый бюджет. Если у вас есть $ 100 долларов, чтобы потратить вы не можете потратить $ 60 отрисовки сложной среды, $ 40 имитации расширенной физики, и $ 20 для визуальных сценариев - вы в конечном итоге будете тратить расходы на ваш бюджет. В качестве разработчика необходимо сделать компромисс между визуальной точностью, сложностью взаимодействия, количеством пользователей и другими системами. Команда Сетки создала список пороговых значений производительности не как правило, а руководство по разработке.

Методология профилирования

Среды разработки в Сетке обычно включают три шага.

  1. Создание содержимого в Unity
  2. Отправка в Microsoft Mesh
  3. Запуск содержимого в приложении Сетки

На одном шаге рекомендуется использовать смесь содержимого Анализатор производительности (CPA) и профилировщика производительности, найденного в пакете набора средств Сетки, который необходим для любого проекта Unity, используемого для создания среды Сетки. На двух шагах средство CPA автоматически запускается. Наконец, во время трех последних этапов профилирование должно выполняться с помощью встроенного профилировщика производительности Сетки.

Средства анализа производительности

Содержимое Анализатор производительности (CPA)

Рекомендуется использовать Анализатор производительности содержимого (CPA), чтобы максимально повысить производительность работы сетки. Средство CPA может статически анализировать содержимое во время разработки. CPA можно использовать для аудита счетчиков треугольников, пакетов, использования памяти текстуры и т. д. Это позволяет перехватывать проблемы оптимизации содержимого и возможности перед отправкой содержимого в Сетку.

Чтобы запустить средство CPA, выберите "Содержимое набора средств>сетки" Анализатор производительности из элементов меню.

Доступ к содержимому Анализатор производительности через меню Unity

Проблемы и предложения передаются через окно редактора в Unity.

Снимок экрана: окно

Внимание

Часть анализаторов CPA будет выполняться автоматически при отправке содержимого в Сетку. Так как не все тесты могут выполняться автоматически, рекомендуется запускать CPA вручную в рамках процесса разработки.

Профилировщик производительности

Профилировщик производительности предоставляет простое окно для просмотра частоты кадров проекта Сетки, сложности сцены и использования памяти на всех платформах. Профилировщик производительности доступен в приложении Сетки и в наборе средств Сетки.

Снимок экрана: профилировщик производительности в изоляции

Чтобы просмотреть профилировщик производительности в приложении Сетки, откройте панель параметров и выберите "Профилировщик производительности для разработчиков>". Профилировщик производительности появится в верхнем центре окна.

Снимок экрана профилировщика производительности в сетке

При использовании профилировщика производительности найдите пропущенные кадры, которые отображаются как красные поля, помеченные символом x. Пропущенные кадры указывают на то, что содержимое не попадает в целевую рамку Сетки и может потребоваться оптимизация. Сложность сцены и использование памяти отображаются под индикаторами пропущенных кадров. Эти цифры могут указывать, почему содержимое не встречает целевой частоты кадров Сетки.

Схема метрик профилировщика производительности

Текст в профилировщике производительности станет красным, если метрика не соответствует рекомендуемой пороговой производительности Сетки. Дополнительные сведения о порогах производительности перечислены в следующем разделе.

Внимание

Пакеты не могут отображаться в приложении Сетки. Они доступны только в редакторе Unity.

Вы также должны следить за нижней панелью памяти, чтобы убедиться, что использование памяти не быстро меняется или приближается к ограничению памяти приложения.

Чтобы просмотреть профилировщик производительности в редакторе Unity, убедитесь, что в сцене установлен компонент установки эмулятора сетки. Убедитесь, что параметр начального количества экранов равен нулю. Если это один или более высокий, вы не сможете переключаться на профилировщик производительности при воспроизведении.

Снимок экрана диалогового окна установки эмулятора сетки

Нажмите кнопку воспроизведения Unity, чтобы войти в режим воспроизведения, переключите профилировщик производительности с помощью клавиши V. Профилировщик производительности появится в верхнем центре окна игры.

Снимок экрана: профилировщик производительности в редакторе Unity

Внимание

При просмотре профилировщика производительности в редакторе Unity вы заглядите дополнительные сведения, такие как количество пакетов и миллисекундное время, необходимое для выполнения определенных подсистем. Обратите внимание, что эти метрики являются относительным приближением производительности и окончательного профилирования в приложении Сетки.

Если вам интересно, что время в миллисекундах в нижней части профилировщика производительности измеряется, вы можете найти эти сведения в разделе пороговых значений производительности.

Другие средства

И CPA, и Профилировщик производительности настраиваются для Сетки, но есть и несколько отличных инструментов для профилирования содержимого в Unity:

Пороговые значения производительности

Оптимизация производительности может быть действием балансировки в зависимости от сценария, для которого вы разрабатываете, и возможностей, которые вы хотите достичь. Отрисовка сцены в Сетке является прямым следствием создания содержимого среды. Ниже приведены предложения по отрисовке для наших текущих платформ.

Пороговые значения отрисовки пк

Polycount Пакеты После обработки
<~500k Треугольники ~200 пакетов Выключено
Текстуры Световые карты Разрешение Skybox
< ~160 МБ < ~80 МБ 2048x4096

Пороговые значения отрисовки Android (Quest)

Polycount Пакеты После обработки
<~80k Треугольники ~50 пакетов Выключено
Текстуры Световые карты Разрешение Skybox
< ~16 МБ < ~20 МБ 1024x2048

Вы можете заметить, что ограничения шейдера не указаны в приведенных выше таблицах. Так как Сетка использует универсальный конвейер отрисовки (URP) Unity, мы рекомендуем использовать более дешевые шейдеры URP (например, универсальный конвейер отрисовки/ универсальный конвейер отрисовки или простой шейдер). Мы также понимаем значение пользовательских шейдеров. Как правило, мы пытаемся сохранить пользовательские шейдеры для большей части среды в пределах следующих пороговых значений:

Математика вершин Математические фрагменты Текстура
< 30 операций < 120 операций < 2 подстановки

Внимание

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

Если вам интересно, как конвейер отрисовки URP настроен для приложения Сетки, вы можете проверить конкретные отрисовщики платформы в каталоге \Library\PackageCache\com.microsoft.mesh.toolkit\mesh.toolkit.uploader\Assets\URP .

Пороговые значения скриптов

Сетка позволяет создавать интерактивное содержимое с помощью визуального скрипта, облачного скриптирования, физики сетки и (или) WebSlate. При просмотре профилировщика производительности в редакторе Unity время, необходимое для выполнения определенных подсистем, отображается в нижней части профилировщика. Если текст изменяется с зеленого на красный, указывающий, что подсистема может быть превышена бюджетом. В таблице ниже приведены дополнительные сведения об этих бюджетах.

Имя подсистемы Максимальный бюджет кадра Description
Поведение Н/П Время, затраченное на обновление всех локальных скриптов MonoBehaviour (C# и Visual)
Render 25% Миллисекунда времени для отрисовки ЦП сцены
WebSlate Н/П Миллисекунд время обновления и отрисовки всех веб-узлов в сцене
Phys Sim 15 % Миллисекунда время для шага моделирования PhysX
Синхронизация Phys 15 % Миллисекунда времени для синхронизации всех физических тел
Фис Effx 10% Миллисекунда время обновления поведения физики
Пользователь VS 15 % Миллисекунда время, затраченное на графы визуальных скриптов, размещенных в сцене
VS Env 10% Миллисекунда время, затраченное на обновление инфраструктуры визуальных скриптов
VS Net 10% Время, затраченное на синхронизацию состояния сети Visual Script

Приведенные выше значения "Максимальный процент кадров" — это рекомендации на основе универсального содержимого. Разработчик может сбалансировать эти системы, чтобы гарантировать, что кадр может обновляться в течение времени.

Ресурсы производительности и оптимизации

Основы производительности графики https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html

Универсальный конвейер отрисовки (URP) https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html

Пакетная служба SRP https://docs.unity3d.com/Manual/SRPBatcher.html

Однопроходная отрисовка и пользовательские шейдеры https://docs.unity3d.com/Manual/SinglePassInstancing.html