ニッチなblender手記

世の中には自分に似た人が3人いるとされています。その人達へと情報共有するために主にblenderの記事を書いていきます。

loose import Landscape from World Machine to Unity

概要

以前World Machine の地形データを UE へインポートしたので、今度は Unity で同じことをしてみる。

f:id:r9aArrowhead:20210714235757j:plain

参考

World Machine Learn - Terrain Export from World Machine To Unity

World Machine 公式。基本は全部ここに載っている。 SplatMap 取り込み用のスクリプトを配布しているので、これを使ってインポートする方法がある。

Unity doc - Terrain Tools

Unity公式が配布している Terrain用ツール。このツール上からでも SplatMap をインポートできる、

注意事項

  • World Machine と Unity ではテクスチャのY座標の扱いが反対になっているため、 Flip する必要がある。
  • SplatMapの各チャンネル と Unity 上のペイントレイヤーは 1 対 1 の関係になっている。World Machine で SplatMap の各チャンネルへ格納するマスクを入れ替えたり、Unity のペイントレイヤーの順番を入れ替えると結果が変わるので注意。

手順

手順は大きく2通り存在する。

  1. Unity 公式のアセットである Terrain Tool を用いる方法
  2. World Machine が公式で配布している スクリプトを用いる方法

共通部分の手順

上記いずれの手順を用いた場合でも、 World Machine 上で地形を作成する。
作成した地形のハイトマップと SplatMap をエクスポートすれば World Machine 側での準備は完了する。 Splat Map は一言でいうと複数のマスクデータを一枚の画像に混ぜこんだ画像となるが、詳細は割愛する。

f:id:r9aArrowhead:20210714235536j:plain f:id:r9aArrowhead:20210714235543j:plain

World Machine 側での作業を終えた後は Unity 上の作業となる。
Terrain オブジェクトへ World Machine で作成したハイトマップをインポートして地形の形を編集する。

f:id:r9aArrowhead:20210714235550j:plain f:id:r9aArrowhead:20210714235557j:plain f:id:r9aArrowhead:20210714235604j:plain f:id:r9aArrowhead:20210714235611j:plain f:id:r9aArrowhead:20210714235618j:plain

次に Splat Map を用いて描画範囲を設定する対象となるレイヤーを、Paint モードから作成する。

f:id:r9aArrowhead:20210714235626j:plain f:id:r9aArrowhead:20210714235633j:plain f:id:r9aArrowhead:20210714235640j:plain

共通作業の最後として、プロジェクトへ World Machine で作成した SplatMap をインポートしておく。
ここまでが共通の作業となっており、以降は採用した方法によって内容が異なっている。

f:id:r9aArrowhead:20210714235648j:plain

Unity 公式のアセットである Terrain Tool を用いる方法

Terrain Tool を用いて SplatMap をインポートする場合は、まずアセットマネージャーで Terrain Tool をインポートしする。

f:id:r9aArrowhead:20210714235656j:plain

Terrain Toolでは SplatMap を設定するスロットを複数設定できる。より多数のペイントレイヤーを利用していた複数の SplatMap が必要な場合はスロットに追加していくことになる。

f:id:r9aArrowhead:20210714235704j:plain f:id:r9aArrowhead:20210714235712j:plain

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 が必要となっている。

f:id:r9aArrowhead:20210714235719j:plain

その後は公式配布のスクリプトをプロジェクトへ取り込んでからツール上で SplatMap を置き換えれば設定できるようになる。

f:id:r9aArrowhead:20210714235728j:plain f:id:r9aArrowhead:20210714235734j:plain f:id:r9aArrowhead:20210714235741j:plain f:id:r9aArrowhead:20210714235750j:plain

結果の比較

2通りの方法でインポートしたが、 Splatmap 取り込み後の結果に差異が存在した。
まず、インポート元となった World Machine 上での地形のビルド結果を示す。
元の地形では中央に水のようなものが存在するが、今回この部分はインポートしていない。

f:id:r9aArrowhead:20210714235757j:plain

次に、インポートした後の地形を並べたものがこちらとなる。

f:id:r9aArrowhead:20210714235806j:plain

それぞれ微妙だが結果に差異が存在する。
どちらが良いかは判断しないとして、取り込み方法で結果に差異が出る点は留意したい。

World Machine 公式配布スクリプトの補足

配布ページでは インポートした SplatMap の Texture Type を Advance にすると記述されているが、現在の Unity ではデフォルトで Advance 設定のパネルが表示されているので Texture Type はDefault のままでよい。

スクリプト実行時にエラー

SplatMap を取り込む際、下図1枚目のようなエラーが発生する時がある。
このエラーは Unity へ取り込んだ SplatMap の画像フォーマットを RGBA32bit へ設定していない場合に発生する。

f:id:r9aArrowhead:20210714235813j:plain f:id:r9aArrowhead:20210714235820j:plain