2010年7月29日 (木)全ては「面倒だなぁ・・・」から始まる
おはようございます。本日の当番、モーションデザイナーのR.Iです。
蝉も鳴くぐらい夏も本番になってきましたが、皆さんはいかがお過ごしでしょうか。
前回は結婚式のことを書いてましたが無事終わり、余興も盛り上がりました。
さて今回はスクリプトについて書きたいと思います。
会社でよく使うツールとしてXSIがありますが、その中に対応している言語としてVBSがあります。
昔はスクリプトを作成する際、実際に作業してログを書き出し、
そのログを少し変えて、スクリプトを作成することが多かったですが、
汎用性の高いものを作成しようと思い、
最近はよく行う作業をスクリプトでできるようにし、作業短縮を心がけてます。
よくやる作業手順として以下のようなものがあります。
ヌルの生成
↓
コンストレイン
↓
プロット
↓
再度、コンストレイン
ヌルの生成→コンストレイン→プロットの手順で
あるノードのモーションのキー情報を取得したり、
ヌルを生成し、モーションに合わせて構造体を組みなおしたりと
作業中はよくお世話になってます。
その作業中にでてくる不満としてヌルを生成すると「null」という名前で生成されます。
続けて生成すると「null1、null2・・・・」という感じになります。
何個も生成していると何の役割を担うヌルかどうかわからなくなってきます。
だからといって、各ヌルに名前をつけていくのも・・・そう
「面倒だなぁ・・・」です
この不満点を解消するため「選んだオブジェクトと同じ名前のヌルを生成するスクリプト」を作成しました。
内容は以下になります。
For Each oSel in Selection
If Selection.Count >= 1 Then
Application.ActiveSceneRoot.AddNull(oSel.Name)
End If
Next
If Selection.Count < 1 Then
Application.ActiveSceneRoot.AddNull()
End If
簡単に説明すると選んだオブジェクトの名前を取得し、取得した名前と同じ名前のヌルを作成します。
オブジェクトが選択されていない時はXSIの仕様に基づいたヌルが生成されます。
複数のオブジェクトを選択した場合は選択した数と同じ数のヌルが生成されます。
次の不満点としてヌル生成後の作業手順、「再度、コンストレイン」です。
上記の作業手順「コンストレイン→プロット」でヌルにキー情報を取得させた後、
そのヌルで制御を行う場合に再度、コンストレインを行います。
ここで行うコンストレインは「コンストレインの反転」になります。
例
キー情報を持つオブジェクト「A」とキー情報を取得させたいヌル「B」があったとします。
やりたいことは
Before : B == コンストレイン ==> A
After : B <== コンストレイン == A
のようにコンストレインを反転させます。
1組のコンストレインを反転するだけならいいのですが、
10個、100個・・・を手作業でやっていると、さすがに・・・
さぁ、みなさん御一緒に
「面倒だなぁ・・・」
そこで以下のスクリプトを作成しました。
もっと短くなりそうなんですが、現状こんな感じです。
For Each oSel In Selection
Set oConstraints = oSel.Kinematics.Constraints
For Each oCns In oConstraints
For each oConstraining in oCns.Constraining
oType = oCns.Name
If oSel <> oBefore_Constraining Then
oType = Replace(oType," Cns","")
oBefore = oCns.Constrained & " == " & oType & " ==> " & oConstraining
oBefore_Constraining = oConstraining
DeleteObj oCns
ApplyCns oType, oConstraining, oSel
oAfter = oSel & " <== " & oType & " == " & oConstraining
LogMessage "====== " & "ChangeCons " & " ======"
LogMessage "Before : " & oBefore
LogMessage "After : " & oAfter
LogMessage "--------------------------------------"
End If
Next
Next
Next
If Selection.Count >= 1 and oType <> "" Then
MsgBox "Finished"
ElseIf Selection.Count = 0 Then
MsgBox "ERROR : Select Constrain Object!!"
ElseIf Selection.Count >= 1 and oType = "" Then
MsgBox "ERROR : Select Constrained Object!!"
End If
簡単に説明すると選んだオブジェクトがコンストレインをしている場合、そのコンストレインを反転させます。
オブジェクトを選んでいない、コンストレインオブジェクトを選んでいない場合はエラー文を表示します。
昔はネット上に落ちていたスクリプトを使っていましたが、
そのスクリプトは複数オブジェクトのコンストレイン反転ができなかったため、
自分で作成しました。
選んだオブジェクトの中にコンストレインオブジェクトが含まれていれば、
スクリプトを実行してくれるようにしたので、
神経質にコンストレインオブジェクトのみを選ぶ必要もありません。
上の図は赤と青が「コンストレイン関係にあるオブジェクト」
緑が「普通のオブジェクト」になります。
ガバっと選んで・・・
ポチっとな
作成している最中に
「反転して反転」ということもありましたが回避しました・・・たぶん。
使っているうちに穴が見つかりそうですが、今はこれで満足です。
以上が作業を短縮する上で作成したスクリプトになります。
次は意図したコンストレインを自動でやってくれるスクリプトなんかあれば、
もっと短縮できそうですが、まだ作成しておりませんので、またの機会に。
プログラマ職以外の方からは敬遠されがちな分野ではありますが、
スクリプトによって作業を短縮できることもあると思います。
敬遠されていた方々もスクリプトで作業の短縮をされてみてはいかがでしょうか。
| 固定リンク | コメント (0) | トラックバック (0)
「モーションデザイナー」カテゴリの記事
- この頃 流行りの…(2019.02.28)
- たまには乗らんとね(2019.01.17)
- コミュニケーションを語る!(2018.11.22)
- 12個のアニメーション基本原則とは?(2018.10.11)
- 新人研修を終えて(2018.09.06)
コメント