Введение в создание экземпляров GPU
Инстансирование GPU является оптимизацией вызова рисунка метода, который использует один вызов рисунка для отображения нескольких GameObjects, которые используют одну и ту же сетку и материал. Это ускоряет отображение, когда вы рисуете вещи, которые появляются несколько раз в сцене, например, деревья или кустарники.
Создание экземпляров GPU является встроенной функцией GPUs. Каждая копия сетки называется экземпляром. Каждый экземпляр может иметь различные свойства, такие как цвет или масштаб.
Выигрыш в производительности от GPU instancing зависит от платформы и GPU. Для каждого вызова отрисовки Unity должна собрать, объединить и загрузить свойства из разных участков памяти, поэтому накладные расходы могут перевесить выгоду. На мобильных платформах выигрыш обычно выше, чем на настольных.
Совместимость конвейера отображения
Экземплярование GPU совместимо со всеми конвейерами рендеринга Unity, со следующими ограничениями:
- Если вы используете Universal Render Pipeline (URP) или High Definition Render Pipeline (HDRP), GPU instancing работает с пользовательскими шейдерами только в том случае, если вы отключили Scriptable Render Pipeline (SRP) Batcher или сделать шейдер несовместимым с SRP Batcher.
- Если вы используете Built-in Render Pipeline (BiRP), GPU Инстансинг не работает с Shader Graph шейдерами.
О методах оптимизации вызовов отрисовки, которые можно применять вместо GPU instancing, см. Выбор метода оптимизации вызовов отрисовки.
Совместимость косвенного освещения
Экземплярование GPU поддерживает следующие типы GameObject:
- Динамические GameObjects, которые получают освещение от световых зондов.
- Статические GameObjects, которые получают освещение от lightmaps, если у них включены Contribute GI в их Флаги статического редактора, и они выпекаются в ту же текстуру lightmap.
- GameObjects, которые используют Light Probe Proxy Volumes (LPPV). Вы должны запечь LPPV для всего пространства, которое содержит все экземпляры.
Совместимость шейдера и сетки
Следующие меши совместимы, если вы используете готовые материалы:
- Компоненты Mesh Renderer в вашей сцене. Компоненты Mesh Renderer со скином не поддерживаются.
- Меши, отображаемые в скрипте с помощью APIs, которые поддерживают инстанционирование GPU в готовых материалах, таких как Graphics.RenderMeshInstanced.
Следующие шейдеры поддерживают экземплярование GPU:
- Большинство предустановленных материалов. Совместимые шейдеры имеют свойство Enable GPU Instancing.
- Shader Graph материалы, если вы используете URP или HDRP.
Чтобы создать настраиваемый шейдер, поддерживающий экземплярование GPU, см. следующее:
- Создание настраиваемых шейдеров, поддерживающих GPU instancing во Встроенном Render Pipeline
- Косвенное и процедурное отображение в Shader Graph на сайте дискуссий Unity, если вы используете URP или HDRP.