ですぽんたにっき

基本的には 3dsMax や Unity 関係の記事で。その他色々マイブームなネタを書いていきます。

【MaxScript】テクスチャ参照パスを絶対パスから相対パスに一括変更

こんにちわ!
最近はずっと家でクーラーをつけているので、電気代がすこし気になっています(´・ω・)(・ω・`)ネー。


今回は、テクスチャの絶対パス指定を相対パス指定にするMaxScriptを作ってみます。

普通にテクスチャを設定した場合って、基本的に絶対パスが設定されますよね。

f:id:ponta565:20170716125118p:plain


ただ、このやり方だと個々の環境によってはパスが外れてしまうことがあります。
そこで、絶対パスをファイルから見た相対パスにしようという話です。
f:id:ponta565:20170716132347p:plain

全Bitmapの絶対パスを取得

GetClassInstances 関数で BitmapTexture のインスタンス全てを取得できます。

シーン内の全Bitmapのテクスチャ参照パスを表示

するとこんな感じで、パスがプリントされます。つまり取得できているということですね!
f:id:ponta565:20170716134344p:plain

パスを相対パスに置き換える

取得できたら、あとは置き換えるだけです。
少し手間なのが、絶対パスから名前と拡張子のみを取り出すということをしなければなりません。
これには DotNetClass を利用します。(maxScriptAPIを見つける前にこっちにたどり着いたorz)

テクスチャ絶対パスを相対パスに置き換え

上記スクリプトを実行することで、パスが相対パスになりました!
f:id:ponta565:20170716141053p:plain

ちなみに今回は、.max ファイルの上階層の「tex」フォルダ以下にあるテクスチャファイルという前提で処理を行っています。
プロジェクトの構成によって、「..」の部分を増やしたり色々変えてください( ◠‿◠ )

“..\tex\”

まとめ

・シーン内にあるBitmapクラスのインスタンスを取得をして、fileName プロパティを置き換える。
・「..\」という書き方で、開いている.maxシーンからの相対パスを設定できる。

たくさんのテクスチャがシーン内にある場合は、1つ1つパスを変更するのが面倒だと思うので、
スクリプトで一括変更して楽しちゃいましょう٩(๑❛ᴗ❛๑)۶

終わり。