マテリアル継承

パーティクル フローは、イベントでのマテリアル使用法に特定の制限を課します。特に、標準の[マテリアル](Material)オペレータを介して、または[シェイプ インスタンス](Shape Instance)オペレータのパラメータとしてイベントに割り当てられたマテリアルは、パーティクルと一緒に 1 つのイベントから次のイベントに移動しません。これにより、パーティクル フロー システムの全体的な柔軟性が減少するので、次のような回避策が必要になります。[マテリアル](Material)オペレータをグローバル イベントに割り当てるか、[マテリアル](Material)オペレータを影響されるすべてのイベントに割り当てます。

パーティクル フローでは、イベント機能が強化されており、システムでの全体的なマテリアルの処理方法が改善されています。現行バージョンでもパーティクルがマテリアルをイベント間で移動することは許可されませんが、マテリアルの割り当てと継承を単純化するツール一式が提供されています。

パラメトリック マテリアルとシンセティック マテリアル

パーティクル フロー イベントへのマテリアルの割り当てにおいて、マテリアルは、パラメトリックまたはシンセティックとして分類されます。

標準の[マテリアル](Material)オペレータを使用するときは、マテリアルがパラメトリックです。オペレータには、マテリアル エディタからマテリアルを定義するボタンがあります。このマテリアルは、パーティクルがイベントに存在している間、パーティクルによって使用される[マテリアル](Material)オペレータを持つイベントへのリファレンスとして渡されます。これはパラメトリック マテリアルであり、[マテリアル](Material)オペレータのパラメータとして割り当てられます。

たとえば、標準の[シェイプ インスタンス](Shape Instance)オペレータを使用するときは、マテリアルがシンセティックです。オペレータの[マテリアルを取得](Acquire Material)がオンの場合、参照ジオメトリに割り当てられているマテリアルが取得されて現在のイベントに割り当てられます。さらに、オペレータがオブジェクトのグループをパーティクル ジオメトリ オブジェクトとして参照する場合、オペレータはすべてのマテリアルをそのグループから収集し、イベントに割り当てる新しいマルチ/サブ オブジェクト マテリアルを作成します。この場合、新しいマテリアルが他のマテリアルから統合されます。

グローバル イベントのタイトル領域をクリックすると、パーティクル フロー パーティクル システム全体に関連するパラメータが表示されます。ローカル イベントのタイトル領域をクリックすると、マテリアルの処理に関連するツールとイベントに割り当てられたマテリアルが表示されます。

簡単な例のファイル MaterialInheritance01.max (ParticleFlowSamples フォルダのチュートリアル ファイルに含まれる)を開き、マテリアル ツールがどうのように動作するかを確認します。シーンには、4 つのイベントを持つ簡単なパーティクル フロー システムがあります。[マテリアル](Material)オペレータは含まれていません。ビューポートのパーティクルのカラーは、各イベントの異なる[表示](Display)オペレータによって定義されるので、アニメーションを再生するときに、カラーの変化によってパーティクルがイベントをいつ切り替えるのかが分かります。

ここで、[マテリアル 固定](Material Static)オペレータを[イベント 01](Event 01)に追加して選択し、マテリアル エディタ(最初のスロット)からマルチ/サブ オブジェクト マテリアルをインスタンスとして(既定のモード)割り当て、マテリアル固定パラメータを調整して、サブマテリアルを循環します。イベント マップは次のようになります。

ここで、アニメーションを再生すると、最初はすべてのパーティクルのカラーが異なりますが、その後、異なるカラーにブロックとして切り替わることが確認できます。これは、次の 3 つのイベントに[マテリアル](Material)オペレータがないからです。したがって、ビューポート内の表示カラーが使用されます。

[イベント 01](Event 01)のタイトル バーをクリックして[イベント 01](Event 01)のパラメータを表示し、[ダウンストリーム マテリアル](Downstream Materials)ボタンをクリックします。パーティクル フローは、パーティクル フローで 3 つのイベントがマテリアルによって更新されたことをレポートします。アニメーションを再び再生します。パーティクルのカラーはすべてのイベントで一貫しています。また、他のイベントを選択すると、[現在のマテリアル](Current Material)ボタンが最初のイベントと同じマテリアルを示していることが確認できます。

次に、より複雑な例 MaterialInheritance02.max (ParticleFlowSamples フォルダのチュートリアル ファイルに含まれる) について説明します。このファイルには、共通のストリームに合流するパーティクル ストリームが 2 つ含まれています。開始イベントは、[マテリアル 固定](Material Static)オペレータによって定義された異なるマテリアルを持ちます。パーティクルが 2 番目のイベント([イベント 02](Event 02))に移動すると、マテリアルを失います。この状態で何ができるかについて説明します。

[イベント 01](Event 01)を選択し、[ダウンストリーム マテリアル](Downstream Materials)ボタンをクリックします。アニメーションを再生して、[イベント 02](Event 02)、[イベント 03](Event 03)、および[イベント 04](Event 04)に割り当てられているマテリアルを確認できます。[イベント 01](Event 01)の下流にあるすべてのイベントは、緑のマテリアルを継承していることが分かります。[イベント 05](Event 05)からのパーティクルも緑のマテリアルを取得しているので、この方法ではうまくいきません。この状態を何らかの方法で解決する必要があります。目標は、2 つの発生イベントから発生したパーティクルがそれぞれの元のマテリアルを保持できるようにすることです。

最初に、次の操作を試してください。[イベント 05](Event 05) (青いマテリアルを持つ開始イベント)を選択し、[ダウンストリーム マテリアル](Downstream Materials)ボタンをクリックします。[イベント 01](Event 01)でこのボタンをクリックしたときに、[3 つのイベントのマテリアルが更新されました](Materials in 3 Events were updated)というレポートが表示されたことを覚えているかもしれません。[イベント 05](Event 05)の場合は、[すべてのイベントに有効なマテリアルがあります](All Events have valid materials)という別のレポートが表示されます。このレポートは、下流のイベント内のマテリアルは変更されていないことを示しています。アニメーションを再生したり、下流のイベントを確認すると、これらのイベントは[イベント 01](Event 01)からの緑のマテリアルを保持していることが分かります。なぜでしょうか。

[ダウンストリーム マテリアル](Downstream Materials)ボタンをクリックすると、プラグインが現在のイベントの下流にあるすべてのイベントを見つけ、下流の各イベントに対して、マテリアルの更新をトリガします。イベント内のマテリアルは、マテリアル継承パラメータに応じて更新されます。継承タイプが[なし](None)の場合、またはイベントにマテリアルを持つ独自のオペレータ([マテリアル](Material)オペレータ、またはマテリアルを取得している[シェイプ インスタンス](Shape Instance)オペレータ)が含まれている場合は、イベント内のマテリアルがすでに定義されているので、イベントはマテリアルを更新しません。継承タイプが[最も高い優先順位](Highest Priority)に設定されている場合は、イベントは上流のイベント([イベント 02](Event 02)の上流イベントは[イベント 01](Event 01)と[イベント 05](Event 05)です)を検出して、[マテリアル優先順位](Material Priority)の値をチェックし、優先順位の最も高いイベントからマテリアルを継承します。この場合、[イベント 01](Event 01)と[イベント 05](Event 05)の両方に同じマテリアル優先順位の 0 (ゼロ)が設定されています。したがって、結果はあいまいです。[イベント 02](Event 02)は見つけた最初の上流イベントを選択できます。[イベント 05](Event 05)からマテリアル継承を適用するには、[イベント 05](Event 05)の[マテリアル優先順位](Material Priority)の値を 1 に変更し、[ダウンストリーム マテリアル](Downstream Materials)ボタンをクリックします。これで、下流のイベントが青いマテリアルを持つことが確認できます。

上記で述べた目標はまだ達成されていません。[イベント 01](Event 01)からのパーティクルは、[イベント 02](Event 02)に移動するとそのマテリアルを緑から青に変えます。したがって、何らかの操作を行う必要があります。

継承タイプの最後のオプションは、[マテリアルを結合](Combine Materials)です。このタイプを使用して、マテリアルを下流に適切に伝えます。[イベント 02](Event 02)を選択し、継承を[マテリアルを結合](Combine Materials)に設定します。ここで、[現在のイベントのマテリアル](Current Event Material)ボタンをクリックし、上流から結合されたマテリアルを取得します。ここで、[イベント 02](Event 02)の現在のマテリアルを見ると、そのマテリアルは緑または青のマテリアルではなく、「マテリアル #10」のようなラベルが付いた新しいマテリアルになっています。このマテリアルをマテリアル エディタにドラッグすると、これが「青」という名前が付いた単一のサブマテリアルを持つマルチ/サブ オブジェクト マテリアルであることが分かります。

なぜでしょうか。[イベント 01](Event 01)と[イベント 05](Event 05)の両方は標準のマテリアルを持ちます。[イベント 05](Event 05)はイベント設定に応じてより高い優先順位を持ちます。これらのマテリアルは標準マテリアル(マルチ/サブ オブジェクト マテリアルとは異なります)であるため、これらのマテリアルはシンセティック マルチ/サブ オブジェクト マテリアルの最初のスロットを[イベント 02](Event 02)に割り当てようとします。しかし、[イベント 05](Event 05)が優先順位がより高いので優先されます。

マテリアルの衝突を解決するには、[イベント·01](Event·01)および[イベント 05](Event 05)でいずれかのマテリアルを調整する必要があります。次のその方法を説明します。[イベント 05](Event 05)の[マテリアル 固定](Material Static)オペレータを選択し、[サブ マテリアル ID オフセット](Sub-Mtl ID Offset)の値を(既定の値 0 から) 1 に変更します。[マテリアル ID を割り当て](Assign Material ID)オプションが自動的にオンになりますが(理由は後述します)、ビューポートでマテリアル効果を見るには、[ビューポート内で表示](Show In Viewport)もオンにする必要があります。また、オペレータのダイナミック名が[マテリアル 固定 02 (青)](Material Static 02 (Blue))から[マテリアル 固定 02 (青 >> 1)](Material Static 02 (Blue >> 1))に変更されていることに注意してください。これは、ID オフセットが適用されたことを示します。

[イベント 05](Event 05)を選択し、[現在のマテリアル](Current Material)ボタンのマテリアルを確認します(マテリアル エディタにドラッグします)。このマテリアルは、2 つのサブマテリアルを持つ真のマルチ/サブ オブジェクト マテリアルです。最初のスロットは空で、2 番目のスロットは青いマテリアルでいっぱいになっています。ここで、衝突なしに、[イベント 01](Event 01)および[イベント 05](Event 05)からマテリアルを結合することができます。

[イベント 02](Event 02)を選択し、[現在のマテリアルを更新](Update Current Material)ボタンをクリックします。[現在のマテリアル](Current Material)ボタンでマテリアルを確認します。結合されたマテリアルは、2 つのサブマテリアル(緑と青)を持っています。[ダウンストリーム マテリアル](Downstream Materials)ボタンをクリックして、このマテリアルを[イベント 03](Event 03)と[イベント 04](Event 04)に伝えます。

ここで、アニメーションを再生すると、[イベント 01](Event 01)から発生したパーティクルに不一致があることが分かります。パーティクルが[イベント 01](Event 01)から移動すると青になります。この問題を解決するには、マテリアル固定 01 (緑)で[マテリアル ID を割り当て](Assign Material ID)と[ビューポート内で表示](Show In Viewport)をオンにする必要があります。緑のマテリアルはサブマテリアルを持ちませんが、サブマテリアル インデックスが必要です。後でパーティクルがイベントから移動すると、パーティクルはマルチ/サブ オブジェクト マテリアルによってコントロールされるからです。

インタフェース

このセクションでは、イベント タイトル バーをクリックしてアクセスするマテリアル継承コントロール、およびマテリアルを使用するオペレータに追加される新しいパラメータである[サブ マテリアル ID オフセット](Sub-Mtl ID Offset)について説明します。



[マテリアルの継承](Material Inheritance)領域

継承
マテリアルを上流のイベントに基いて現在のイベントに割り当てる方法、および現在のイベントが下流のマテリアルに与える影響を定義します。ドロップダウン リスト ボックスから選択します
  • なし(None) イベントは上流のイベントからマテリアルを継承しません。
  • 最も高い優先順位(Highest Priority) 直近にある上流のイベントすべてから優先順位の最も高いイベントを選択し、このイベントからマテリアルを取得します。
  • マテリアルを結合(Combine Materials) 上流のイベントのマテリアルからマルチ/サブ オブジェクト マテリアルを統合します。マテリアル間およびサブマテリアル間で衝突がある場合、優先順位が最も高いエンティティが優先されます。
マテリアル優先順位(Material Priority)
[継承:](Inherit:)の[最も高い優先順位](Highest Priority)および[マテリアルを結合](Combine Materials)オプションで使用される優先順位の値を設定します(上記参照)。
注: イベントにマテリアルタイプのオペレータが含まれている場合、イベントは上流のイベントからマテリアルを継承しません。継承タイプのオプションは関係ありません。

[マテリアルを更新](Update Material)領域

この領域には、パーティクル フロー イベントのマテリアルを設定するツールが含まれています。

現在のイベントのマテリアル(Current Event Material)
上流のイベントからマテリアルを取得して、現在のイベントのマテリアルを更新します。
ダウンストリーム マテリアル
下流のイベントすべてのマテリアルを更新します。
すべてのイベントのマテリアル(Materials In All Events)
シーンのすべての PFlow システムにあるすべてのイベントのマテリアルを更新します。
現在のマテリアル(Current Material)
イベントで使用されるマテリアルを表示します。これは、読み込み専用のプロパティです。マテリアルをこのボタンからマテリアル エディタにドラッグして確認することができますが、マテリアルをマテリアル エディタからこのボタンにドロップすることはできません。

追加のパラメータ: [マテリアル](Material)/[発生グループ](Birth Group)/[シェイプ インスタンス](Shape Instance)オペレータ

サブ マテリアル ID オフセット(Sub-Mtl ID Offset)
マルチ/サブ オブジェクト マテリアルを使用したマテリアル継承を使用すると、[マテリアル](Material)オペレータ、[発生グループ](Birth Group)オペレータ、[シェイプ インスタンス](Shape Instance)オペレータがこの値を[マテリアル ID](Material ID)の値に追加して、サブマテリアル ID を作成します。パーティクル フローはこのサブマテリアル ID を使用して、マテリアルのサブマテリアル ID に基づいて、どのマテリアルのサブマテリアルを継承してイベントのパーティクルに適用するのかを決定します。