Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

GrabPass — это команда, которая создает специальный тип прохода, который захватывает содержимое буфера кадра в текстуру. Эту текстуру можно использовать в последующих проходах для создания расширенных эффектов на основе изображения.

Эта команда может значительно увеличить время кадра ЦП и ГП. Как правило, вам следует избегать использования этой команды, кроме как для быстрого прототипирования, и пытаться добиться эффекта другими способами. Если вы используете эту команду, постарайтесь максимально сократить количество операций захвата экрана; либо сократив использование этой команды, либо используя сигнатуру, которая захватывает экран с именованной текстурой, если применимо.

Render pipeline compatibility

Название функции Встроенный конвейер рендеринга Универсальный конвейер рендеринга (URP) Конвейер рендеринга высокого разрешения (HDRP) Пользовательский SRP
GrabPass Да Нет Нет Нет

Использование

Используйте эту команду в блоке SubShader.

GrabPass работает только с буфером кадров. Вы не можете использовать эту команду для захвата содержимого других целей рендеринга, буфера глубиныхранилища памяти, в котором хранится глубина z-значения каждого пикселя изображения, где z-значение — это глубина каждого отображаемого пикселя от плоскости проекции. Подробнее
См. в Словарь
и т. д.

Обратите внимание, что две разные сигнатуры имеют разную функциональность и разные последствия для производительности. Использование именованной текстуры может привести к значительному сокращению количества операций захвата экрана, что снижает влияние этой ресурсоемкой команды.

Подпись Функции
GrabPass { } Захватывает содержимое буфера кадра в текстуру, которую можно использовать в последующих проходах в том же подшейдере.

Ссылайтесь на текстуру, используя имя _GrabTexture.

При использовании этой подписи Unity захватывает экран каждый раз, когда обрабатывает пакет, содержащий эту команду. Это означает, что Unity может захватывать экран несколько раз за кадр: один раз для каждого пакета.

GrabPass { "ExampleTextureName" } Захватывает содержимое буфера кадра в текстуру, к которой вы можете получить доступ в последующих проходах в одном и том же кадре через несколько подшейдеров.

Ссылка на текстуру по заданному имени.

При использовании этой сигнатуры Unity захватывает экран в первый раз в кадре, в котором выполняется рендеринг пакета, содержащего эту команду, с заданным именем текстуры.

Примеры

В этом примере для встроенного конвейера рендеринга показано использование GrabPass для инвертирования цветов цели рендеринга. Обратите внимание, что это неэффективный способ достижения такого эффекта и предназначен только для демонстрации использования GrabPass; того же эффекта можно добиться более эффективно, используя инвертированный режим наложения.

Shader "GrabPassInvert" { SubShader { // Draw after all opaque geometry Tags { "Queue" = "Transparent" } // Grab the screen behind the object into _BackgroundTexture GrabPass { "_BackgroundTexture" } // Render the object with the texture generated above, and invert the colors Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct v2f { float4 grabPos : TEXCOORD0; float4 pos : SV_POSITION; }; v2f vert(appdata_base v) { v2f o; // use UnityObjectToClipPos from UnityCG.cginc to calculate // the clip-space of the vertex o.pos = UnityObjectToClipPos(v.vertex); // use ComputeGrabScreenPos function from UnityCG.cginc // to get the correct texture coordinate o.grabPos = ComputeGrabScreenPos(o.pos); return o; } sampler2D _BackgroundTexture; half4 frag(v2f i) : SV_Target { half4 bgcolor = tex2Dproj(_BackgroundTexture, i.grabPos); return 1 - bgcolor; } ENDCG } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3