コンストレイント、エクスプレッション、スクリプト オペレータなどを使用してアニメーション関係を構築すると、評価サイクルが発生することがあります。評価サイクルは、オペレーションがそれ自体に従属する、ループした状態の依存関係です。
簡単な例として、オブジェクト [A] をオブジェクト [B] に([向き]コンストレイントなどで)拘束し、次に同じタイプのコンストレイントでオブジェクト [B] をオブジェクト [A] に拘束すると、依存関係のサイクルが発生してしまいます。もう 1 つ別の例を挙げましょう。チェインのボーンの[長さ]パラメータに、チェインのルートからエフェクタまでの距離を扱うエクスプレッションを設定した場合です。この場合、エフェクタの移動によって[長さ]パラメータを操作していますが、エフェクタの位置はボーンの長さ(および回転)に制約されているため、依存関係のサイクルが発生しています。
Softimage では、サイクルを検証する内部機能により、シーン内でのサイクルの発生を防止しています。[CycleChecking] コマンドを使用すると、コンストレイントやエクスプレッションの作成直後にサイクルが検証され、依存関係のサイクルが存在する場合は警告メッセージが表示されます。
CycleChecking コマンドを実行すると、サイクルの詳細がコマンド ヒストリに表示されるので、そのサイクルに問題がないかどうかを確認できます。たとえば、ピストンを作成するために 2 つのオブジェクトの方向を拘束([方向]コンストレイント)するなど、故意にサイクルを作成したい場合もあります。このコマンドを実行しても、依存関係のサイクルを持つシーンであってもロードは実行可能です。
不適当なサイクルが存在する場合は、Script Editor に警告と情報が表示されるので依存関係を解消する手引きとなります。
サイクルの作成を防ぐには、以下のいずれかの操作を行うと有効です。
3D ビューまたはスケマティック ビューで、すでにコンストレイントが存在しているかどうかを確認します(「コンストレイントとその情報を表示する」を参照)。
オブジェクトを選択し、[コンストレイント](Constrain) [コンストレイント オブジェクトの選択](Select Constraining Objects)を選択します。この操作により、先ほど選択したオブジェクトの拘束元のオブジェクトが確認できます。
Script Editor でコマンド名 [CycleChecking] を入力し、[実行](Run)をクリックして、シーン全体を検証します。このコマンドを選択し、[F1]キーを押すと、このコマンドの詳細な情報が表示されます。
コンストレイントの詳細については、「コンストレイントを使用してアニメートする」を参照してください。
エクスプレッションの詳細については、「エクスプレッションを使ってアニメートする」を参照してください。
スクリプト オペレータの詳細については、「スクリプトオペレータ」(「カスタマイズ」)を参照してください。
適切なサイクルが存在していることがわかっているような状況で、警告のメッセージが表示されないようにするには、サイクル検証を無効化できます。[Data Management]プリファレンスの[シーンのデバッグ]タブには、次の 2 つのオプションがあります。
評価サイクルを切断するには、サイクルの発生に関与している主要な原因を見つけて削除する必要があります。
Script Editor を開き、警告や情報の表示内容を確認すると、サイクルの切断に役立ちます。
この例では、2 つのエクスプレッションが同じパラメータを制御していることが原因でサイクルが発生しており、その警告メッセージが表示されています。
サイクル発生で発生する主な原因を突き止めるには、[Cycle Breaking Point]と表示されたステートメント行から確認を開始します。これはサイクルの検証が終了した場所です。これは、シーンの評価の差異や、不適当なサイクルが原因と思われる奇妙な結果や動作を見極める上で重要な場所です。
同じ[Cycle Breaking Point]オペレータに[Cycle through]オペレータというラベルが付加されている箇所が見つかるまで、[Cycle through]オペレータで検証結果の出力をトレース ダウンしてください。
サイクル発生に関与している要因はいくつかあります。その 1 つのキーの依存関係を切断すれば、依存関係のサイクルは解消されます。
エクスプレッション、ScriptedOp、kine.Constraints など、サイクルを作成しやすいオペレータをはじめに調べます。
これらのオペレータを使ったアニメーションを確認します。問題がある場合は、アニメーション作業を再度実行するか、オペレータを削除して解決します。
被コンストレイント オブジェクトにサイクルが生じた場合は、メッセージが表示され、最後に設定したコンストレイントを削除して競合を解消するように促すメッセージが通知されます(「コンストレイントの削除(リラックス)」を参照)。
また、コンストレイントを非アクティブにしてサイクルを解消することもできます(「コンストレイントのアクティブ化/非アクティブ化」を参照)。無効なコンストレイントはサイクル検証の際には考慮されません。
コンストレイントの[ブレンド ウェイト]値を 0 に設定したり、ミュートすることによってサイクル検証の対象から外すことはできません。したがって、サイクル発生の原因になる可能性があります。