スクリプト オペレータの例

 
 
 

このセクションでは、スクリプト オペレータの基本をカバーする簡単な例を 2 つ挙げます。

例 1: パラメータのスクリプト オペレータ

次の例では、単純なスクリプト オペレータをオブジェクトの位置パラメータに適用し、編集する方法を示します。ここでは接続の作成、出力値の設定、およびカスタム変数の使用を扱います。最後のオペレータは、ウェイト変数に基づいて 2 つの円錐の間に球を配置します。

簡単に開始

最初は、球を円錐の間で X 軸に沿って移動させます。

  1. 新しいシーンで、円錐を 2 個、球を 1 個取得します。取得したオブジェクトを少し動かします。

  2. 球を選択したとき移動ツールがアクティブならば、球の位置パラメータはすでにマークされています。[アニメーション](Animation) [スクリプトオペレータの設定](Set Scripted Operator)を選択します。

    Scripted Operator Editorが開き、最初にマークされたパラメータにデフォルトオペレータ[sphere.kine.local.posx.]が指定されています。

  3. 2 つの円錐の X 位置にそれぞれ新しい入力接続を作成します。必要に応じて接続名を変更します。

  4. メイン編集ペインで、既定のコードを削除し、次の行を入力します。

    	Out.Value = (InX0.Value + InX1.Value)/2
  5. [適用](Apply)をクリックして、円錐を X 軸に沿って移動します。球は X 軸に対して 2 つの円錐の中央にとどまります。

発展させる

この時点ではオペレータは X 軸に関して機能しています。これを他の軸に拡張します。

  1. 球の Y および Z 位置に出力接続を追加し、円錐に対する入力接続を追加します。同じ命名規則に従います。

  2. 対応するコードをメイン アップデート ルーチンに追加します。出力接続が複数あるので、[Out.Name.]をテストする必要があることに注意してください。

    If Out.Name = "OutX" Then
    		Out.Value = (InX0.Value + InX1.Value)/2
    	Elseif Out.Name = "OutY" ThenOut.Value = (InY0.Value + InY1.Value)/2ElseOut.Value = (InZ0.Value + InZ1.Value)/2End If
  3. 再び[適用](Apply)をクリックし、円錐を移動させます。球はすべての軸に対して 2 つの円錐の中央にとどまります。

仕上げ

最後にウェイトの変数を追加し、それに従ってコードを修正します。

  1. Scripted Operator Editor の左上のボックスから[変数](Variables)を選択します。

  2. [新規作成](New)をクリックします。新しい[Weight]変数を呼び出し、既定値を 0.5 に設定します。他のオプションはそのままにしておきます。

  3. メイン アップデート ルーチンを、ウェイトに対応するよう変更します。

    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
  4. 再び[適用]をクリックし、円錐を移動させます。

  5. [インスペクト](Inspect)をクリックします。プロパティ エディタが開き、カスタムの[Weight]パラメータを示します。

  6. [Weight]を調整します。球はどちらかの一方に近づくように移動します。

例 2: オブジェクトのジオメトリのスクリプト オペレータ

この例はデフォーメーションの基本を紹介します。オブジェクトのジオメトリへの接続方法と、ポイントの位置の取得および設定方法を示します。このオペレータは位置が Y = 0 より下にあるポイントを Y = 0 の位置に移動します。

オブジェクトのジオメトリに接続する

  1. 新しいシーンで、プリミティブ サーフェイス球を取得します。

  2. [選択]パネルで[選択](Selection)ボタンをクリックし、[NURBS Surface Mesh]ノード(NURBS Surface Mesh node)を選択します。

  3. [アニメーション]パネルから[アニメーション](Animation) [スクリプトオペレータの設定](Set Scripted Operator)を選択します。Scripted Operator Editor が開き、[sphere.surfmesh] に出力接続が設定されています。

  4. 出力接続を [OutGeom] に名前変更し、[InGeom] という名前の新しい入力接続を追加し、この入力接続も [sphere.surfmesh] に接続します。

  5. メイン アップデート ルーチンに次の行を入力します。

    ' 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
  6. [適用](Apply)をクリックします。球のポイントはセンターに対する相対位置に基づいてローカルの Y = 0 の位置に移動します。

    オブジェクトを移動してもそのポイントは影響されません。これは、オペレータがそのローカル位置に影響を与えているためです。維持されるエフェクトの場合は、出力する前に入力の位置をグローバル座標に変換し、修正し、再度ローカル座標に戻す必要があります。

    また、オペレータを適用した後でセンターを移動しても何も変化しません。これは、スタックにおいてセンター オペレータがスクリプト オペレータよりも上位にあるからです。センターを移動したことによる効果を確認するには、オペレータを再適用する必要があります。