« リズム感 | トップページ | 「面倒だなぁ・・・」とか言うな! »

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



簡単に説明すると選んだオブジェクトがコンストレインをしている場合、そのコンストレインを反転させます。
オブジェクトを選んでいない、コンストレインオブジェクトを選んでいない場合はエラー文を表示します。
昔はネット上に落ちていたスクリプトを使っていましたが、
そのスクリプトは複数オブジェクトのコンストレイン反転ができなかったため、
自分で作成しました。

選んだオブジェクトの中にコンストレインオブジェクトが含まれていれば、
スクリプトを実行してくれるようにしたので、
神経質にコンストレインオブジェクトのみを選ぶ必要もありません。

2010_0728_01

上の図は赤と青が「コンストレイン関係にあるオブジェクト」
緑が「普通のオブジェクト」になります。

2010_0728_02

ガバっと選んで・・・

2010_0728_03

ポチっとな


作成している最中に
「反転して反転」ということもありましたが回避しました・・・たぶん。
使っているうちに穴が見つかりそうですが、今はこれで満足です。

以上が作業を短縮する上で作成したスクリプトになります。
次は意図したコンストレインを自動でやってくれるスクリプトなんかあれば、
もっと短縮できそうですが、まだ作成しておりませんので、またの機会に。

プログラマ職以外の方からは敬遠されがちな分野ではありますが、
スクリプトによって作業を短縮できることもあると思います。
敬遠されていた方々もスクリプトで作業の短縮をされてみてはいかがでしょうか。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2010/07/post-401e.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« リズム感 | トップページ | 「面倒だなぁ・・・」とか言うな! »

モーションデザイナー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: 全ては「面倒だなぁ・・・」から始まる:

« リズム感 | トップページ | 「面倒だなぁ・・・」とか言うな! »