myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | mOBJexim : OBJ のエクスポート・インポートでオブジェクトを直す

今日はあるプロジェクトでキャラクター制作していて、仕様関係で部分ごとに違うオブジェクトで分けなきゃいけませんでした。

そして、キャラクターデータはシーンファイルと、古いdotXSI形式でデータ提出することになったんですが、
dotXSIに書き出してまた試しに読み込んでみると、体のオブジェクトのUVが壊れていたところがあっちこっちありました。

なんなんだろう、dotXSI3.6 は久しぶりに使うから良く分からんし。

形状を綺麗にして、不要なクラスターやプロパティーなどを消しても直りません。

全部ダメだったらOBJで試してみるしかないなー。


全部ダメだったからしょうがなくOBJ形式で書き出して、またインポートして、マテリアルをアサインし直して、GATORでエンベロープコピーして、ペアレントし直して、もう一回dotXSIで書き出してみました。


インポートしてみると、直っています!!

さすがOBJ様


しかし、違うところ、足の部分のUVも壊れていたことに今更気づき、また足オブジェクトをOBJに書き出して・・・・
などなどと同じことの繰り返し。


これはまた何回もやることになりそうなのでスクリプトを書いてみました



mOBJexim (export の ex と import の im)
DOWNLOAD

インストール方法
ない。スクリプトです。シェルフかツールバーにドラッグ&ドロップしてボタンを作るか、スクリプトエディターで実行して下さい。

使い方
オブジェクト(ポリゴンメッシュ)を選択して実行
すると
テンポラルフォルダにOBJを書き出して、またインポートして、OBJを削除して、インポートされたOBJにマテリアルコピーして、エンベロープ(ある場合)をコピーして、完了。

CTRLALTSHIFTを押しながら実行すると、元のオブジェクトとすり替えられます

※ 差し替えない場合にオブジェクト名の語尾に暗号が付いてしまう可能性があります。

※ ポリゴンクラスター情報があると面倒になるので、非対応。
ポリゴンクラスターがある場合はすりかえられる機能は無効になります。



因みに、ループで複数の選択を対応しようとしたら、変なことになっていて、OBJは1個ずつ2回インポートエクスポートしていたので、それを調べるより、一個だけを対応するようにしました。^0^
調べてたら仕事間に合わないしね。


誰かに役に立つのかな、これは。

まぁ、形状が壊れている時に試してみて下さい。

では、寝る前にちょこっと Diablo3を

/*
mOBJexim
-------------------------
OBJ のエクスポート・インポートでオブジェクトを直す
*/

var key = GetKeyboardState()(1);

if (selection.count ==1 && selection(0).type == "polymsh"){
var obj = selection(0)
if (obj.activeprimitive.geometry.clusters.filter("poly").count == 0){
if (key == 0) {
objexim (obj, 0)
}
else{
objexim (obj, 1)
}
}
else{
objexim (obj, 0)
}
}
else{
logmessage ("Polymsh を 1個だけ選んで下さい", siError)
}

function objexim (obj, replace){
var FSO = new ActiveXObject( "Scripting.FileSystemObject" );
var TempPath = XSIUtils.Environment("TEMP");
var TempPathObj = TempPath + "\\" + obj.name + ".obj"

// export obj
ObjExport(TempPathObj, null, null, 0, null, null, null, null, null, null, 0, false, null, null, false);
// import obj
var newobj = GetValue(ObjImport(TempPathObj, 1, 0, false, true, false, false));
// delete obj
FSO.DeleteFile (TempPathObj)
// copy Mat
CopyPaste(obj.Material, null, newobj, 1);
// copy Envelope
if (obj.envelopes.count == 1){
ApplyGenOp("Gator", "", newobj +";"+ obj, 3, siPersistentOperation, siKeepGenOpInputs, null);
CopyAnimationAcrossGenerator(newobj + ".polymsh.TransferAttributes", 0, null);
FreezeObj(newobj + ".polymsh.TransferAttributes", null, null);
}
// Replace and delete
if (replace ==1){
var objparent = obj.parent.fullname
DeleteObj(obj)
ParentObjects (newobj + "," + objparent)
}
}

Comments

Post a comment


Only the blog author may view the comment.

Trackbacks

Trackbacks URL
http://myara.blog.fc2.com/tb.php/132-99a0c946
Use trackback on this entry.

まとめtyaiました【SI | mOBJexim : OBJ のエクスポート・インポートでオブジェクトを直す】

今日はあるプロジェクトでキャラクター制作していて、仕様関係で部分ごとに違うオブジェクトで分けなきゃいけませんでした。そして、キャラクターデータはシーンファイルと、古いdot...

  • 2012/06/09(土) 17:45:38 |
  • まとめwoネタ速neo