接続とは、スクリプト オペレータが Softimage とデータのやり取りを行うポイントを指します。接続を作成しない限り、データにはアクセスできません。
スクリプト オペレータは、アニメート可能なパラメータ、プロパティ、オブジェクト、またはそれらの組み合わせに対して接続できます。どの接続も、入力と出力の 2 種類に分かれます。1 つのスクリプト オペレータに割り当てられる接続数に制限はなく、シーン内のほとんどの場所で接続することができます。
Scripted Operator Editor の上部ペインのグリッドを使用して、接続を管理できます。接続を表示するには、左上のリストで[接続]が選択されていることを確認します。
A |
[接続](Connections)を選択します。 |
B |
新しい接続を作成します。 |
C |
ハイライト表示された接続を削除します。 |
D |
ハイライト表示された接続をリスト内で上下に移動します。 |
E |
コードで使用する接続名。 |
F |
接続のタイプ: 入力または出力。 |
G |
接続するエレメント。 |
H |
新しいエレメントに接続する場合の参照。 |
スクリプト オペレータへの接続は、[New]ボタンを使用するか、Explorer からドラッグ アンド ドロップすることで作成できます。
いずれの場合でも、[値](Value)列が変更できない場合は、指定したエレメントは接続をサポートしていません。
Scripted Operator Editor の左上のリストで[接続](Connections)が選択されていることを確認します。
Explorer を使用して、接続先のシーンエレメントを選択します。
プロパティに接続するには、プロパティ ノードをクリックします。実際にはプロパティではない[kine]には接続できません。ただし、[local]または[global]には接続できます。
オブジェクトのジオメトリに接続するには、[polymsh]、[srfmesh]、[crvlist]、[lattice]、[cloud]、あるいは[hair] などのオブジェクトの下のプリミティブ ノードを選択します。
テキスト オブジェクトのテキスト文字列に接続するには、[TextToCurveList](text)オペレータの下の[text](TextToCurveList)ノードを選択します。
接続したエレメントを後で変更するには、[編集](Edit)の[...]をクリックして新しいエレメントを選択するか、[値](Value)列に値を直接入力します。
必要に応じて、[名前](Name)列の名前を変更します。この名前は、スクリプト オペレータのコードでこの接続を参照するときに使用されます。デフォルト名は、接続タイプと接続するパラメータに基づきます。
スクリプト オペレータで入力接続の値を使用するには、Scripted Operator Editor の上部ペインの[名前]列に定義されている接続名を使用します。
実行をスピードアップするには、入力値をコードの先頭にあるローカル変数にコピーして、そのローカル変数を操作します。この方法を使用すると、スクリプトエンジンと Softimage の間のオーバーヘッドを最小限にできます。
[InRad]という名前の入力接続がシーンの 3D オブジェクトの[sphere.radius]パラメータに接続されている場合は、次の行を入力できます。
dim i_rad i_rad = InRad.Value
プロパティに入力接続がある場合は、スクリプト名を使用して個々のパラメータを取得します。たとえば、[InXform]という名前の入力接続が[Local Transform]プロパティに接続されている場合、[Pos X]パラメータの値は次の方法で取得できます。
myPosx = InXform.Value.Parameters("posx").Value
myPosx = InXform.Value.posx.Value
[InGeom]という名前の入力接続が 3D オブジェクトのプリミティブ プロパティに接続されている場合は、次の行を入力してオブジェクトのポイント位置を取得します。
myPnts = InGeom.Value.Geometry.Points.PositionArray
次に、以下の VBScript の構文を試用し、ポイント位置を介してループさせます。
For i = 0 to UBound(myPnts,2) ' Do something with myPnts(0,i) (X position) ' Do something with myPnts(1,i) (Y position) ' Do something with myPnts(2,i) (Z position) Next
クラウドのパーティクルの位置配列の取得は、ジオメトリ オブジェクトのポイントの位置配列の取得とは少し異なります。[InCld]と呼ばれる入力接続がクラウドのプリミティブ プロパティである場合は、次の行を使用してパーティクルの位置配列とカウントを取得します。
set myParts = InCld.Value.Particles myPartsPos = myParts.PositionArray myPartsCount = myParts.Count
次のような VBScript の構文を使用すれば、パーティクルの位置を介してループできます。
For i = 0 to myPartsCount - 1 ' Do something with myPartsPos(0,i) (X position) ' Do something with myPartsPos(1,i) (Y position) ' Do something with myPartsPos(2,i) (Z position) Next
メイン アップデート ルーチンの主要な目的は、出力接続の新しい値を計算して戻すことです。新しい値を戻すには、[Out.Value]を設定する必要があります。
パラメータに接続する出力接続が1つだけある場合は、次の例のように出力値に[myNewValue]: の値を設定します。
Out.Value = myNewValue
[Local Transform]プロパティに接続する出力接続が1つだけある場合は、次の例のように[Pos X]パラメータに[myNewValue]: 値を設定します。
Out.Value.Parameters("posx").Value = myNewValue
Out.Value.posx.Value = myNewValue
オブジェクトの単一出力接続では、次のようにポイントの位置を更新します。
Out.Value.Geometry.Points.PositionArray = myPnts
クラウドの単一出力接続では、次のようにポイントの位置を更新します。
Out.Value.Particles.PositionArray = myPartsPos