Инстансирование графического процессора – это метод оптимизации вызовов отрисовки, который создает несколько копий сетки. Основной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
Посмотреть в Словарь с одним и тем же материалом в одном розыгрыше вызов. Каждая копия сетки называется экземпляром. Это полезно для рисования вещей, которые появляются несколько раз в сценеСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
Посмотрите в Словарь, например, деревья или кусты.
Экземпляры графического процессора отображают идентичные сетки в одном и том же вызове отрисовки. Чтобы добавить разнообразие и уменьшить количество повторений, каждый экземпляр может иметь разные свойства, такие как Цвет или Масштаб. Вызовы Draw, отображающие несколько экземпляров, отображаются в отладчике фреймов как Draw Mesh (instances).
Требования и совместимость
В этом разделе содержится информация о платформе, конвейере рендеринга и совместимости SRP Batcher с экземплярами GPU.
Совместимость с платформами
Экземпляры GPU доступны на всех платформах, кроме WebGLJavaScript API, который отображает 2D- и 3D-графику в веб-браузере. Вариант сборки Unity WebGL позволяет Unity публиковать контент в виде программ JavaScript, использующих технологии HTML5 и API рендеринга WebGL для запуска контента Unity в веб-браузере. Подробнее
См. в Словарь 1.0.
Совместимость конвейера рендеринга
Характерная черта | Встроенный конвейер рендеринга | Универсальный конвейер рендеринга (URP) | Конвейер рендеринга высокого разрешения (HDRP) | Пользовательский скриптовый конвейер рендеринга (SRP) |
---|---|---|---|---|
GPU instancing | Да | Да (1) | Да (1) | Да (1) |
Примечания:
- Только если шейдер несовместим с SRP Batcher.
Дозатор SRP
Инстансирование GPU несовместимо с SRP Batcher. SRP Batcher имеет приоритет над созданием экземпляров GPU. Если GameObjectОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь совместим с SRP Batcher, Unity использует SRP Batcher для визуализировать его, а не экземпляр GPU. Дополнительные сведения о приоритете метода оптимизации см. в разделе Приоритет оптимизации.
Если в вашем проекте используется SRP Batcher и вы хотите использовать создание экземпляров GPU для GameObject, вы можете сделать одно из следующих действий:
- Используйте Graphics.DrawMeshInstanced. Этот API обходит использование объектов GameObject и использует указанные параметры для непосредственного рисования сетки на экране.
- Вручную удалите совместимость с SRP Batcher. Информацию о том, как это сделать, см. в разделе Намеренное удаление совместимости.
Использование экземпляров GPU
Unity использует создание экземпляров графического процессора для игровых объектов, которые используют одну и ту же сетку и материал. Чтобы создать экземпляр сетки и материала:
- шейдер материалаПрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь должен поддерживать создание экземпляров GPU. Стандартный шейдер Unity поддерживает создание экземпляров GPU, как и все поверхностные шейдерыУпрощенный способ написания шейдеров для встроенного конвейера рендеринга. Подробнее
См. в Словарь. Чтобы добавить поддержку создания экземпляров графического процессора для любого другого шейдера, см. раздел [Создание шейдеров, поддерживающих создание экземпляров графического процессора (gpu-instancing-shader). - Сетка должна быть получена из одного из следующих источников:
- Компонент MeshRenderer или вызов Graphics.DrawMesh. Unity добавляет сетки из этих источников в список и пытается объединить их вместе. Если GameObject, к которому присоединен компонент MeshRenderer, совместим с SRP Batcher, то Unity не может создать экземпляр этой сетки. Дополнительную информацию см. в разделе Совместимость SRP Batcher.
Примечание. Unity не поддерживает создание экземпляров GPU для SkinnedMeshRenderers. - Вызов Graphics.DrawMeshInstanced или Graphics.DrawMeshInstancedIndirect . Эти методы создают экземпляры одной и той же сетки в нескольких местах с использованием одного и того же шейдера. Unity выполняет каждый вызов отдельно, что означает, что он не может создавать сетку из разных вызовов вместе.
- Компонент MeshRenderer или вызов Graphics.DrawMesh. Unity добавляет сетки из этих источников в список и пытается объединить их вместе. Если GameObject, к которому присоединен компонент MeshRenderer, совместим с SRP Batcher, то Unity не может создать экземпляр этой сетки. Дополнительную информацию см. в разделе Совместимость SRP Batcher.
Чтобы использовать экземпляр GPU для материала, выберите параметр Включить экземпляр GPU в Инспекторе Окно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
См. в Словарь.
Освещение
Инстансирование GPU поддерживает систему запеченного глобального освещения Unity. Стандартные шейдеры Unity и поверхностные шейдеры поддерживают создание экземпляров графического процессора, а запеченное Global Illuminationв Unity представляет собой группу методов, которые моделируют как прямое, так и непрямое освещение для обеспечения реалистичные результаты освещения. В Unity есть две системы глобального освещения, сочетающие прямое и непрямое освещение: запеченное глобальное освещение и глобальное освещение в реальном времени.
По умолчанию смотреть в системе Словарь.
Каждый экземпляр GPU поддерживает глобальное освещение из одного из следующих источников:
- Любое количество световых зондовсветовых зондов хранит информацию о том, как проходит свет пространство в вашей сцене. Набор световых зондов, расположенных в заданном пространстве, может улучшить освещение движущихся объектов и статических пейзажей LOD в этом пространстве. Подробнее
См. в Словарь. - Одна карта освещенияпредварительно обработанная текстура, содержащая эффекты источников света на статических объектах сцены. Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
См. в Словарь.
Примечание. Экземпляр может использовать несколько регионов атласа в карте освещения. - Один Light Probe Proxy VolumeКомпонент, позволяющий использовать больше информации об освещении для больших динамических игровых объектов, которые не могут использовать запеченные карты освещения (например, большие системы частиц или скинированные сетки). Подробнее
См. в компоненте Словарь(LPPV).
Примечание. Вы должны испечь LPPV для тома пространства, содержащего все экземпляры.
Инстанс GPU автоматически работает с:
- Динамические модули визуализации сеткиКомпонент сетки, который берет геометрию из Mesh Filter и визуализирует его в позиции, определенной компонентом Transform объекта. Подробнее
См. в Словаре затронутых Light Probes. - Визуализаторы статической сетки, которые вы запекаете с одной и той же текстурой карты освещения. Mesh Renderer является статическим в этом контексте, если он включает Contribute GI в свои флаги статического редактора.
Чтобы включить Light Probe рендерингпроцесс вывода графики на экран (или текстуру рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. Словарь для Graphics.DrawMeshInstanced
установите для параметра LightProbeUsage значение CustomProvided. и укажите MaterialPropertyBlock, который включает данные зонда. Дополнительные сведения и примеры кода см. в разделе LightProbes.CalculateInterpolatedLightAndOcclusionProbes.
В качестве альтернативы вы можете передать ссылку на компонент LPPV и LightProbeUsage.UseProxyVolume в Graphics.DrawMeshInstanced
. При этом все экземпляры производят выборку объема для каналов L0 и L1 данных Light Probe. Если вы хотите дополнить данные L2 и данные окклюзии, используйте MaterialPropertyBlock
. Дополнительные сведения см. в разделе Световые зонды: техническая информация.
Влияние на производительность
Сети с небольшим количеством вершин не могут быть эффективно обработаны с помощью создания экземпляров графического процессора, поскольку графический процессор не может распределять работу таким образом, чтобы полностью использовать ресурсы графического процессора. Такая неэффективность обработки может отрицательно сказаться на производительности. Порог, при котором начинается неэффективность, зависит от графического процессора, но, как правило, не используйте создание экземпляров графического процессора для сеток, содержащих менее 256 вершин.
Если вы хотите многократно визуализировать сетку с небольшим количеством вершин, лучше всего создать один буфер, содержащий всю информацию о сетке, и использовать его для рисования сеток.
- Включить руководство по созданию экземпляров, DrawMeshInstancedIndirect, мультикомпиляция #pragma добавлена в версии 5.6
- Прогрев шейдера для создания экземпляров GPU добавлен в 2017.3
- Поддержка Global Illumination (GI) в экземплярах GPU добавлена в 2018.1