フェースごとにIDを割り振って、マテリアルを当てる必要があります。
このときに使用するのがMulti/Sub-Objectというマテリアル。
しかし、こいつがなかなか使いづらい。
使用していないマテリアルの削除や、IDの整理ができなかったり、
複数オブジェクトのマテリアルを一つにしたい場合に、IDを振り直さなければならないなど、
なかなか手でやるにはめんどくさいことがあります。
私自身もVrayMeshを使う際、IDの振り直しをしてマテリアルを1つにする、ということをやってて、
常々めんどくさいな、と思っていました。
そこでスクリプトでやってみようと思い、勉強がてら組んでみました。
スクリプトはコチラ
機能
・複数オブジェクトのマテリアルを一つのマルチサブマテリアルにする
・インスタンスマテリアルの整理
・使用していないマテリアルの削除
・使用していないID、重複するIDの整理
使用法
まず、一つのマテリアルにしたいオブジェクトを選択。
現在、赤、青、緑、白、グレーの5種類のマテリアルが使われています。同色はインスタンスされたもので、
マテリアルエディターにはオブジェクトごとに4つのマテリアルが作成されています。
参考に一番右のマルチサブに使用しない黒いマテリアルを入れておきました。
空いているスロットをアクティブスロットに設定し、スクリプトを実行。
すると、アクティブスロットにまとめられたマテリアルが作成され、オブジェクトに割り当てられます。
インスタンスも一つにまとめられ、不要なマテリアルは削除されます。
IDも自動で割り振られます。
現在の欠点
・EditableMeshに変換される
・スプライン等には適応されない
・モディファイアがスタックされる
・閉じたグループは無視される
・オブジェクトのインスタンスが解除される
つくってみれば案外簡単な構造でした。
まず、全部のフェースのID、マテリアルを取得し、その配列を整理、
整理したものをもとにIDを変更、マテリアルを作成し、割り当てています。
100万ポリ程度でも遅いですが動くと思います。
もっと多いとメモリ不足で落ちるかもしれません。
まだ、荒削りですのでバグが出るかもしれません。使う際は自己責任でお願いします。
0 件のコメント:
コメントを投稿