私のシェーダーには、以前にレンダリングされた画面のコンテンツ全体を含む特別な変数がすでにあります。に保存されます
uniform sampler2D _GrabTexture;
内容は次のとおりです。
(ちなみに、私はUnityのGrabPass {}を使用して画面全体を取得しています。また、UnityのGUIは無視してください)
平面モデルのテクスチャとして_GrabTextureを使用して、もう1つのパスをレンダリングするにはどうすればよいですか。結果は、_GrabTextureとまったく同じになりますか?
(要点は、もう一度パスをレンダリングする前に、その画面テクスチャにぼかし、シャープなどのいくつかの効果を適用できるため、平面のテクスチャが定型化されます。)
私はこれを最終パスで試しています。変数は、頂点シェーダーとフラグメントシェーダーの両方で宣言されます。
uniform sampler2D _GrabTexture;
varying vec4 v_Position;
バーテックスシェーダー:
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
v_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
フラグメントシェーダーで使用するために、各モデルの頂点の画面座標を変化するものとして保存します。
フラグメントシェーダー:
void main()
{
gl_FragColor = texture2D(_GrabTexture,vec2(v_Position));
}
次に、保存されているさまざまな位置を使用して、_GrabTexture画面テクスチャにアクセスします。画面全体なので、すでに画面座標にあるv_Positionは正しく正しいピクセルを取得するはずです。
しかし、結果は
ご覧のとおり、平面のテクスチャは、以前にレンダリングされた画面を表示する「一種の」ですが、座標が正しくありません。結果が最初の画像と同じになるように修正するにはどうすればよいですか?