ユーセンブログ

ゲーム開発に関することをたまに書きます

【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でもグローバルなテクスチャを扱うことができるようになります。