Version: 2019.1
ShaderLab: UsePass
ShaderLab: SubShader 内のタグ

ShaderLab: GrabPass

GrabPass は特別のパスタイプで、描画されるときの画面のコンテンツを、テクスチャ内に取得します。このテクスチャは後続プロセスで高度な画像ベースのエフェクトに使用できます。

シンタックス

GrabPass は サブシェーダー の中にあります。二つの形式のいずれかをとります。

  • GrabPass { } と指定し、単に現在の画面コンテンツをテクスチャ内に取得します。このテクスチャは後続のパスで _GrabTexture の名でアクセスすることができます。注意:この形式の Grap Pass は時間がかかる画面の取得処理を、使用する各オブジェクトごとに行います。
  • GrabPass { "TextureName" } により現在の画面コンテンツをテクスチャ内に取得しますが、フレームごとに同じテクスチャを使用するはじめのオブジェクトにのみ実施します。テクスチャは後続のパスで指定のテクスチャ名でアクセスすることができます。シーンで Grab Pass を使用するオブジェクトが複数ある場合に効率的な方法です。

さらに、GrabPass は NameTags コマンドを使用することができます。

次の例は、前にレンダリングされたカラーを反転する高負荷な方法です。

Shader "GrabPassInvert"
{
    SubShader
    {
        // すべての不透明のジオメトリの後に、自身を描画します
        Tags { "Queue" = "Transparent" }

        // オブジェクトの後ろの画面を _BackgroundTexture 内に取得します
        GrabPass
        {
            "_BackgroundTexture"
        }

        // オブジェクトを上で生成したテクスチャと一緒にレンダリングし、カラーを反転します
        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;
                //  UnityCG.cginc の UnityObjectToClipPos  を使って 
                // 頂点のクリップスペースを計算します
                o.pos = UnityObjectToClipPos(v.vertex);
                // UnityCG.cginc の ComputeGrabScreenPos を使って 
                // 正しいテクスチャ座標を取得します
                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
        }

    }
}

このシェーダーには 2つのパスがあります。最初のパスはレンダリングのときにオブジェクトにあるすべてを取得し、次にそれを 2つめのパスで適用します。当然、同じエフェクトはより低負荷に反転ブレンドモード を使用して得ることができます。

関連項目

ShaderLab: UsePass
ShaderLab: SubShader 内のタグ
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961