Выбор метода оптимизации вызовов отрисовки
Оптимизируйте вызовы отрисовки, если CPU отправляет на GPU слишком много вызовов отрисовки — про такую ситуацию говорят, что приложение упирается в CPU. Подробнее о вызовах отрисовки см. Введение в оптимизацию вызовов отрисовки.
Проверка количества вызовов
Чтобы проверить, не отправляет ли ваша сцена слишком много вызовов рисования, выполните любое из следующих действий:
- Откройте окно Статистика отображения и проверьте значение SetPass вызова.
- Откройте Profiler и выберите раздел Рендеринг для отображения количества вызовов игры.
- Проверьте количество вызовов рисования в Frame Debugger.
Выбор методов оптимизации
Поддерживаемые и рекомендуемые методы оптимизации вызовов отрисовки зависят от того, используете ли вы Universal Render Pipeline (URP), High Definition Render Pipeline (HDRP) или встроенный конвейер рендеринга (BIRP).
| Особенности | Тип | Многопоточность | Рекомендация в URP | Рекомендация в HDRP | Рекомендация во встроенном Render Pipeline |
|---|---|---|---|---|---|
| Scriptable Render Pipeline (SRP) Дозатор | Сокращает число обновлений состояния рендеринга | DX12, Vulkan и совместимая консоль APIs, только если вы включили Графика. | Включить. См. SRP Batcher в URP. | Включить. См. SRP Дозатор в HDRP | Не поддерживается |
| GPU Резидентный ящик | Использует GPU аппаратное копирование | Да | См. GPU Резидентный ящик в URP. | Включить. См. GPU Резидентный ящик в HDRP | Не поддерживается |
BatchRendererGroup (BRG) API |
Использует GPU аппаратное копирование | Да | Используйте вместо этого GPU Resident Drawer, за исключением расширенных сценариев использования. | Используйте вместо этого GPU Resident Drawer, за исключением расширенных сценариев использования. | Не поддерживается |
| GPU Флажок в материалах | GPU аппаратное инстанционирование | Нет | Отключить, чтобы избежать дополнительных вариантов шейдеров. | Отключить, чтобы избежать дополнительных вариантов шейдеров. | Включите, если у вас много экземпляров или огней. См. GPU Создание экземпляра. |
| Дозирование | Объединение мешей | Нет | Отключить. Статическое пакетирование несовместимо с BRG API или GPU Resident Drawer. | Отключить. Статическое пакетирование несовместимо с BRG API или GPU Resident Drawer. | Включите статическое пакетирование. Динамическое пакетирование больше не рекомендуется. См. Дозирование. |
Если у вас много экземпляров или светильников, вы также можете использовать для оптимизации отображения сетки с использованием уровня детализации (LOD).
Чтобы получить наилучший результат от любого метода оптимизации вызовов отрисовки, выполните следующее:
- Используйте одни и те же материалы для различных GameObjects, насколько это возможно.
- Если вы хотите отобразить одну и ту же сетку с разными свойствами, например, разными цветами, используйте Варианты материалов вместо нескольких материалов.
- Не используйте
MaterialPropertyBlockAPI в URP и HDRP.
Используйте несколько методов оптимизации
Вы можете использовать несколько методов оптимизации вызова рисования в одной и той же сцене, но каждый GameObject использует только некоторые методы в зависимости от его сетки и шейдера.
Если включить все возможности в таблице, Unity выполнит следующие действия:
- Статические меши: объединяет меши с помощью статического пакетирования.
- Динамические меши с совместимым шейдером: использует SRP Batcher с GPU Resident Drawer или BRG API.
- Оставшиеся меши с совместимым шейдером: использует GPU Инстансирование.
- Оставшиеся меши: использует динамическое пакетирование.
Дополнительные ресурсы
- Варианты шейдера
- Королевство Фантазии в Unity 6, которое использует GPU Резидентский Ящик.
- SRP Batcher: ускорение рендеринга
- BatchRendererGroup пример: Достижение высокой частоты кадров даже на бюджетных устройствах
- Megacity Metro, который использует BatchRendererGroup API для отображения большого количества объектов.