GrabPassは特別のパスタイプで,描画されるときの画面のコンテンツを,テクスチャ内に掴みとります。このテクスチャは後続プロセスで高度な画像ベースのエフェクトに使用できます。
GrabPassはsubshader の中にあります。二つの形式のいずれかをとります:
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 it's colors
Pass {
SetTexture [_GrabTexture] { combine one-texture }
}
}
}
このシェーダには二つのパスがあります:最初のパスはレンダリングのときにオブジェクトにある全てを掴みとり,次にをそれを二つめのパスで適用します。当然,同じエフェクトはより安価にinvertblend mode を使用して得ることが出来ます。