Scriptable Render Pipeline Дозатор в URP
Scriptable Render Pipeline (SRP) Batcher является оптимизацией draw call, которая существенно повышает производительность приложений, использующих SRP. SRP Batcher сокращает время CPU, необходимое Unity для подготовки и отправки вызовов отрисовки для материалов, использующих один и тот же вариант шейдера.
Требования и совместимость
В этом разделе содержится информация о совместимости конвейера рендеринга SRP Batcher.
Совместимость конвейера отображения
| Особенности | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Изготовленный на заказ Scriptable Render Pipeline (SRP) | Built-in Render Pipeline |
|---|---|---|---|---|
| SRP Дозатор | Да | Да | Да | Нет |
Как работает SRP Batcher
Традиционный способ оптимизации вызовов отрисовки — сократить их количество. SRP Batcher вместо этого сокращает изменения состояния рендеринга между вызовами отрисовки. Для этого SRP Batcher объединяет последовательность команд bind и draw GPU. Каждая последовательность команд называется SRP batch.
Для достижения оптимальной производительности вашего рендеринга, каждая батч SRP должна содержать как можно больше команд bind и draw. Чтобы достичь этого, используйте как можно меньше вариантов шейдеров. Вы все равно можете использовать столько различных материалов с одним шейдером, сколько хотите.
Когда Unity обнаруживает новый материал во время цикла рендеринга, CPU собирает все свойства и привязывает их к GPU в постоянных буферах. Количество буферов GPU зависит от того, как шейдер объявляет свои постоянные буферы.
SRP Batcher — это низкоуровневый цикл рендеринга, благодаря которому данные материалов остаются в памяти GPU. Если содержимое материала не меняется, SRP Batcher не вносит никаких изменений в состояние рендеринга. Вместо этого SRP Batcher использует отдельный путь кода для обновления свойств движка Unity в большом буфере GPU, например:
Здесь, CPU только обрабатывает Unity Свойства двигателя, маркированные Большой буфер на объект Все материалы имеют устойчивые постоянные буферы, расположенные в GPU памяти, которые готовы к использованию. Это ускоряет рендеринг, потому что:
- Все материальное содержимое теперь сохраняется в памяти GPU.
- Выделенный код управляет большим константным буфером GPU на объект для всех свойств на объект.