Version: Unity 6.0 (6000.0)
言語 : 日本語
コンピュートシェーダーの概要
コンピュートシェーダーでの HLSL と ShaderLab の使用

コンピュートシェーダーの作成

シェーダーアセット と同様に、コンピュートシェーダーアセットはプロジェクト内のファイルで、拡張子は .compute です。DirectX 11 スタイルの HLSL 言語で記述し、最低限の数の #pragma コンパイラーディレクティブを使用して、コンピュートシェーダーカーネルとしてどの関数をコンパイルするかを指示します。

プラットフォームがコンピュートシェーダーをサポートしているか確認する

コンピュートシェーダーのサポートは、ランタイムに SystemInfo.supportsComputeShaders を使用して照会できます。

コンピュートシェーダーアセット

こちらは、コンピュートシェーダーファイルの基本例です。出力テクスチャを赤で塗りつぶします。

// test.compute

#pragma kernel FillWithRed

RWTexture2D<float4> res;

[numthreads(1,1,1)]
void FillWithRed (uint3 dtid : SV_DispatchThreadID)
{
    res[dtid.xy] = float4(1,0,0,1);
}

言語は標準の DX11 HLSL で、追加の #pragma kernel FillWithRed ディレクティブを使用します。ひとつのコンピュートシェーダーアセットファイルには最低ひとつの実行可能な compute kernel を加える必要があり、その関数は #pragma directive ディレクティブで指定します。複数の #pragma kernel 行を追加することで、ファイルに複数のカーネルを追加できます。

複数の#pragma kernel 行を使用する場合は、#pragma kernel ディレクティブと同じ行への // text によるコメントの追加は許可されていないことに注意してください。使用すると、コンパイルエラーの原因となります。

#pragma kernel 行は任意で、カーネルをコンパイルしている間に複数のプリプロセッサーマクロを後に続けて定義することが可能です。以下に例を示します。

#pragma kernel KernelOne SOME_DEFINE DEFINE_WITH_VALUE=1337
#pragma kernel KernelTwo OTHER_DEFINE
// ...
コンピュートシェーダーの概要
コンピュートシェーダーでの HLSL と ShaderLab の使用