作業を始める前に、スクリプト オペレータ、接続、変数の基本的な概念について理解しておく必要があります。
スクリプト オペレータは、シーン内のデータを更新するために呼び出されるオブジェクトモデルのスクリプトです。スクリプト オペレータは、1 つまたは複数のアニメート可能なパラメータ、プロパティに適用でき、さらにジオメトリック オブジェクトに適用してシェイプをデフォームすることもできます。
スクリプト オペレータには、次のようなさまざまな用途があります。
パラメータのエクスプレッションの代わりに使用できるスクリプト オペレータには、いくつかの利点があります。
スクリプト オペレータは、再利用しない簡単なカスタム デフォーメーションに使用することもできます。デフォーメーションを再利用する予定がある場合は、代わりにコンパイル プラグインを作成しておくとよいでしょう。
コンパイル プラグインのデフォーメーションを開発する際にも、コードを C++ や他の言語に変換する前に、スクリプト オペレータにより設計をすばやく試用し、そのロジックをテストすることができます。
同時に、スクリプト オペレータにはいくつかの欠点もあります。
そのため、スクリプト オペレータではなく、スクリプト済みまたはコンパイル済みの自己インストール カスタム オペレータを使用するほうがよい場合があります。詳細については、「カスタム オペレータ」(『SDK ガイド』)を参照してください。スクリプト オペレータは、エクスプレッションと自己インストール カスタム オペレータの中間に位置するソリューションと考えることができます。
接続とは、スクリプト オペレータが Softimage とデータのやり取りを行うポイントを指します。接続を作成しない限り、データにはアクセスできません。
スクリプト オペレータは、アニメート可能なパラメータ、プロパティ、オブジェクト、またはそれらの組み合わせに対して接続できます。どの接続も、入力と出力の 2 種類に分かれます。1 つのスクリプト オペレータに割り当てられる接続数に制限はなく、シーン内のほとんどの場所で接続することができます。
スクリプト オペレータは、アニメート可能なパラメータ、プロパティ、3D ジオメトリ、またはそれらの組み合わせに対して接続することができます。
パラメータに接続するスクリプト オペレータはエクスプレッションに似ています。エクスプレッションとの大きな相違点は、スクリプト オペレータが複数のパラメータに接続できるため、1 つのスクリプトを使用して複数のパラメータをさまざまな値で更新できる点です。
スクリプト オペレータは、[表示/非表示]または[ローカル変換]などのプロパティに接続することもできます。つまり、パラメータそれぞれに複数の接続を定義しなくても、プロパティの任意のパラメータにアクセスできます。
また、スクリプト オペレータは、ポリゴン メッシュ、サーフェイス、カーブ、パーティクル クラウド、ヘアといったジオメトリに直接接続できます。これにより、3D オブジェクトのシェイプを変更し、独自のカスタム デフォーメーションを作成できます。
[出力接続](Output connections): スクリプトが更新を担当するエレメントです。シーンを更新する必要がある場合にユーザのスクリプトが呼び出され、新しい値が計算されます。
[入力接続](Input connections): シーンからのデータへのアクセスを可能にします。計算時にスクリプトが必要とする、あらゆるシーン データについて入力接続を作成できます。
オペレータを正しく評価するには、接続を適切に定義しなければなりません。計算に用いるシーン データは、すべて入力接続として追加する必要があります。このようにしないと、入力が変わってもオペレータが呼び出されず、更新されません。同様に、スクリプトにより設定されているシーン データは、すべて出力接続として追加する必要があります。このようにしないと、値を更新する必要がある場合にもオペレータが呼び出されません。
同一のオペレータの入力および出力の両方に対し、同一のエレメントを接続できます。たとえば、カスタム デフォーメーションを作成する場合は、3D オブジェクトのジオメトリを取得し、ジオメトリのポイント一覧を取得(入力)したのち、これらのポイントの新しい位置を求めてジオメトリを更新(出力)する必要があります。
パラメータが入力接続である場合は、アニメーションのエフェクトを含む適切なフレームの最終的なパラメータ値が、任意のソース(ファンクション カーブ、エクスプレッション、アクション、コンストレイント、またはインバース キネマティクス)からスクリプト オペレータに渡されます。
パラメータが入力接続と出力接続の両方である場合は、そのパラメータの現在値がスクリプト オペレータに渡されます。この値は最新の値セットであり、同時に、前回適用されたファンクション カーブまたはエクスプレッションから取得した値でもあります。複数のスクリプト オペレータが存在する場合は、あるオペレータの出力は、適用した順番で次の入力が決まります(作成順ではありません)。
1 つのスクリプト オペレータに入力および出力として接続されたパラメータが複数存在する場合は、1 つだけスクリプト オペレータが呼び出され、必要に応じてパラメータが個別に更新されます。特に、パラメータが更新される順番が変わることがあります。これにより、ユーザのオペレータが呼び出されてあるパラメータが更新されると、他の入力が既に更新されているかどうかを判断できなくなります。
スクリプト オペレータは接続の他に変数を持つことができます。変数は、スクリプト オペレータに属するカスタム パラメータで、エフェクトのコントロールに使用できます。シーン内のその他のカスタム パラメータと同様に、変数は編集およびアニメートできます。また、変数はスクリプト オペレータの計算にも使用できます。
たとえば、カスタム デフォーメーションを作成する場合、デフォーメーションの振幅をコントロールする変数を定義できます。その後は、キー、エクスプレッション、アクションなどを使用して振幅をアニメートできます。
メイン アップデート ルーチンとは、あらゆる出力接続の新しい値を計算するコードを記述する場所です。Scripted Operator Editor の中央パネルにあります。スクリプト オペレータを適用した場合やスクリプト オペレータを含むシーンがロードされた場合に、このコードは解析されます。
スクリプト オペレータは、Softimage がサポートする任意の言語で記述できます。特定のスクリプト オペレータの解析に使用される言語は、スクリプト オペレータを最初に作成した際に[設定](Preferences)ウィンドウの[スクリプト](Scripting)ページで設定した言語です。
コード内でスクリプト コマンドは使用できません。オブジェクト モデル ステートメントのサブセットに制限されます。スクリプト オペレータのコードで使用が許されているプロパティとメソッドは、『SDK ガイド』に記載されています。
Scripted Operator Editor はメイン アップデート ルーチンのヘッダを自動的に管理するため、[Sub Update]()および[End Sub]行は読み取り専用となっています。メイン アップデート ルーチンに渡される引数は次のとおりです。
[In_UpdateContext]は、一時的な[UpdateContext]オブジェクトで、呼び出されるコンテキストに関する情報をスクリプトオペレータに与えます。
この引数とオブジェクト モデル全般の詳細については、「オブジェクト、プロパティ、メソッドの詳細情報を取得する」に記載されているように、『SDK ガイド』を参照してください。
[Out]は、評価時にオペレータが呼び出される単一の出力接続です。各出力接続を更新する場合に、オペレータが一度に 1 つずつ個別に呼び出されます。
オペレータに複数の出力接続がある場合は、アップデート ルーチンで[Out.Name]を調べて返す値を決定したのち、[Out.Value]を適切に設定してください。
[入力接続](input connections)はすべて、スクリプト オペレータが呼び出されるたびに、引数として渡されます。上の図には 4 つの入力接続、InGeom、InGPosX、InGPosY、InGPosZ があります。
Scripted Operator Editor の下のペインでは、ヘルパー ルーチンやグローバル変数の宣言など、スクリプト オペレータに必要な追加コードを保持できます。また、プライベートなユーザ データへのアクセスを可能にする Init および Term プロシージャの定義に使用できます(「スクリプト オペレータでのプライベート ユーザ データを使用する」を参照)。
メイン アップデート ルーチンと同様に、スクリプト オペレータを適用した場合やスクリプト オペレータを含むシーンがロードされた場合に、このコードは解析されます。