まとめ
Mari用のカスタムシェーダー、レイヤー、またはノードXMLを作成する際、カスタムGLSL関数を別のファイルに保持しておく方が便利な場合があります。これらの関数を別のファイルに格納する場合は、関数が独自の処理を実行できるように、キューブマップテクスチャルックアップを使用する必要があります。
この記事では、 Mariで生のテクスチャ ルックアップ呼び出しを行う方法について説明します。これにより、同じ呼び出しがさまざまなシェーダ モード間およびMariの将来のリリース間で一貫して機能するようになります。
詳細情報
これはMariの公式機能ではありませんが、カスタムシェーダーを開発する際に、以前はカスタムノードのimagecube属性からsamplerCubeを取得できました。これにより、過去のMariバージョンでは、GLSLのtexture()関数を利用した生のテクスチャルックアップを作成できました。
Mari 3.4v1 および 4.1v1 では、 Mariのシェーダ システムの内部的な改善により、 Mariテクスチャ ルックアップに間接変数を使用するようになりました。
必要なこと
これらの変更を回避し、生のテクスチャ ルックアップを作成するには、次の手順を実行する必要があります。
- XMLにTexture.glslhを含める
- テクスチャサンプラーをcubemapTokenとして宣言します。
- 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: サポートチケットを発行する方法
私たちはそれを聞いて申し訳ございません
理由をお聞かせください