まとめ
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() 関数と mriTextureLod() 関数を使用すると、次のように実際のテクスチャ値を検索できます。
#version 150
//! include | Texture.glslh
vec4 customCubemapLookup(cubemapToken token, vec3 coords, float lod)
{
return mriTextureLod(token, coords, lod);
}
私たちはそれを聞いて申し訳ございません
理由をお聞かせください