【Unity】Compute Shaderでグローバルなテクスチャを使う方法
UnityのCompute ShaderでGbufferをどうにか頑張ってRenderTextureに変換して使っていたのですが、もっと簡単に扱えることにあとで気がつきました。
自分と似たような状態の人がいないとも限らないのでちょっと記事にしてみようかと思います。
概要
_CameraGBufferTexture0などのグローバルなテクスチャをCompute Shaderで使いたい場合は
cs.SetTextureFromGlobal(index, "Albedo", "_CameraGBufferTexture0");
のようにCompute ShaderのインスタンスにSetTextureFromGlobal関数を使ってセットすることでCompute Shaderで扱えるようになります。
今回の話はこれで終わりです。
説明
UnityではデフォルトではForwardに設定されているのですが設定を変更することでDeferredレンダリングに変更することができます。
Defferdレンダリングに設定すると
- _CameraGBufferTexture0
- _CameraGBufferTexture1
- _CameraGBufferTexture2
- _CameraGBufferTexture3
- _CameraDepthTexture
などのGBuffer及びBufferがグローバルで定義されています。
通常のシェーダーでは_CameraGBufferTexture0などをsampler2Dとして定義することで使用することができるのですが、Compute Shaderでは使用することができませんでした。
これらのグローバルなテクスチャをCompute Shaderで扱う場合、Compute Shaderクラスのインスタンスから先述のSetTextureFromGlobal関数を呼び出して引数にカーネルのインデックス、Compute Shaderで定義されているTextureSampler2Dの名前、グローバルなテクスチャの名前をそれぞれ渡すことでCompute Shaderでもグローバルなテクスチャを扱うことができるようになります。