コンストラクション ヒストリとツィーク
 
 
 

このセクションの説明は、ディペンデンシー グラフについて基本的な知識があることを前提としています。詳細については、 ディペンデンシー グラフ(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 ノードを挿入します。これにより、操作の順序が維持されます。