V-Ray to Unity 建築パースを1時間でウォークスルーVR化する2

細かく説明するのは長くなってしまうので、迷いそうなポイントだけソースコード解説していきます。

VR化工程の内、シーン最適化工程のスクリプトは省略します。
今回説明するのは、シーン内の全てのマテリアル(サブマテリアル含む)を取得する方法です。Unity用のマテリアに変換する前に、まずはシーン内の全てのマテリアルを取得しておく必要があります。

シーン内の全てのマテリアル・サブマテリアルを取得する方法

SceneMaterialsでシーン内のマテリアル配列を取得できますが、これはシーン直下のマテリアルしか取得できません。マテリアルがマルチサブマテリアルだった場合は、関数を作って入れ子処理する事で取得できます。

サブマテリアルの取得関数

まず、サブマテリアル一覧を格納するための配列を用意しておきます。次に入れ子処理用の関数を作ります。
マテリアルを引数に持ち、まず自身をリストに追加してからサブマテリアル数を取得してループさせ、この関数自身を入れ子処理する様な関数を作ります。こうする事で、最初に引数に指定したマテリアルの下位マテリアルが何段構造になっていても全てを取得する事ができます。

あとは、SceneMatrialsで取得したマテリアル全てに対してこの関数を当てるだけです。

 

マテリアルをUnityへ持っていく為の準備

Unityは、MAXのサブマテリアルも普通のマテリアルとしてアセットリストに読み込む為、マテリアルリストを出力する場合はサブマテリアルを含む全てのマテリアルを取得しておく必要があります。