コンストラクション ヒストリと微調整

このセクションの説明は、ディペンデンシー グラフについて基本的な知識があることを前提としています。詳細については、ディペンデンシー グラフ(DG)ノードを参照してください。

ポリゴン メッシュで実行できる操作はすべて、作成、編集、検索という 3 つの基本タイプにまとめることができます。メッシュの作成と検索は比較的単純ですが、編集は、コンストラクション ヒストリ、微調整、ディペンデンシー グラフの範囲内でコンストラクション ヒストリと微調整が動作する方法のため複雑になります。

コンストラクション ヒストリ

コンストラクション ヒストリは、メッシュ上で実行されたアクションのバックログを提供します。DG でのコンストラクション ヒストリの実装は固有です。Maya のすべてのオブジェクトでは、DG ノードの 1 つの直線チェーンを、オブジェクトのノードから上流に引くことができます。このチェーンが、オブジェクトのコンストラクション ヒストリです。ヒストリ チェーンの最終ノードは、常にヒストリがアクションを記録しているオブジェクトを表します。チェーンの先頭には隠れた中間ノードがあり、ヒストリがメッシュ上で実行されたアクションの記録を最初に始めたときのノードの初期状態を表します。

メッシュの操作は、ノードの状態に影響する以下の要因によって複雑になることがあります。

コンストラクション ヒストリが存在するということは、メッシュ ノードから上流にモディファイア(modifier)ノードのチェーン、つまりヒストリ チェーンが存在することになります。ヒストリ チェーンの各モディファイア ノードは、inMesh アトリビュートと outMesh アトリビュートで接続され、これを通してメッシュ データがチェーンの下に流れます。DG 評価中は、ヒストリ チェーンの最上位の outMesh が、下位のそれぞれのモディファイア ノードにメッシュを渡し、それぞれがモディファイアを適用します。メッシュが、チェーンの末尾にある実際のメッシュ ノードに達すると、モディファイア済みメッシュがノードに保存され、ノードの前のデータが上書きされます。

API の mutator メソッドでメッシュ ノードを修正すると、特定のメッシュ ノードの inMesh アトリビュートに情報が直接書き込まれます。一部のメソッドはヒストリの影響を受けますが、ヒストリの影響を受けないメソッドもたくさんあります。これに DG 評価プロセスが組み合わさった場合、ヒストリが存在する場合に問題となります。メッシュのすぐ上にあるモディファイア ノードの outMesh からの接続により、メッシュ ノードの inMesh は DG 評価によって上書きされるので、メッシュへの修正内容は破棄されます。

この問題を解決するには、ヒストリが存在する場合、修正を実行するノードを作成し、以下のようにヒストリ チェーンのメッシュ ノードのすぐ上に挿入します。メッシュ ノードのすぐ上のノードは、常にメッシュに加えた最新の変更内容を表します。

コンストラクション ヒストリをオンとオフのどちらに切り替えても、メッシュにコンストラクション ヒストリがあるかどうかと同じようにノードの修正が制限されることはありません。しかし、コンストラクション ヒストリのオン(On) /オフ(Off)の選択に従い、Maya 同様に操作することをお勧めします。このプリファレンスにより、ノードの修正方法と操作後の DG でのノードの表示方法が変更されます。

ヒストリをオンに切り替えると、ヒストリ チェーンの維持を選択したことになります。操作後に生成されるメッシュは、上の図(モディファイア ノードの挿入)のように表示されます。

ヒストリをオフに切り替えると、ヒストリ チェーンを非表示にすることを選択したことになります。この場合、メッシュの修正方法として、以下の 2 つが考えられます。

微調整

微調整とは、座標変換移動による頂点の手動再配置など、ポリゴン コンポーネントに適用する手動での変換のことです。シェイプに微調整が存在すると、ノードでのデータ フローが変化するため、polyShape ノードのインタフェースが複雑になります。変化が急激でなくても、ノードの修正方法に影響が及びます。微調整を使用するにあたっては、操作の順序を維持することが課題になります。

微調整はノードでローカルに格納され、ノードの入力メッシュ(inMesh か cachedInMesh)に適用されます。polyShape ノードの上にノードを挿入した場合(一般的なヒストリ付きのノード)、操作の順序は維持されません。これによって、モディファイア ノードがメッシュのトポロジを変更した場合に、結果としてのメッシュが変更されることがあります。たとえばモディファイア ノードによって、微調整済み頂点を含むエッジが回転された場合、結果としてのエッジの位置は、操作の順序に従って変化することがあります。

この問題は、polyTweak ノードによって解決できます。このノードでは、ローカル 微調整 アトリビュート内に微調整が保存されます。このノードは、メッシュ入力を受け取ると(inputPolymesh アトリビュート)、メッシュに微調整を適用して出力アトリビュートで出力を返します。このノードの問題に対処するには、polyTweak ノードに微調整を抽出し、モディファイア ノードの上に polyTweak ノードを挿入します。これにより、操作の順序が維持されます。