myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | Null to Model

今日はSoftimageで提出するプロジェクトがあったけど、チームにMayaユーザーも居て、Mayaのデータ変換する必要がありました。

色んなオブジェクトをModelにまとめる仕様なんですけど、MayaにはModelのようなものがありません。
グループっていうのは一番近いけど、Softimageに持っていくとNullになってしまいます。

なので、Null → Model 変換 スクリプトを作りました。

単純なスクリプトだけど、誰かに役に立つかもしれない。

一応OMで書いたので初心者には多少参考になると思うからコメントも書いておきます。

// 最後に取得したオブジェクトを削除するので選択コレクションが変わってしまうため
// GetValueで選択リストを取得しましょう。
var oSel = getvalue("selectionlist")
for (var i=0; i<oSel.count ; i++){

// ヌルだけに絞りたいのでIF条件
if (oSel(i).type=="null"){

// 最後にこのオブジェクトを削除するので、名前だけを取って起きます。
// 削除されたオブジェクトの名前は取得できないからね。
var namae = oSel(i).name

// 別に変数は要らないけど、分かりやすいようにoChildrenを書いておく
var oChildren = oSel(i).Children

// ルートにモデルを作成して、選択したオブジェクトをそのモデルの子にする。
// CreateModelコマンドとほぼ同じです。
     // OMだと、作成しながらオブジェクト化に出来るので、どんな名前になってもOK

//※ 因みにActiveSceneRoot は ActiveProject.ActiveScene.Rootの略です。
var oModel = ActiveSceneRoot.AddModel(oSel(i), "Temp_"+namae)

// 子オブジェクトがいたら、モデルの子にする。
if(oChildren.Count>0){
oModel.AddChild(oChildren)
}

// 用済みのヌルを消す!
Deleteobj(oSel(i))

// そして、殺したヌルの名を取る
oModel.Name = namae;
}
}



今回は仕様のために ActiveSceneRoot で良かったんだけど、oSel(i).Parent にすればもっとオールラウンドなツールになっていました。


最初はコマンドばっかで書いて、そのまま使ってました。
その方が早いからな。書くの。ログを見て書けば良いだけだからね。
スクリプトが遅くても何ミリ秒じゃあどうでも良いでしょう。

でもね。なんでだろうね。

書いた後にこの部分だけをOMにしよう・・・
よし・・・これでコードが少し可愛くなった。

でも、どうせならこっちも。

あっ、そうえいばこれもOMで出来るよね・・・

で結局こうなっちゃった。


OMならブログにメモっても良いかな。

Comments

Post a comment


Only the blog author may view the comment.

Trackbacks

Trackbacks URL
http://myara.blog.fc2.com/tb.php/63-fde1cd57
Use trackback on this entry.