接続

 
 
 

接続とは、スクリプト オペレータが Softimage とデータのやり取りを行うポイントを指します。接続を作成しない限り、データにはアクセスできません。

スクリプト オペレータは、アニメート可能なパラメータ、プロパティ、オブジェクト、またはそれらの組み合わせに対して接続できます。どの接続も、入力と出力の 2 種類に分かれます。1 つのスクリプト オペレータに割り当てられる接続数に制限はなく、シーン内のほとんどの場所で接続することができます。

Scripted Operator Editor の上部ペインのグリッドを使用して、接続を管理できます。接続を表示するには、左上のリストで[接続]が選択されていることを確認します。

A

[接続](Connections)を選択します。

B

新しい接続を作成します。

C

ハイライト表示された接続を削除します。

D

ハイライト表示された接続をリスト内で上下に移動します。

E

コードで使用する接続名。

F

接続のタイプ: 入力または出力。

G

接続するエレメント。

H

新しいエレメントに接続する場合の参照。

ヒント:Scripted Operator Editor の代わりに Softimage SDK を使用すると、ポート グループを定義して、さまざまな数の接続を持つオペレータを作成することができます。詳細については、カスタム オペレータ『SDK ガイド』を参照してください。

接続を作成する

スクリプト オペレータへの接続は、[New]ボタンを使用するか、Explorer からドラッグ アンド ドロップすることで作成できます。

いずれの場合でも、[値](Value)列が変更できない場合は、指定したエレメントは接続をサポートしていません。

[New]ボタンを使用して接続を追加するには

  1. Scripted Operator Editor の左上のリストで[接続](Connections)が選択されていることを確認します。

  2. [New]ボタンをクリックします。

    新しい列がグリッドに追加され、ポップアップ エクスプローラが開きます。

  3. Explorer を使用して、接続先のシーンエレメントを選択します。

    • パラメータに接続するには、パラメータをクリックします。

    • プロパティに接続するには、プロパティ ノードをクリックします。実際にはプロパティではない[kine]には接続できません。ただし、[local]または[global]には接続できます。

    • オブジェクトのジオメトリに接続するには、[polymsh][srfmesh][crvlist][lattice][cloud]、あるいは[hair] などのオブジェクトの下のプリミティブ ノードを選択します。

    • テキスト オブジェクトのテキスト文字列に接続するには、[TextToCurveList](text)オペレータの下の[text](TextToCurveList)ノードを選択します。

    • カラーに接続するには、Explorer でパラメータを表示させ、R、G、B、および A チャンネルに個別に接続します。

    接続したエレメントを後で変更するには、[編集](Edit)の[...]をクリックして新しいエレメントを選択するか、[値](Value)列に値を直接入力します。

  4. 出力接続の場合は、[アクセス](Access)列をクリックして[Out]を選択します。

  5. 必要に応じて、[名前](Name)列の名前を変更します。この名前は、スクリプト オペレータのコードでこの接続を参照するときに使用されます。デフォルト名は、接続タイプと接続するパラメータに基づきます。

ドラッグ アンド ドロップで接続を作成するには

  1. Explorer でエレメントをクリックします。

  2. Scripted Operator Editor にドラッグ アンド ドロップします。

    • 新規接続を作成するには、リストの最後の接続の下の空白にドロップします。

    • 既存の接続を変更するには、[値](Value)列の対応する行にドロップします。

入力接続を取得および使用する

スクリプト オペレータで入力接続の値を使用するには、Scripted Operator Editor の上部ペインの[名前]列に定義されている接続名を使用します。

実行をスピードアップするには、入力値をコードの先頭にあるローカル変数にコピーして、そのローカル変数を操作します。この方法を使用すると、スクリプトエンジンと Softimage の間のオーバーヘッドを最小限にできます。

例 1: パラメータの入力接続を取得する

[InRad]という名前の入力接続がシーンの 3D オブジェクトの[sphere.radius]パラメータに接続されている場合は、次の行を入力できます。

dim i_rad
i_rad = InRad.Value

この後、コード中でオブジェクトの半径に関して処理する必要がある個所では、[i_rad]を使用できます。

例 2: パラメータの入力接続を取得する

プロパティに入力接続がある場合は、スクリプト名を使用して個々のパラメータを取得します。たとえば、[InXform]という名前の入力接続が[Local Transform]プロパティに接続されている場合、[Pos X]パラメータの値は次の方法で取得できます。

myPosx = InXform.Value.Parameters("posx").Value

短い書式も使用できます。

myPosx = InXform.Value.posx.Value

例 3: ジオメトリの入力接続を取得する

[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

例 4: パーティクル クラウドの入力接続を取得する

クラウドのパーティクルの位置配列の取得は、ジオメトリ オブジェクトのポイントの位置配列の取得とは少し異なります。[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: 単一パラメータ接続の出力値の設定

パラメータに接続する出力接続が1つだけある場合は、次の例のように出力値に[myNewValue]: の値を設定します。

Out.Value = myNewValue

例 2: 単一プロパティ接続の出力値の設定

[Local Transform]プロパティに接続する出力接続が1つだけある場合は、次の例のように[Pos X]パラメータに[myNewValue]: 値を設定します。

Out.Value.Parameters("posx").Value = myNewValue

短い書式も使用できます。

Out.Value.posx.Value = myNewValue

例 3: 単一ジオメトリ接続の出力値の設定

オブジェクトの単一出力接続では、次のようにポイントの位置を更新します。

Out.Value.Geometry.Points.PositionArray = myPnts
重要:

出力接続を使用してオブジェクトのジオメトリに記述する場合は、ジオメトリにも入力接続があることを確認してください。

ジオメトリに入力接続がない場合は、シーンの再ロード中に動作が中止されます。これは、スクリプト オペレータの計算中に初期ジオメトリが更新されず、空になるためです。

入力接続が存在すれば、スクリプト オペレータが計算される前にジオメトリが更新されます。

例 4: 単一パーティクルクラウド接続の出力値の設定

クラウドの単一出力接続では、次のようにポイントの位置を更新します。

Out.Value.Particles.PositionArray = myPartsPos

例 5: テキストの出力値を設定する

次の一般的な構文を使用して、テキスト オブジェクトのテキスト文字列を更新します。

Out.Value.Parameters("text").Value = myNewString

例 6: 複数接続の出力値を設定する

出力接続が複数ある場合は、条件文(VBScript での[If]または[Select Case]など)を使用して[Out.Name]をテストし、正しい値が戻ることを確認します。たとえば、次のように記述します。

if Out.Name = "OutRadius" then
	Out.Value = InSphere.Value
elseif Out.Name = "OutHeight" then
	Out.Value = 2 * InSphere.Value
else
	LogMessage "Unknown output"
end if

出力接続のグラフを表示する

[ビュー](View) [グラフ表示](Show Graph)を選択するか、[Ctrl]+[G]を押すと、Scripted Operator Editor の下部ペインにパラメータ出力接続のグラフを表示できます。もう一度繰り返すとコード表示に戻ります。

注:スクリプト オペレータを毎フレーム計算する必要があるため、グラフの表示には時間がかかります。

接続を削除する

不要な接続をスクリプトオペレータから削除するには

  1. Scripted Operator Editor の左上のリストで[接続](Connections)が選択されていることを確認します。

  2. 関連付けられている行のどこかをクリックして、接続を選択します。

  3. ボタンをクリックします。

注:

オペレータから最後の出力接続を削除すると、そのオペレータは次回の適用時にシーンから削除されます。

ただし、Scripted Operator Editor 内のデータはクリアされないため、スクリプトを失うことなく新しい接続を追加できます。