Профилирование графического процессора

Производительность графического процессора может сильно повлиять на производительность. В моем случае (TrajektAR) — это в основном приложение AR, поэтому отсечение окклюзии не было вариантом (по крайней мере, для ar-камеры), кроме того, у меня была другая камера, снова визуализирующая всю сцену. , Поэтому оптимизация имела решающее значение для обеспечения более высокой частоты кадров в секунду.

Мне пришлось пройти некоторые процедуры оптимизации, прежде чем начать профилирование

1. Плоскости отсечения камеры

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

Другими словами, с точки зрения рендеринга может быть очень дорого рисовать объекты, которые находятся далеко или очень близко от камеры и не важны для функциональности приложения/игры.

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

В этом случае номер 2 был полезен.

2. Слои маски отсечения камеры

Culling Mask Layer — хорошее решение, когда у вас есть две камеры в сцене и вы хотите визуализировать определенные объекты на каждой камере (группировать определенные объекты по слою и выбирать, должны ли они визуализироваться с помощью этой камеры или нет).

3. Маска отбраковки освещения

Как и в случае с маской отбраковки камеры, освещение не должно влиять на каждый объект в сцене. Постарайтесь свести к минимуму работу по рендерингу, применяя освещение только к тем слоям, которые должны быть освещены.

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

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

4. Текстуры

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

Я начал с текстур, отвечающих за 75% размера сборки, до следующих:

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

В некоторых онлайн-статьях говорится, что отключение генерации MIP-карт является хорошим подходом, поскольку он занимает больше места на 33%, но в документации Unity говорится, что вы должны включить MIP-карты.

5. Статическая пакетная обработка

Включение статической пакетной обработки путем установки флажка «Статический» полезно, если объект не является движущимся объектом, и сводит к минимуму вызовы отрисовки для этого объекта.

6. Инстанс GPU

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

После соблюдения этих мер предосторожности пришло время начать профилирование

Выберите вкладку рендеринга в профилировщике

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

Отладчик кадров — это полезный инструмент, позволяющий понять, как визуализируются объекты.

Нажмите «Отладчик открытых кадров».

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