Softimage カスタム シェーダについて

 
 
 

Softimage でのシェーダの統合には、シェーダ コードに必要な一連のパラメータの登録と、レンダラでの接続(mental ray かサードパーティ レンダラかは関係ない)が含まれます。 以前は SPDL ファイルを作成してこの処理を行っていましたが、その際は各プロパティ セットとパラメータの GUID を生成し、Softimage で各 SPDL ファイルを登録した後、SPDL からプリセットを生成する作業が必要でした。

v9.0(2011)では、Softimage はパラメータの登録とレンダラの関連付けをシェーダ定義という軽量なメカニズムによってサポートするようになりました。 シェーダ定義は、一連のパラメータを定義し、1 つまたは複数のレンダラをオプションおよび属性と関連付けることにより、レンダ ツリーにシェーダ ノードをビルドする方法を Softimage に伝えます。 これらの定義は以前のプリセットに取って代わり、SPDL を使用しない、つまりダイナミックなカスタム シェーダを統合することができます。

Softimage でのシェーダ定義のしくみ

UI にレンダ ツリーをビルドする場合、Preset Manager からレンダ ツリー ワークスペースにプリセットをドラッグします。 シェーダ定義が作成されたら、Preset Manager に ShaderDef.DisplayName、ShaderDef::GetDisplayName、ShaderDef::PutDisplayName のうちどれをどこに(ShaderDef.Category、ShaderDef::GetCategory、または ShaderDef::PutCategory)表示するかが指示されます。次に、シェーダが実際にインスタンス化されると、Softimage はシェーダ ノードをその入力および出力パラメータ(データ タイプ、接続に関する制限、デフォルト値など)とともにビルドします。シェーダはインスタンス化されるときのみジャストインタイム方式でビルドされるため、極めてダイナミックになります。

シェーダ定義を作成する方法はいくつかあります。

  • 自己インストール プラグイン シェーダ定義を記述する。

    この方法でビルドされたシェーダ定義は、プラグイン ベースの定義とみなされます(ShaderDef.PluginBased または ShaderDef::GetPluginBased は true を返します)。これはシェーダ定義を作成する最も一般的な方法です。

  • 登録されたシェーダ パーサがシェーダ定義を作成するために使用できるテキスト ファイルを提供する

    シェーダ パーサでは、シェーダ定義をバッチで作成できます。これは、ファイル形式を定義し、これらのファイルを読み取るパーサを記述し、ファイルを使用してシェーダ定義を作成する方法です(「シェーダ言語パーサ定義を作成する」を参照)。 Softimage には、CGFX ファイルおよび HLSL ファイルのための 2 つのリアルタイム シェーダ パーサが用意されています。 シェーダ パーサでビルドされたシェーダ定義は、パーサ ベースの定義とみなされます(ShaderDef.ParserBased または ShaderDef::GetParserBased は true を返します)。

  • (永続的ではなく)一時的なシェーダ定義を作成します

    これには、XSIFactory.CreateShaderDef または Factory::CreateShaderDef メソッドを使用します。このシェーダ定義は永続しません。処理中にビルドされたシェーダ定義は、本来、パーサ ベースでもプラグイン ベースでもありませんが、ShaderDef.ParserBased または ShaderDef::GetParserBased は true を返します。さらに、ShaderDef.DefinitionPath または ShaderDef::GetDefinitionPath は空です。