ビューポートにレンダリングするフラグメントおよびフラグメント グラフを記述する

はじめに

フラグメントは、高レベル言語におけるプロシージャまたは関数の定義のことです。フラグメントには入力および出力が挿入されていて、入力に対して何らかのプロシージャが実行され、出力が生成されるようになっています。

シェーディング フラグメントを記述するか、一連のコマンドを実行するスクリプト フラグメントを記述して、パラメータや状態の設定、さまざまなターゲットのクリア、またはさまざまなターゲットへのレンダリングを行うことができます。

その後、フラグメントをフラグメント グラフに接続できます。フラグメント グラフにコマンドは含まれていません。フラグメント グラフが行うことは、一連のフラグメントをインスタンス化して、これらの間の接続を記述することです。

1 つの .xml ファイルには 1 つのスクリプト フラグメントまたはフラグメント グラフを保存できます。

Maya をインストールすると、一連のスクリプト フラグメントおよびフラグメント グラフの xml ファイルがインストール フォルダの bin/ScriptFragment フォルダに格納されます。これらのフラグメントおよびフラグメント グラフは、ビューポート 2.0 にレンダリングする場合に使用されます。

Default.xml は、Viewport 2.0 での Maya のレンダリング方法を示すメインのフラグメント グラフです。このフラグメント グラフを実行すると、ビューポートにシーンが表示されます。

これにより、さまざまなフラグメントおよびフラグメント グラフが接続されます。たとえば、HoldOutPasses などのフラグメント グラフを接続する Maya_3d_Renderer、mayaUIDrawPass や Maya_SSAO などのフラグメントとフラグメント グラフを接続する Maya_PostEffects などです。

これらの xml ファイルは、フラグメント レンダラ用の独自のスクリプト フラグメントおよびフラグメント グラフを記述する例として使用できます。

独自のフラグメント レンダラを作成する場合は、既存の Maya フラグメントを再利用し、カスタマイズするフラグメントの xml のみを記述することができます。たとえば、独自のカスタム モーション ブラー パスを作成する場合は、モーション ブラー フラグメントを記述して既存の Maya フラグメントと結合することができます。

この操作を実行するには、次のような手順を実行します。

  1. 既存の Maya フラグメント/フラグメント グラフの .xml ファイルを新しいフォルダにコピーします。
  2. カスタマイズするフラグメント/フラグメント グラフを修正して、名前を変更します。

    注: bin/ScriptFragment のファイルを直接修正することはお勧めしません。誤って Maya を破損することがあります。したがって、まずフラグメント ファイルを新しいフォルダにコピーすることをお勧めします。

  3. (手順 2 で)修正したフラグメント/フラグメント グラフを指すようにメイン フラグメント グラフ(default.xml)を修正し、メイン フラグメント グラフに新しい名前を付けます。

プロシージャの中にはスクリプト フラグメントとして表現するのが困難なものがあり、それらは Maya によってハードコードされた C++ プロシージャ フラグメントとして提供されています。C++ プロシージャ フラグメントはフラグメント グラフ内のスクリプト フラグメントと結合することができます。

ヒント: Maya のレンダラを再現するには、まず次のような一連の操作を行って MRenderOverride を初期化します。

class FragmentRenderOverride(omr.MRenderOverride):

   def __init__(self, name):
       self.operatioIndex = 0
       self.operations =  [omr.MSceneRender("myRendererSameAsMaya", “default”),
                          omr.MHUDRender(),
                          omr.MPresentTarget("present")]

default は、オーバーライドされていない場合に Maya が使用するレンダー フラグメントの名前です。default.xml は Maya インストール フォルダの bin/ScriptFragment フォルダ内にあります。

default では、ビューティ パスが描画され、UI、シャドウ マップ、HUD など、MSceneRender の要素となるものは含まれません。

API クラスおよびインタフェース

フラグメント レンダラを作成するための API エントリ ポイントは次のとおりです。これらのインタフェースの使用例については、Developer Kit の viewRenderOverrideFromFragments プラグインおよび「フラグメント レンダラ サンプル プラグインを作成する」を参照してください。

フラグメントおよびフラグメント グラフ XML の定義

フラグメントの各部の説明

例については maya_DepthPrePass.xml を参照してください。

すべてのフラグメントは複合要素 fragment に含まれています。

<fragment  uiName="maya_DepthPrePass" name="maya_DepthPrePass" type="sceneEffect" class="ScriptFragment" version="1.0" feature_level="30" >

フラグメントの定義には次の要素も含まれています。

フラグメント グラフの各部の定義

上記のように、さまざまなフラグメントおよびフラグメント グラフを相互に接続して単一のフラグメント グラフを形成できます。

例については Maya_PostEffects.xml を参照してください。

すべてのフラグメントは次のように複合要素 fragment_graph に含まれています。

<fragment_graph  name="Maya_PostEffects" ref="Maya_PostEffects" class="FragmentGraph" version="1.0" feature_level="0" >

fragment_graph の定義には次の要素も含まれます。