🍇

TouchDesignerでComputeShaderを使用してみる

2023/04/08に公開

TouchDesignerでComputeShaderを使用したことがなかったので調べてみました。

GLSLTopの下記画像の部分をComputeShaderに設定します。
GLSLのバージョンが4.3.0以上ではないとWarningが出てしまい使えないと思います。

ここがComputeShaderをディスパッチするときのスレッドグループサイズです。

ModeをComputeShaderにして画像部分を開くとComputeShader用のファイルが出現します。

実際にファイルを開いて一つ一つ見ていきます。
スレッドグループ一つに対するスレッドサイズがデフォルトで8,8,1で入っています。Unityと同じみたいです。

layout (local_size_x = 8, local_size_y = 8) in;

gl_GlobalInvocationIDに現在処理しているピクセル座標が入ってきます。
https://registry.khronos.org/OpenGL-Refpages/gl4/html/gl_GlobalInvocationID.xhtml

TDOutputSiwzzleでColorを通過させるTouchDesignerお決まりの処理を書いて色として出力しているみたいです。余談ですが、TDOutputSwizzleはWindowsやMacOSなどプラットフォームの違いを吸収してくれるやつです。

 vec4 color = vec4(1.0, 0, 0, 1.0);
    imageStore(sTDComputeOutputs[0], ivec2(gl_GlobalInvocationID.xy), TDOutputSwizzle(color));

sTDComputeOutpus[0]はComputeShaderで出力するColorBuffersのIndexを指定します。画像の部分です。ColorBuffersはすべてのBufferの総数を指定します。特定のBufferを使い時にそれぞれ指定したIndexを使用するみたいです。

例えば、GLSLTopからRenderSelectTopをつなげてColorBufferを指定することで特定のバッファを取り出せます。

imageStoreはGLSlでComputeShaderの計算結果をテキスチャに書き込むメソッドです。
https://registry.khronos.org/OpenGL-Refpages/gl4/html/imageStore.xhtml

Discussion