GrabPass は特別のパスタイプで、描画されるときの画面のコンテンツを、テクスチャ内に掴みとります。このテクスチャは後続プロセスで高度な画像ベースのエフェクトに使用できます。
GrabPass は サブシェーダー の中にあります。二つの形式のいずれかをとります。
GrabPass { }
と指定し、単に現在の画面コンテンツをテクスチャ内に掴みとります。このテクスチャは後続のパスで _GrabTexture
でアクセスすることができます。注意:この形式の Grap Pass は効果な画面の掴みとり処理を使用する各オブジェクトごとに行います。GrabPass { "TextureName" }
により画面コンテンツをテクスチャ内に掴みとりますが、フレームごとに 1度だけ、指定のテクスチャ名を使用する最初のオブジェクト分にのみ、実施します。テクスチャは後続のパスで指定のテクスチャ名でアクセスすることができます。シーンで Grab Pass を使用するオブジェクトが複数ある場合に効率的な方法です。さらに、GrabPass は Name や Tags コマンドを使用することができます。
次の例は、前にレンダリングされたカラーを反転する高価な方法です。
Shader "GrabPassInvert"
{
SubShader
{
// Draw ourselves after all opaque geometry
Tags { "Queue" = "Transparent" }
// Grab the screen behind the object into _GrabTexture
GrabPass { }
// Render the object with the texture generated above, and invert the colors
Pass
{
SetTexture [_GrabTexture] { combine one-texture }
}
}
}
このシェーダーには二つのパスがあります。最初のパスはレンダリングのときにオブジェクトにあるすべてを掴みとり、次にをそれを二つめのパスで適用します。当然、同じエフェクトはより安価に invertブレンドモード を使用して得ることができます。