loose import Landscape from World Machine to Unity
概要
以前World Machine の地形データを UE へインポートしたので、今度は Unity で同じことをしてみる。
参考
World Machine Learn - Terrain Export from World Machine To Unity
World Machine 公式。基本は全部ここに載っている。 SplatMap 取り込み用のスクリプトを配布しているので、これを使ってインポートする方法がある。
Unity公式が配布している Terrain用ツール。このツール上からでも SplatMap をインポートできる、
注意事項
- World Machine と Unity ではテクスチャのY座標の扱いが反対になっているため、 Flip する必要がある。
- SplatMapの各チャンネル と Unity 上のペイントレイヤーは 1 対 1 の関係になっている。World Machine で SplatMap の各チャンネルへ格納するマスクを入れ替えたり、Unity のペイントレイヤーの順番を入れ替えると結果が変わるので注意。
手順
手順は大きく2通り存在する。
- Unity 公式のアセットである
Terrain Tool
を用いる方法 - World Machine が公式で配布している スクリプトを用いる方法
共通部分の手順
上記いずれの手順を用いた場合でも、 World Machine 上で地形を作成する。
作成した地形のハイトマップと SplatMap をエクスポートすれば World Machine 側での準備は完了する。
Splat Map は一言でいうと複数のマスクデータを一枚の画像に混ぜこんだ画像となるが、詳細は割愛する。
World Machine 側での作業を終えた後は Unity 上の作業となる。
Terrain オブジェクトへ World Machine で作成したハイトマップをインポートして地形の形を編集する。
次に Splat Map を用いて描画範囲を設定する対象となるレイヤーを、Paint モードから作成する。
共通作業の最後として、プロジェクトへ World Machine で作成した SplatMap をインポートしておく。
ここまでが共通の作業となっており、以降は採用した方法によって内容が異なっている。
Unity 公式のアセットである Terrain Tool を用いる方法
Terrain Tool を用いて SplatMap をインポートする場合は、まずアセットマネージャーで Terrain Tool をインポートしする。
Terrain Toolでは SplatMap を設定するスロットを複数設定できる。より多数のペイントレイヤーを利用していた複数の SplatMap が必要な場合はスロットに追加していくことになる。
World Machine が公式で配布している スクリプトを用いる方法
World Machine は公式で Unity への Splatmap 取り込みスクリプトを配布している。
World Machine Learn - Terrain Export from World Machine To Unity
World Machine が配布しているスクリプトを用いてインポートする場合は、 ツール実行前に必ず一度はプロジェクトをセーブする必要がある。
ペイントレイヤーを設定した状態の Terrain を保存すると、 Unity はペイントの設定を保存するために Terrain Data ファイルを作成する。この時にSplatMapが存在しない場合、赤一色で塗られたデフォルトのSplatMapを作成して保存する。
World Machine で配布されているスクリプトは既に存在する SplatMap を置き換える仕様のため、このデフォルトの SplatMap が必要となっている。
その後は公式配布のスクリプトをプロジェクトへ取り込んでからツール上で SplatMap を置き換えれば設定できるようになる。
結果の比較
2通りの方法でインポートしたが、 Splatmap 取り込み後の結果に差異が存在した。
まず、インポート元となった World Machine 上での地形のビルド結果を示す。
元の地形では中央に水のようなものが存在するが、今回この部分はインポートしていない。
次に、インポートした後の地形を並べたものがこちらとなる。
それぞれ微妙だが結果に差異が存在する。
どちらが良いかは判断しないとして、取り込み方法で結果に差異が出る点は留意したい。
World Machine 公式配布スクリプトの補足
配布ページでは インポートした SplatMap の Texture Type を Advance にすると記述されているが、現在の Unity ではデフォルトで Advance 設定のパネルが表示されているので Texture Type はDefault のままでよい。
スクリプト実行時にエラー
SplatMap を取り込む際、下図1枚目のようなエラーが発生する時がある。
このエラーは Unity へ取り込んだ SplatMap の画像フォーマットを RGBA32bit
へ設定していない場合に発生する。