Директива GrabPass в ссылке ShaderLab
GrabPass — это команда, которая создает особый тип Pass, который захватывает содержимое кадрового буфера в текстуру. Эта текстура может быть использована в последующих Pass для создания продвинутых эффектов на основе изображений.
Эта команда может значительно увеличить время кадров CPU и GPU. Вы должны избегать использования этой команды, кроме как для быстрого прототипирования, и пытаться достичь эффекта другими способами. Если вы используете эту команду, постарайтесь сократить количество операций захвата экрана как можно больше; либо уменьшив использование этой команды, либо используя подпись, которая захватывает экран к названной текстуре, если это применимо.
Совместимость конвейера отображения
| Название особенности | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Изготовленный на заказ SRP | Built-in Render Pipeline |
|---|---|---|---|---|
| GrabPass | Нет | Нет | Нет | Да |
Синтаксис
Используйте эту команду в блоке SubShader.
Обратите внимание, что две разные подписи имеют разную функциональность и разные последствия для производительности. Использование именованной текстуры может привести к значительному сокращению операций захвата экрана, что может уменьшить влияние этой ресурсоемкой команды.
| Подпись | Функция |
|---|---|
GrabPass { } |
Захватывает содержимое кадрового буфера в текстуру, которую можно использовать в последующих проходах в том же SubShader. Ссылка на текстуру с использованием имени _GrabTexture. При использовании этой подписи Unity захватывает экран каждый раз, когда он рендеринг пакет, содержащий эту команду. Это означает, что Unity может захватывать экран несколько раз в кадре: один раз для каждого пакета. |
GrabPass { "ExampleTextureName" } |
Захватывает содержимое кадрового буфера в текстуру, к которой можно получить доступ в последующих проходах в том же кадре, через несколько SubShaders. Ссылка на текстуру с помощью заданного имени. При использовании этой подписи, Unity захватывает экран в первый раз в кадре, в котором он рендирует пакет, содержащий эту команду с заданным именем текстуры. |