オペレータ スタック(モディファイア スタックまたはコンストラクション ヒストリとも呼ばれる)は、Softimage でのモデリングの基本です。オペレータ スタックとは、オブジェクトに適用されたすべてのオペレータ(デフォーメーションやトポロジ変更など)の履歴で、モデリング用、アニメーション用、およびシェイプ用に分類されます。あるオペレータの出力は次のオペレータの入力となり、オペレータのエフェクトはスタックの上方に向かって継承されます。いつでも前に戻ってオペレータの修正や削除を実行できます。
[フィルタ]メニューの[オペレータ](Operators)をオンにすると、オブジェクトのオペレータ スタックが Explorer に表示されます。Explorer では、オブジェクトの第 1 サブノードの下にオペレータ スタックが表示され、一般的には[ポリゴンメッシュ](Polygon Mesh)、[NURBSサーフェイスメッシュ](NURBS Surface Mesh)、[NURBSカーブ一覧](NURBS Curve List)、[ヌル](Null)などの名前が付いています。
たとえば、プリミティブ ポリゴン メッシュ グリッドを取得し、ツイストを適用した後にランダマイズを適用した場合を例に挙げます。オペレータ スタックには、適用されたオペレータが表示されます。任意のオペレータのプロパティ ページを開き、値を修正できます。変更内容はヒストリに渡され、最終的なオブジェクトに反映されます。
スタック内の任意のオペレータのプロパティ エディタを表示し、そのパラメータを変更できます。
指定したオペレータのプロパティ エディタを開くには、Explorer ビューを使用するか、メイン コマンド エリア内の[選択](Selection)ボタンからの Explorer を使用します。
Schematic または Explorer ビューでオブジェクトを右クリックし、[モデリングプロパティ](Modeling Properties)を選択します。オブジェクトを選択する必要はありません。
3D ビューで[Alt]キー(Linux の場合は[Ctrl]+[Alt]キー)を押しながらオブジェクトを右クリックして[モデリングプロパティ](Modeling Properties)を選択します。この場合も、オブジェクトを選択する必要はありません。
オブジェクトを選択し、[編集]パネルから[編集](Edit) [プロパティ](Properties) [モデリングプロパティ](Modeling Properties)を選択します。
オペレータにより変更される情報の種類に基づいて、オペレータは複数のカテゴリに分類されます。
[ジェネレータ](Generators)は、オブジェクトを作成します。[取得](Get) [プリミティブ](Primitive)メニューから選択できるオペレータや、[作成](Create)の下から選択できるオペレータの多くはこれに属します。たとえば、[ジオメトリ](プリミティブ)、[カーブクリエイション]、[ロフト]、[NURBSをメッシュに]などがあります。
[トポロジ オペレータ](Topology operators)は、ジオメトリを変更します(コンポーネントの追加や削除など)。[修正](Modify)から使用できるオペレータの多くが含まれ、 [カーブのシフト]、[サーフェイスノット挿入]、[ポリゴンのサブディバイド]などが該当します。
[デフォーメーション](Deformations)は、ポイントの位置を変えてオブジェクトの形状を調整します。[デフォーム](Deform)メニューから使用できるオペレータのほか、[コンポーネント移動]オペレータと[エンベロープ]オペレータが含まれます。
コンストラクション ヒストリは、4つの主要な領域、[モデリング](Modeling)、[シェイプ モデリング](Shape Modeling)、[アニメーション](Animation)、および[2 次シェイプ モデリング](Secondary Shape Modeling)に分けることができます。これらのカテゴリにより、オペレータを用途別に分類してコンストラクション ヒストリを整理できます。たとえば、デフォーメーションを適用する際には、オブジェクトの基本ジオメトリを構築する操作(モデリング)、シェイプ アニメーションに使用するシェイプ キーを作成する操作(シェイプ モデリング)、アニメーション エフェクトを作成する操作(アニメーション)、エンベロープ オブジェクトを調整するためのシェイプ キーを作成する操作(2 次シェイプ モデリング)が考えられます。
特定の領域にオペレータを追加するには、モデリング操作を実行する前にコンストラクション モードを選択します(「コンストラクション モードを設定する」を参照)。間違ったモードでオペレータを誤って追加してしまった場合は、正しい領域にオペレータを移動することができます(「オペレータの順序を変更する」を参照)。
作業中は、最終結果(すべての領域のすべてのオペレータの結果)を表示したり、現在のモード(現在の領域とその下位にあるすべてのオペレータの結果)だけを表示できます(「各種領域の結果を表示する」を参照)。
既定では、各ビューに現在のコンストラクション モードとディスプレイ モードに関する情報が表示されます。このフィードバックの表示/非表示は切り替えられます(「現在のモードのフィードバックを取得する」を参照)。
ICE シミュレーションで使用するための、さらに 2 つのコンストラクション領域があります。ICE シミュレーション オペレータを作成すると、これらの領域が自動的に表示されます。コンストラクション領域の詳細ついては、「ICE ツリーとコンストラクション スタック」を参照してください。
4 つの主要コンストラクション領域には、それぞれ異なる用途があります。
[モデリング](Modeling)領域は一番下にある領域です。デフォメーション オペレータとトポロジ オペレータの両方を使用して、オブジェクトの基本的なシェイプやトポロジを定義する場合は、この領域を使用できます。
この領域は、パフォーマンスを向上させるためにフリーズしたい場合があります。[モデリング]領域は、他の領域に影響を及ぼさずにフリーズすることができます(「オペレータ スタックをフリーズする」を参照)。
必要に応じて、モデリング領域にはアニメートされたオペレータを含めることができます。たたし、モデリングをフリーズするとアニメーションは失われます。さらに、スタック内のアニメートされたデフォメーションの上にシェイプ アニメーションが存在する場合は、ポリゴンが相互衝突するときにそのシェイプが「跳ねる」恐れがあります。
[シェイプモデリング](Shape Modeling)領域は、[モデリング]領域の上にあります。この領域ではクラスタ シェイプ合同ノードが含まれているだけでなく、デフォメーションを適用してシェイプ アニメーションのシェイプキーを定義することができます。[シェイプモデリング]モードでシェイプ キーを保存すると、この領域のオペレータのエフェクトがシェイプ キーに保存されます。キーを保存または適用してシェイプ クリップを作成すると、この領域にあるオペレータだけが削除されます。そのため、[アニメーション]領域のアニメートされたデフォーメーション(エンベロープなど)は削除されません。
[アニメーション](Animation)領域は、[シェイプモデリング]領域の上にあります。この領域は、モデリングをフリーズしたり、エンベロープ、ウェーブ、ケージ、ラティス、スパイン、または振幅がアニメートされた単純な Push などのデフォメーションを適用する場合に、削除したくないアニメートされたデフォメーションに対して使用することができます。
[2 次シェイプモデリング](Secondary Shape Modeling)領域は一番上にある領域です。この領域を使用して、エンベロープ加工されたキャラクタの表面の筋肉の隆起などに対応するシェイプ キーを作成できます。この領域のオペレータのエフェクトは、[シェイプモデリング]領域と同様に、[2 次シェイプモデリング]モードでシェイプ キーを保存したときに保存されます。また、この領域のオペレータは、キーを適用してシェイプ クリップを作成した時点で削除されます。
すべてのシェイプ キーは、2 次シェイプ モデリング モードで作成されたシェイプを含めて、シェイプ モデリング領域の一番下にあるクラスタ シェイプ合同のレベルで適用されることに注意してください。つまり、Softimage はシェイプ キーを作成する際に、アニメーション領域にあるすべてのオペレータの反転デフォメーションを計算しなければならないことを意味します。その結果として、アニメーション領域にエンベロープ オペレータしか存在しない場合にはシェイプは問題ありませんが、アニメーション領域にエンベロープ以外のデフォメーションが存在する場合は、必ずしも意図した結果になるとは限りません。すべてのデフォメーションに反転デフォメーションがあるわけではないため、この問題は避けられません。
Explorer では、各領域の最上位は、プレースホルダとして機能する特別なマーカーで示されます。マーカーは最初のオペレータを適用すると同時に自動的に作成され、他のオペレータのように移動できます(「オペレータの順序を変更する」を参照)。ただし、あるマーカーを別のマーカーの上下に移動してマーカーの順序を変更することはできません。また、[クラスタシェイプ 合同]は必ず[シェイプモデリング]領域の最下位になければなりません。
Softimage のバージョン 3.5 以前で作成されたシーンまたはモデルを開いたり読み込みをした場合は、以下のように処理されます。
その後はオペレータを特定の領域に移動することができます(「オペレータの順序を変更する」を参照)。
ここでは、コンストラクション モードを使用する場合のワークフローを簡単に説明します。
コンストラクション モードを設定します(「コンストラクション モードを設定する」を参照)。
新しいオペレータを適用しながらオブジェクトのモデリングを続けます。
新しいデフォーメーションは現在の領域の最上位に適用され、新しいトポロジ モディファイアは常に[モデリング]領域の最上位に適用されます。
オペレータの適用後にスタック内でオペレータを移動してオペレータの領域を変更することができますが、通常の注意事項は変わりません(「オペレータの順序を変更する」を参照)。
作業中はいつでも、最終結果(すべての領域のすべてのオペレータの結果)を表示したり、現在のモード(現在の領域とその下位にあるすべてのオペレータの結果)だけを表示したりできます(「各種領域の結果を表示する」を参照)。さらに、異なるビューで別の表示を行うことも可能です。たとえば、エンベロープやその他のデフォーメーションの実行結果を確認しながら、モデリング モードのビューでのポイントの表示や移動ができます。
既定では、各ビューに現在のコンストラクション モードとディスプレイ モードに関する情報が表示されます。このフィードバックの表示/非表示は切り替えられます(「現在のモードのフィードバックを取得する」を参照)。
現在のコンストラクション モードによって、新しいデフォーメーション オペレータが追加されるコンストラクション領域が決まります。このモードは、目的に応じて選択できます。
たとえば、スパインによるデフォーメーションを適用したいとします。
コンストラクション ディスプレイ モードは、3D ビューでのオブジェクトの表示方法を決定するものです。次の値を指定できます。
[結果(トップ)](Result (top)): 現在のコンストラクション モードに関係なく、常にすべてのオペレータの最終結果を表示します。
[現在のモードと同期](Sync with construction mode)では、現在のコンストラクション領域とそれ以下の領域にあるオペレータの結果を表示します。
どの領域が表示されているかにかかわらず、デフォーメーションおよびトポロジ オペレータを適用し続けることができます。さらに、異なるビューで別の表示を行うことも可能です。たとえば、エンベロープやその他のデフォーメーションの実行結果を確認しながら、モデリング モードのビューでのポイントの表示や移動ができます。
スタック内にトポロジを変更するオペレータがある場合は、いくつかの注意事項があります。
スタック内でジェネレータやトポロジ オペレータがその他のオペレータの下位にある場合は、そのパラメータの変更やアニメートを行うときは十分な注意が必要です。ジオメトリの量が変わると、コンポーネントのインデックスも変更されます。これにより、スタック内で上位にあるその他のオペレータがクラスタまたはコンポーネント インデックスに依存している場合には、それらのオペレータに逆に影響する可能性があります。
たとえば、プリミティブ ポリゴン メッシュ グリッドを入手して、そこにクラスタを作成するとします。このとき、プリミティブの[ジオメトリ]プロパティ エディタを再度開いてサブディビジョン(分割数)を増やすと、クラスタの位置が変わってしまいます。クラスタが定義される前に、新しいポイントがスタックに追加されるためです。これは、クラスタを入力として使用するすべてのオペレータ([コンポーネント移動]など)に影響します。
ただし、クラスタを作成した後に[ポリゴンサブディバイド]オペレータを適用すると、クラスタの定義後に新しいポイントが作成されるため、クラスタの位置は変わりません。
シェイプ アニメーションを使用しているオブジェクトでトポロジ オペレータのパラメータを変更またはアニメートする場合は、すべてのシェイプを作成してからトポロジ オペレータを適用します。トポロジ オペレータは[クラスタシェイプ 合同]の下の[モデリング]領域に挿入されますが、シェイプは正しく更新されます。シェイプ アニメーションではトポロジ オペレータを再評価する必要がないため、シェイプに影響を及ぼすことなくトポロジ オペレータをフリーズできます。
たとえば、シェイプ アニメートされたオブジェクトを取得し、ポリゴン リダクションを適用して、そのオブジェクトの低解像度バージョンを 1 つまたは複数作成することができます。この方法では、すべてのシェイプとトランジションが保持されます。ただし、ポリゴン リダクションを適用してからシェイプ アニメーションを作成すると、リダクションの量を変更したときにシェイプが正しくなくなります。
既存のクラスタまたはクラスタベースのプロパティを変更した場合、スタック内でトポロジ オペレータが上位にあると、結果が得られないか、正しくない結果が得られる可能性があります。これには、たとえば次のような状況が含まれます。
スタック内のトポロジ オペレータの下位で作成したクラスタに対してコンポーネントの追加または削除を行う場合。選択したコンポーネントにデフォーメーションまたはプロパティを適用したときに自動的に作成されるクラスタも、これに含まれます。
スタック内でウェイト マップ作成ポイントまたは[エンベロープ オペレータ]の上位にトポロジ オペレータがあるときにウェイトマップ値(エンベロープ ウェイトを含む)を変更する場合。
このような状況では、単純に、クラスタまたはプロパティを変更する前に、クラスタ作成ポイントの上位にあるトポロジ オペレータをすべて無効にします。変更が完了したら、スタックの最上位を再度有効にすると、オブジェクトは正しく更新されます。
オペレータを無効にする方法については、「上位スタックを無効にする」を参照してください。
トポロジ オペレータを適用すると、新たな依存関係のサイクルが作成されていないかどうかがチェックされます。依存関係のサイクルとは、1 つ以上のオペレータの入力が、たとえば他のオペレータやクラスタが関与する経路を通じて、出力に依存する状況です。これによってオペレータの破損と不安定な動作が起こりえます。
新しい依存関係のサイクルが検知されると、新しいオペレータの削除を促すメッセージが表示されます。[はい](Yes)をクリックして、適用された最後のオペレータを削除することを推奨します。[いいえ](No)をクリックしてオペレータをシーンに残すと、いずれ問題が生じます。
オペレータを削除した後、コマンド ログを見て、どのオペレータがサイクルに関与したかを確認できます。再度オペレータを適用する前に関連するオブジェクトをフリーズする必要があります。
オブジェクトのスタックでオペレータの順序を変更するには、Explorer ビューでオペレータをドラッグ アンド ドロップします。必ず、オペレータのドラッグ先のすぐ下にあるオペレータまたはマーカーの上にオペレータをドロップしてください。
特に、トポロジ オペレータを移動したり、トポロジ オペレータ間で移動したりした場合は、必ずしも期待した結果が得られるとは限らないことに注意してください。これは、以前に特定のコンポーネントに作用していたオペレータが、別のオペレータに作用するようになるためです。また、一部のデフォーメーションオペレータ([MoveComponent]や[Offset]など)は、移動しても期待した結果にならない可能性があります。これは、それらのオペレータで保存されるポイント位置のオフセットの基準フレームが、スタック内の別の位置では異なる場合があるためです。
オペレータを ドラッグ アンド ドロップすると、変更点の関連性が評価され、データ内に依存関係を持たないサイクルを作成して良いかどうかがチェックされます。依存関係が検出されると、その場所にオペレータをドロップできません。オペレータの順番を上げると、オペレータの順番を下げるよりも良い結果が得られることがよくあります。これは、一部のオペレータが依存している非表示のクラスタ作成オペレータによるものです。
オペレータを新しい場所に移動した後に元の場所までドラッグしても、元の結果を得られない場合があります。これは、クラスタの内部依存関係によるものです。しかし、オペレータをドラッグした後に操作を元に戻すと、元の結果が得られます。
また、テクスチャ オペレータをドラッグ アンド ドロップして、プロジェクションの貼り付けや浮遊をコントロールすることもできます。「スタック内のテクスチャオペレータのドラッグアンドドロップ」を参照してください。
これらの規則の例外の 1 つは、[サーフェイス連続性マネージャ]オペレータ([SCM フィクサーオペレータ2])です。このオペレータは移動が不可能で、常にスタックの最上位にあります。もう 1 つの例外は[クラスタシェイプ 合同]です。これは既定で[シェイプモデリング]領域の最下位にあり、移動できません(そのすぐ下にあるその他のオペレータは移動可能)。
新しいオペレータをスタック間に挿入する場合は、まず任意のオペレータから一番上のオペレータまでを無効にします。スタックの最上位を再度有効にするまでの間は、新しいオペレータはスタック内の有効な場所に追加されます。
オブジェクトに満足したら、オペレータ スタックの全部または一部をフリーズできます。フリーズすると現在のヒストリが削除されるため、オブジェクトで必要となるメモリの量が少なくなり、更新が速くなります。なお、元に戻したり値を変更することができなくなります。
[モデリング]領域をフリーズすることも、オブジェクト全体をフリーズすることも、あるいはスタック内の特定のオペレータより下位のオペレータをすべてフリーズすることもできます。
スタック内の下位レベルにある先行のオペレータをフリーズしないで、同じスタック内の特定のオペレータを「フリーズ」するほうが便利な場合があります。たとえば、シーンの速度を低下させる[コンポーネント移動]オペレータが多数あるものの、アニメートされたデフォーメーションやジェネレータを残しておきたい場合などです(維持しておきたいモデリング リレーションがオブジェクトに存在する場合)。
また、特定のデフォーメーションの動作を変更する必要がある場合も同様です。たとえば、[バルジ]デフォーメーションを適用し、あるポイントをスケーリングして、[バルジ]オペレータの振幅を調整する場合は、スケーリングが[バルジ]エフェクトによって乗算されます。ここで加算エフェクトが必要である場合は、ポイントのスケーリングにより作成される[コンポーネント移動]オペレータを「フリーズ」します。
この場合は、複数のデフォーメーションオペレータを単一の[Offset]オペレータに集約できます。[オフセット]オペレータは、現在のフレームに集約されたデフォーメーションのエフェクトを含む単一のデフォーメーションです。[オフセット]オペレータには、パラメータやプロパティ エディタが存在しません。
トポロジ オペレータ全体を集約することはできません。集約するデフォーメーション オペレータ同士の中間にトポロジ オペレータが存在する場合は、そのトポロジ オペレータを境界に 2 つの[オフセット]オペレータが作成されます。
他のオペレータが情報を読み取るスタック内のポイントにわたって集約することはできません。スタック内にこのようなポイントが表示されていない場合も同様です。
たとえば、[ランダマイズ]デフォーメーションの適用、テクスチャ プロジェクションの作成、[プッシュ]デフォーメーションの適用を順に行った後、デフォーメーションを選択して集約すると、2 つの[オフセット]オペレータが作成されます。これは、テクスチャ プロジェクションが中間のポイントからデータを読み取るためです。ただし、テクスチャ プロジェクションをフリーズした場合は、これらのデフォーメーションを単一の[オフセット]オペレータに集約できます。
オブジェクト入力(エンベロープ デフォーマやスパイン デフォーマなど)を持つデフォーメーションを集約すると、そのリレーションが失われます。
[オフセット]オペレータの下位のオペレータを変更すると、エフェクト全体が変更されます。
たとえば、[ラティス]デフォーメーションがあり、その後に[ツイスト]デフォーメーションが続くとします。ここで、この[ツイスト]デフォーメーションを[オフセット]オペレータに集約する場合を考えてみましょう。ラティスを変更しても、[オフセット]オペレータは依然として各ポイント対して同一の相対オフセットを適用します。しかし、ラティスの変更方法によっては、ラティスは実際には「ツイスト」ではなくなります。