Maxはテクスチャのパスが絶対パスだ・・・
んー、やりにくいねー・・・・
特に環境の違う場所にファイルを持って行った場合に
テクスチャが相対パスでないので、非常にやりにくい。
SoftImageやMayaはデータベース管理ってスタイルがあるから。
たとえ環境が変わっても、データベースさえ変わっていなければ
テクスチャはそのまま張られるんじゃないかな。
ということで、
テクスチャのパスを張り替えてみる。
まずは、とりあえず、テクスチャを張りつけるスクリプト
meditMaterials[1].diffuseMap = Bitmaptexture fileName:”D:\Test\090619.jpg”
最初のmeditMaterials[1]は、マテリアルエディターの1番目ということ。
diffuseMapは、拡散光の部分に、Bitmaptextureを貼り付け、そのファイルパスが続くと言ったかんじ。
次は、テクスチャの内容をみてみる
meditMaterials[1].diffuseMap.bitmap
上記の結果は、BitMap:D:\Test\090619.jpg となった。
ここで行うのは、このファイルまでのパス D:\Test\ を別のものに置換するこだな!
ひとまず、パスを分析するスクリプトを実行した。
getFilenamePath meditMaterials[1].diffuseMap.bitmap.fileName
結果は ”D:\Test1\” となった
うっし!このファイルパスを入れ替えるだけだーーー!!
入れ替えるだけだぞージョジョー!
あっはっはっは
あとは、シーンのマテリアルの情報は
sceneMaterials.count
1
sceneMaterials[1].name
“01 – Default”
とまぁ、こんな感じ
次は現在のオブジェクトに適応されたマテリアルを見てみる。
$.material
結果は 01 – Default:Standard ということは
以下のようにしてみる。
file = $.material.diffuseMap.bitmap.fileName
getFilenamePath file
結果は ”D:\Test1\” となった!
コレだけあればシンプルなパス置換機能は作れそうだ。
このビットマップを入れ替える方法は
file = openBitMap “D:\\Test1\\090619.jpg”
$.material.diffuseMap.bitmap = file
リザルトはこうなった BitMap:D:\Test1\090619.jpg
見事張替え完了!
で、以上の材料を元に作ってみた。
シーンにあるマテリアルのすべてのパスを入れ替える試作品。
myBitMap = undefined, myFile = undefined, newPath = undefined, oldFile = undefined, oldPath = undefined;
–シーンに使われているマテリアルはあるか?
if (sceneMaterials.count == 0) then
(messageBox(“シーンに使われているマテリアルがありません”) title:”メッセージ”;
)else(if (queryBox(“シーンのマテリアルのパスを置換しますか?”)title:”メッセージ”) then
(
/*************************************************
#パスの取得は色々ですが
#ここのファイルパスを書き換えるのだよ↓↓
**************************************************/
newPath = “D:\\FFFF\\”;for i in sceneMaterials do
(
–ビットマップはあるか?
try(
–print i.name
oldFile = i.diffuseMap.bitmap.fileName;
oldPath = getFilenamePath oldFile;–パスを入れ替え
–<対象のString> <開始文字番号> <置き換える文字数> <置き換える文字>
myFile = replace oldFile 1 oldPath.count newPath;–ビットマップを取得
myBitMap = openBitMap myFile;–ここで入れ替える
i.diffuseMap.bitmap = myBitMap;
)catch();
);–for end
);–if end);–if end
できたー!!
実行してみたが、そこそこ調子はよい。
まだ、.diffuseMapしかやっていない、そして、エラー対策は
またくしていないのであしからず。