Пакетная обработка вызовов отрисовки — это метод оптимизации вызовов отрисовки, который объединяет сетки, чтобы Unity могла отображать их за меньшее количество вызовов отрисовки. Unity предоставляет два встроенных метода пакетной обработки вызовов отрисовки:
-
Статическая пакетная обработка: для static GameObjectsОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. Словарь, Unity объединяет их и визуализирует вместе. - Динамическая пакетная обработка. Для достаточно маленьких сеток это преобразует их вершины в ЦП, группирует похожие вершины вместе и визуализирует их за один вызов отрисовки.
Встроенная в Unity пакетная обработка вызовов отрисовки имеет ряд преимуществ по сравнению с ручным объединением сеток. в частности, Unity по-прежнему может отбирать сетки по отдельности. Однако у него есть и недостатки; статическая пакетная обработка требует дополнительных ресурсов памяти и хранилища, а динамическая пакетная обработка требует некоторой нагрузки на ЦП.
Требования и совместимость
В этом разделе содержится информация о совместимости встроенных в Unity методов пакетной обработки вызовов отрисовки с конвейером рендеринга.
Совместимость конвейера рендеринга
Характерная черта | Встроенный конвейер рендеринга | Универсальный конвейер рендеринга (URP) | Конвейер рендеринга высокого разрешения (HDRP) | Пользовательский скриптовый конвейер рендеринга (SRP) |
---|---|---|---|---|
Static Batching | Да | Да | Да | Да |
Dynamic Batching | Да | Да | Нет | Да |
Использование пакетной обработки вызовов отрисовки
Следующая информация об использовании актуальна как для статической, так и для динамической пакетной обработки. Сведения о каждом методе пакетной обработки вызовов отрисовки, например о том, как включить и использовать каждый метод, см. в разделах Статическая пакетная обработка и Динамическая пакетная обработка. .
Визуализаторы сеткиКомпонент сетки, который берет геометрию из сетки Отфильтруйте и визуализируйте его в позиции, определенной компонентом Transform объекта. Подробнее
См. в Словарь, Визуализаторы следаВизуальный эффект, позволяющий создавать следы за игровыми объектами в сцене по мере их движения. Подробнее
См. в Словарь, Визуализаторы линийКомпонент, который принимает массив из двух или более точек в трехмерном пространстве и рисует прямую линию между каждой из них. Вы можете использовать один компонент Line Renderer для рисования чего угодно, от простой прямой линии до сложной спирали. Подробнее
См. в Словарь, Системы частицКомпонент, который имитирует текучие объекты, такие как жидкости, облака и пламя, путем создания и анимации большого количества небольших 2D-изображений в место действия. Подробнее
См. в Словарь и Визуализаторы спрайтовКомпонент, позволяющий отображать изображения в виде спрайтов для использования как в 2D-, так и в 3D-сценах. Подробнее
См. в Словарь поддерживаются для пакетной обработки вызовов отрисовки. Другие типы отрисовкиПроцесс отрисовки графики на экран (или отрисовки текстуры). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
Смотреть в компонентах Словарь, включая Skinned СеткаОсновной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
См. в Словарь Рендереры Cloth, не поддерживаются. Unity объединяет рендереры только с другими рендерерами того же типа; например, Mesh Renderers с Mesh Renderers.
Пакеты Unity отрисовывают вызовы GameObjects, в которых используется один и тот же материал. Это означает, что для получения наилучших результатов от пакетной обработки вызовов отрисовки необходимо обмениваться материалами между как можно большим количеством игровых объектов. Если у вас есть два материальных актива, которые идентичны друг другу, за исключением их текстур, вы можете объединить текстуры в одну большую текстуру. Этот процесс называется текстурным атласированием. Для получения дополнительной информации см. статью Википедии об атласировании текстур. Если текстуры находятся в одном атласе, вы можете вместо этого использовать один материал.
Во встроенном конвейере рендеринга вы можете использовать MaterialPropertyBlock для изменения свойств материала, не нарушая пакетную обработку вызовов отрисовки. ЦП по-прежнему необходимо внести некоторые изменения в состояние рендеринга, но использование MaterialPropertyBlock
быстрее, чем использование нескольких материалов. Если в вашем проекте используется Scriptable Render Pipeline, не используйте MaterialPropertyBlock
, так как они удаляют совместимость материала с SRP Batcher.
Прозрачные шейдерыПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь часто требуют, чтобы Unity отображал сетки в обратном порядке. . Для пакетирования прозрачных мешей Unity сначала упорядочивает их сзади наперед, а затем пытается их пакетировать. Поскольку Unity должна визуализировать сетки в обратном порядке, она часто не может пакетировать столько же прозрачных сеток, сколько непрозрачных сеток.
Если вы не можете использовать пакетную обработку вызовов отрисовки, хорошей альтернативой может быть ручное объединение сеток, близких друг к другу. Дополнительную информацию об объединении сеток см. в разделе Объединение сеток.
Предупреждение. При доступе к общим свойствам материала из скрипта C# обязательно используйте Renderer.sharedMaterial и не Renderer.material. Renderer.material
создает копию материала и возвращает эту копию средству визуализации. Это не позволяет Unity группировать вызовы отрисовки для этого средства визуализации.
- Добавлено примечание о том, что динамическая пакетная обработка несовместима с графическими заданиями в 2017.2.