GLSL MATを使うと、TouchDesignerにカスタムマテリアルを書き込んだり、インポートしたりすることができます。GLSLシェーダーにコンパイルエラーがあると、青/赤のチェッカーボードエラーシェーダーが表示されます。
シェーダーの書き方については、Write a GLSL Material、GLSL Categoryの章を参照してください。
シェーダーをコンパイルするGLSLのバージョンを設定します。
- 1.20 / glsl120
- 3.30 / glsl330
- 4.00 / glsl400
- 4.10 / glsl410
- 4.20 / glsl420
- 4.30 / glsl430
- 4.40 / glsl440
- 4.50 / glsl450
- 4.60 / glsl460
このDATを使って、#extensionのようなプリプロセッサ・ディレクティブをシェーダーの最初に配置します。これはシェーダーの最初の行である必要があり、TouchDesignerはシェーダーの最初にユニフォームや関数を宣言するコードを追加します。
バーテックス・シェーダー・コードを格納するDATへのパスを設定します。
ピクセルシェーダのコードを格納するDATへのパスを設定します。
これは、コンパイルされたGLSLシェーダで宣言された(そして使用された)すべてのユニフォームを読み込み、ユニフォームパラメータのさまざまなネームフィールドを埋めます。
ユニフォーム・パラメーターのネーム・フィールドがすべて消去されます。
ジオメトリシェーダのコードを格納するDATへのパスを設定します。
ジオメトリシェーダに入力されるジオメトリの種類を設定します。
- Points / points
- Lines / lines
- Triangles / triangles
ジオメトリシェーダが出力するジオメトリの種類を設定します。
- Points / points
- Line Strip / linestrip
- Triangle Strip / tristrip
Geometry Shaderが出力する最大の頂点数を設定します。
両面カラーリングのサポートを有効にします。この機能を有効にすると、VertexシェーダやGeometryシェーダがgl_FrontColor、gl_BackColor、gl_FrontSecondaryColor、gl_BackSecondaryColorに書き込むことができ、Pixelシェーダのgl_Colorとgl_SecondaryColorには、プリミティブの表側と裏側のどちらがカメラに向いているかに応じて、正しい色が配置されます。これを無効にすると、gl_FrontColorとgl_FrontSecondaryColorに入れられた値は、プリミティブのどちらの面がカメラに向いているかにかかわらず、gl_Colorとgl_SecondaryColorに渡されます。
このマテリアルは、このパラメータで参照されているGLSLマテリアルのすべてのテクスチャとユニフォームを継承します。
ライティングスペースを、現在のデフォルトのワールドスペースから、TouchDesigner 088で使用されていたレガシーカメラスペースに切り替えることができます。
- World Space / worldspace
- Camera Space (Legacy 088 shaders) / cameraspace
これは、GLSLプログラムがこのTOPからのサンプリングに使用するサンプラー名です。サンプラーは、TOPと同じ次元で宣言する必要があります(2D TOPの場合はsampler2D、3D TOPの場合はsampler3D)。
上記のサンプラー名で参照されるTOPです。
共通 Texture Sampling パラメータの章を参照してください。
- Hold / hold
- Zero / zero
- Repeat / repeat
- Mirror / mirror
- Hold / hold
- Zero / zero
- Repeat / repeat
- Mirror / mirror
- Hold / hold
- Zero / zero
- Repeat / repeat
- Mirror / mirror
- Nearest / nearest
- Linear / linear
- Mipmap Linear / mipmaplinear
- Off / off
- 2x / 2x
- 4x / 4x
- 8x / 8x
- 16x / 16x
ユニフォームの名前を設定します。
ユニフォームに割り当てる値です。ユニフォームが float の場合は、4つのエントリーのうち最初のエントリーが使用され、ユニフォームが vec2 の場合は、最初の2つのエントリーが使用されるといった具合です。
- Value / value0x
- Value / value0y
- Value / value0z
- Value / value0w
CHOP Uniformsでは、CHOPチャンネルデータを配列としてGLSLシェーダに送ることができます。使用する配列タイプによっては、シェーダーに送信できる値の数が制限されることがあります。ユニフォーム配列を使用している場合は、組み込み変数$SYS_GFX_GLSL_MAX_UNIFORMSを使って、シェーダーに渡せる値の数を知ることができます。現在のGPUはvec4ベースのユニフォーム配列であるため、最大の配列サイズは$SYS_GFX_GLSL_MAX_UNIFORMS / 4となります。SYS_GFX_MAX_TEXTURE_BUFFER_SIZEは、この最大値を教えてくれます。テクスチャバッファの最大値は、テクスチャバッファごとのものであり、複数のテクスチャバッファを持っていても、各配列の最大値からは外れません。
ユニフォーム名を設定します。
ユニフォームの種類です。1つのユニフォームで最大4つのチャンネルをGLSLシェーダに送ることができます。1チャンネルのCHOPではユニフォームをfloatと宣言し、2チャンネルのCHOPではユニフォームをvec2などと宣言します。データはユニフォームの中でインターリーブされます。例えば、.x成分は1つ目のチャンネル、.yは2つ目のチャンネル、といった具合です。
- float / float
- vec2 / vec2
- vec3 / vec3
- vec4 / vec4
GLSLシェーダに送信されるチャンネルのCHOPを設定します。
GPUでは、ユニフォームアレイやテクスチャバッファを使って、配列データをGLSLシェーダに送ることができます。ユニフォーム配列は、データの保存に非常に限られたメモリを使用し、他の通常のユニフォーム値と同様にアクセスできます(ただし、配列内での話です)。テクスチャバッファは、テクスチャメモリとテクスチャフェッチを使ってデータにアクセスし、より多くの値を保存できます。
いずれの場合も、インデックスは、値を取得したい配列/バッファの0ベースのインデックス(整数)です。
- Uniform Array / uniformarray
ユニフォーム配列は、次のように宣言して使用します。// Array type is vec3, and it takes up to 20 values from the CHOP
uniform vec3 arrayName[20];
// Grab the value at index 10
vec3 aValue = arrayName[10];
- Texture Buffer / texturebuffer
テクスチャバッファは以下のように宣言され、使用されます。// A texture buffer will also be a vec4, but only the first 1, 2, 3 or 4 component will contain data, depending on the type you choose.
uniform samplerBuffer arrayName;
// sampler the value at index 10. It be default returns a vec4, so change it to a vec3 in thisexample using .xyz
vec3 aValue = texelFetch(arrayName, 10).xyz;
CHOPからどのチャンネルを使用してアレイを埋めるかを選択できます。スコープされた最初の4チャンネルまでが使用されます(ユニフォームアレイのタイプによって異なります)。
- * / *
Relative Xformsは、ポイントやベクトルをある空間から別の空間に変換する行列です。
ユニフォーム名を設定します。ユニフォームはmat4として宣言する必要があります。
マトリックスに割り当てる値です。有効な指定方法については、Matrix Parameters の章を参照してください。
ユニフォーム名を設定します。ユニフォームはmat4として宣言する必要があります。
Transform from this COMPs world transform.
設定したCOMPsのワールドトランスフォームから変換します。
設定したCOMPsのワールドトランスフォームへ変換します。
参照:共通 Deform ページ
参照:共通 Common ページ