myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | FBX カスタムインポーター

仕事のプロジェクトではFBXをSoftimageにインポートする作業がありましたので、
ファイルによって設定が変わったり、その後のデータ整理も自動にしたくて、プロジェクト専用のインポーターを書いてみました。

FBXをインポートすると、色々整理しないといけませんね。
ウェイトは100%ではないところ、不要なプロパティーいっぱい残っていて、クラスター名を直さないといけない、などなど。

まぁ、そこまで難しくはないコードですね。 
(ウェイトは少し厄介だったけど、ウェイトの話はまた今度にしようかな。)

FBXの設定方法分かるまで少し時間が掛かってしまったので、久しぶりのSnippetをメモっておきます。

FBXImportAnimation(false);
FBXImport();


を使えば、アニメーション無しでFBXをインポートが出来ます。

しかし、マテリアルのオプションがありません。
そして、ハードエッジのオプションは 2011 SP1以降から追加されたようです。

色々調べてみたら、どうやら FBX の PPG を作っておけば、FBXImport()はそのPPGの設定を読みんでくれます。

FBX の 設定プロパティを作る方法は:


ActiveSceneRoot.AddProperty( "ImportFBXOptions")


これをオブジェクトにすれば、スクリプトで簡単に設定が出来ます。
FBXのPPGをいじりながらログを見れば、全部のオプションが分かります。

例:

//JScript
var r = ActiveSceneRoot

// FBXOption があった場合、削除しておく
if (r.properties("ImportFBXOptions")) deleteObj(r.properties("ImportFBXOptions"))

// FBX PPG 作成
var fbxPPG = r.AddProperty( "ImportFBXOptions")

// FBX オプション設定
fbxPPG.ImportHardEdges = 0
fbxPPG.ImportCameras = 0
fbxPPG.ImportLights = 0
fbxPPG.ImportMaterialsAndTextures = 0
fbxPPG.ImportAnimation = 1
fbxPPG.ImportSkins = 1

// FBX インポート
var fbx = FBXImport()

// インポートキャンセルされていないと次に進む。
// キャンセルされていたら、強制終了。
if (fbx !=false){
logmessage("FBX Imported")
// Do Something
}

// FBXOption を削除
if (r.properties("ImportFBXOptions")) deleteObj(r.properties("ImportFBXOptions"))




FBXImport() を空っぽのままで使うとFBXのオプションウィンドウが出てきます。

ファイルプロンプトのみにしたい場合はこんな感じで出来ます:

//JScript
var oFile = XSIUIToolkit.FileBrowser
oFile.InitialDirectory = "D:\\myara\\topsecret\\scenes" // デフォルトのフォルダ
oFile.Filter = "FBX (*.fbx)|*.fbx|All Files (*.*)|*.*||"
oFile.ShowOpen()

var fbxImportComm = FBXImport(oFile.FilePathName)


問題はですね、FBXをインポートしている時にProgress Barが出てきません。
そして、FBXImporterはめちゃくちゃログを残すので軽いFBXファイルでもSIが瞑想に入ってしまいます。
他の人が使う時に落ちたか!と少しビックリするかもしれないので、普通の FBXImport() で良いかな。


参考まで

Comments

Post a comment


Only the blog author may view the comment.

Trackbacks

Trackbacks URL
http://myara.blog.fc2.com/tb.php/169-03e5f64e
Use trackback on this entry.