ファイルによって設定が変わったり、その後のデータ整理も自動にしたくて、プロジェクト専用のインポーターを書いてみました。
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() で良いかな。
参考まで