このセクションでは、スクリプト オペレータの基本をカバーする簡単な例を 2 つ挙げます。
次の例では、単純なスクリプト オペレータをオブジェクトの位置パラメータに適用し、編集する方法を示します。ここでは接続の作成、出力値の設定、およびカスタム変数の使用を扱います。最後のオペレータは、ウェイト変数に基づいて 2 つの円錐の間に球を配置します。
球を選択したとき移動ツールがアクティブならば、球の位置パラメータはすでにマークされています。[アニメーション](Animation) [スクリプトオペレータの設定](Set Scripted Operator)を選択します。
Scripted Operator Editorが開き、最初にマークされたパラメータにデフォルトオペレータ[sphere.kine.local.posx.]が指定されています。
メイン編集ペインで、既定のコードを削除し、次の行を入力します。
Out.Value = (InX0.Value + InX1.Value)/2
[適用](Apply)をクリックして、円錐を X 軸に沿って移動します。球は X 軸に対して 2 つの円錐の中央にとどまります。
この時点ではオペレータは X 軸に関して機能しています。これを他の軸に拡張します。
最後にウェイトの変数を追加し、それに従ってコードを修正します。
[新規作成](New)をクリックします。新しい[Weight]変数を呼び出し、既定値を 0.5 に設定します。他のオプションはそのままにしておきます。
メイン アップデート ルーチンを、ウェイトに対応するよう変更します。
dim wt wt = In_UpdateContext.Parameters("Weight").Value If Out.Name = "OutX" Then Out.Value = InX0.Value*wt + InX1.Value*(1-wt) Elseif Out.Name = "OutY" Then Out.Value = InY0.Value*wt + InY1.Value*(1-wt) Else Out.Value = InZ0.Value*wt + InZ1.Value*(1-wt) End If
[インスペクト](Inspect)をクリックします。プロパティ エディタが開き、カスタムの[Weight]パラメータを示します。
この例はデフォーメーションの基本を紹介します。オブジェクトのジオメトリへの接続方法と、ポイントの位置の取得および設定方法を示します。このオペレータは位置が Y = 0 より下にあるポイントを Y = 0 の位置に移動します。
[選択]パネルで[選択](Selection)ボタンをクリックし、[NURBS Surface Mesh]ノード(NURBS Surface Mesh node)を選択します。
[アニメーション]パネルから[アニメーション](Animation) [スクリプトオペレータの設定](Set Scripted Operator)を選択します。Scripted Operator Editor が開き、[sphere.surfmesh] に出力接続が設定されています。
出力接続を [OutGeom] に名前変更し、[InGeom] という名前の新しい入力接続を追加し、この入力接続も [sphere.surfmesh] に接続します。
' Get an array listing the positions of the points Dim pts pts = InGeom.Value.Geometry.Points.PositionArray ' Loop through the array ' If a point is below Y = 0, set it to Y = 0 For i = 0 to UBound(pts,2) If pts(1,i) < 0 Then pts(1,i) = 0 End If Next ' Write the new positions to the output Out.Value.Geometry.Points.PositionArray = pts
[適用](Apply)をクリックします。球のポイントはセンターに対する相対位置に基づいてローカルの Y = 0 の位置に移動します。
オブジェクトを移動してもそのポイントは影響されません。これは、オペレータがそのローカル位置に影響を与えているためです。維持されるエフェクトの場合は、出力する前に入力の位置をグローバル座標に変換し、修正し、再度ローカル座標に戻す必要があります。
また、オペレータを適用した後でセンターを移動しても何も変化しません。これは、スタックにおいてセンター オペレータがスクリプト オペレータよりも上位にあるからです。センターを移動したことによる効果を確認するには、オペレータを再適用する必要があります。