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

迷いそうなポイントだけソースコード解説していきます。

VR化工程の内、リダクション関係のスクリプトは海外サイトで多数公開されているので省略します。
Unity用のマテリアに変換する前に、まずはこの方法でシーン全体のマテリアルとサブマテリアル全てを取得します。

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

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

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

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

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

 

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

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