Q100410: カスタムGLSLでテクスチャを渡して生のテクスチャルックアップ呼び出しを行う方法

まとめ

Mari用のカスタムシェーダー、レイヤー、またはノードXMLを作成する際、カスタムGLSL関数を別のファイルに保持しておく方が便利な場合があります。これらの関数を別のファイルに格納する場合は、関数が独自の処理を実行できるように、キューブマップテクスチャルックアップを使用する必要があります。

この記事では、 Mariで生のテクスチャ ルックアップ呼び出しを行う方法について説明します。これにより、同じ呼び出しがさまざまなシェーダ モード間およびMariの将来のリリース間で一貫して機能するようになります。

詳細情報

これはMariの公式機能ではありませんが、カスタムシェーダーを開発する際に、以前はカスタムノードのimagecube属性からsamplerCubeを取得できました。これにより、過去のMariバージョンでは、GLSLのtexture()関数を利用した生のテクスチャルックアップを作成できました。

Mari 3.4v1 および 4.1v1 では、 Mariのシェーダ システムの内部的な改善により、 Mariテクスチャ ルックアップに間接変数を使用するようになりました。

必要なこと

これらの変更を回避し、生のテクスチャ ルックアップを作成するには、次の手順を実行する必要があります。

  1. XMLにTexture.glslhを含める
  2. テクスチャサンプラーをcubemapTokenとして宣言します。
  3. GLSLでtexture()textureLod()が使用されるのと同じ方法でテクスチャ検索を行うために、 mriTexture()またはmriTextureLod()を使用します。

開発者の例

ノード XML ファイルの呼び出し側では、以下のようにしてカスタム GLSL 関数を呼び出すことができます。

...
<Attribute Name="Cubemap" PrettyName="Image" Type="imagecube"></Attribute>
...
textureSampleColor = customCubemapLookup( $Cubemap, coords, lod ); 


次に、GLSL ヘッダー ファイルで、 cubemapToken引数を受け取るカスタム関数を次のように宣言できます。

//! include | Texture.glslh
vec4 customCubemapLookup(cubemapToken cubemapTexture, vec3 dir, float lod);


さらに、GLSLソースコードファイル内で、cubemapToken引数を受け取るカスタム関数を定義できます。mriTexture mriTexture()関数とmriTextureLod()関数は、実際のテクスチャ値を参照するために使用できます。例:

#version 150
//! include | Texture.glslh
vec4 customCubemapLookup(cubemapToken token, vec3 coords, float lod)
{
    return mriTextureLod(token, coords, lod);
}



さらなる支援

問題が発生した場合は、サポート チケットを作成し、この記事で要求されている情報を提供してください。
Q100090: Mari問題を報告する際にサポートに送信する情報

サポート チケットを開く方法の詳細については、次の記事を参照してください。
Q100064: サポートチケットを発行する方法

    私たちはそれを聞いて申し訳ございません

    理由をお聞かせください