myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | FBX エクスポートした後にイメージクリップが表示されない問題

最近Mayaユーザーとデータ共有するために良くFBXを使ってSoftimageからMayaに持って行ったり来たりしています。

そこでこの問題が出てきました。
ずっと前からあった気がしますが、最近までそんなに気になっていませんでした。

SoftimageでFBXにエクスポートすると、イメージクリップが表示されなくなってしまう問題です。エクスポートしているのに、現在のSIデータが変わっちゃうってどういう事ですか?!

ビューア上ではちゃんと表示されますが、イメージクリップのプレビューとテクスチャエディターには表示されません。そしてテクスチャエディターがめっちゃ重くなってしまいます。

こんな感じです: (一応仕事のモデルなのでUVはUniqueUVで適当に作り直した)

clipproblem02.jpg

イメージクリップを作り直すと直ります。

となるとイメージクリップに問題があるという事ですね、面倒だからイメージクリップを作り直すスクリプトを作ってみました。

//JScript
//選択取得
var oSel = getvalue("selectionlist")

//選択にはイメージクリップがあった場合は、選択されたオブジェクトだけで実行
//イメージクリップがないと、全イメージクリップを取得する
if (!oSel.Filter("ImageClip")) var oClips = ActiveProject.ActiveScene.ImageClips
else var oClips = oSel

for ( var i=0; i < oClips.Count; i++ ) {
//イメージクリップをリネーム
var oClip = oClips(i);
oClip.name = oClip.name + "_temp"

//イメージクリップが繋がっているシェーダーのパラメーターを取得
var oClipTargets = oClip.GetShaderParameterTargets()

//新しいイメージクリップを作り直す
var sourceFile = oClip.parameters('SourceFileName').value
var oNewClip = SICreateImageClip(sourceFile)(0);

//新しいイメージクリップをパラメーターに接続
for ( var j=0; j < oClipTargets.Count; j++ ) {
SIConnectShaderToCnxPoint(oNewClip, oClipTargets(j), false);
}

DeleteObj(oClip)
}


パラメーターのコピーはしないスクリプトだから、パラメーターコピー機能も追加しようと
・・・

表示されません。

ま、おかげで原因が分かりました。パラメーターですね。

表示されるやつとされないやつのパラメーターをループで比べてみたら2つだけが異なっていました。
両方はCropのパラメーターでした。

以下のスクリーンショットを見てお分かりでしょうか。

clipproblem01.jpg

X最小 と 最大 は 同じ0 そして、 Y最小 と Y最大は 同じ1 になっています。

最小値と最大値は同じ数値だから通りで表示されるわけないじゃん!


FBXエクスポーターが使用されているイメージクリップのCropパラメーターのXMax と YMin を勝手に変えてしまいます。
FBX形式にはそれが必要か分からないけど、元に戻せよ!

意外と簡単でした。この原因が分かったら解決方法は簡単ですね。

//JScript
var oClips = ActiveProject.ActiveScene.ImageClips
for ( var i=0; i < oClips.Count; i++ ) {
oClips(i).Xmax=1; oClips(i).Ymin=0;
}


以上