マテリアル テクスチャのパスを張り替える


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しかやっていない、そして、エラー対策は
またくしていないのであしからず。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください