loose import Landscape from World Machine to Unreal Engine
概要
WorldMachine で作成した地形データを UEで地形として利用する方法。
今回は World Machine を利用したが、 同じ方法で Terragen や Gaia などのソフトウェアからデータをインポートできる。
参考
前提
掲題の通りなので、 World Machine を所持していると想定。
また、このソフト自体の操作方法は割愛する。
手順
手順は大きく以下の通り
- World Machine で地形を作成する
- World Machine のハイトマップ(Height)およびテクスチャのマスクをエクスポート
- Unreal Engine のランドスケープでハイトマップをインポート
- Unreal Engine のマテリアルの準備
- Unreal Engine のランドスケープへテクスチャのマスクをインポート
World Machine で地形を作成する
下図のように、 World Machine 上で地形を作成する。
World Machine のハイトマップ(Height)およびテクスチャのマスクをエクスポート
World Machine の Output ノードを使って地形のハイトマップとノーマルマップ、地形の層毎にテクスチャのマスク情報をエクスポートする。
Unreal Engine のランドスケープでハイトマップをインポート
ここからようやく Unreal Engine 上での作業となる。
ランドスケープに World Machine で作成したデータを読み込ませていき、地形を作っていく。
ここでは新規プロジェクトを作成した。
地形の再現は基本的にハイトマップをインポートすればいいだけだが、若干の注意点が存在する。
下記 UE のドキュメントで記載されているように、地形データのインポート時は推奨される設定値が存在する。それぞれ推奨値よりも高くすることで地形の精度は上がるが、パフォーマンスとのトレードオフとなる点に留意する必要がある。
今回は World Machine 上の解像度と UE上での解像度を揃え、推奨値に従うような形の設定とした。
Unreal Engine のマテリアルの準備
ハイトマップを元にして地形を生成できたので、地形へ適用するマテリアルの準備を行う。
要点としては、 Landscape Layer Blend でレイヤーを追加してペイントモード時に各レイヤーへ割り当てるテクスチャを設定し、 Landscape Coordinate でランドスケープの UV 座標を作成する。
Unreal Engine のランドスケープへテクスチャのマスクをインポート
ここまででようやくランドスケープのペイントモードでレイヤー編集ができる状態となった。
後はマテリアルで作成したレイヤーへWorld Machine で作成したマスク情報をインポートするのみとなる。
実際にこれは何をしていたのか?
地形は作成できたが、じゃあこれはいったい何をしていたのかというのは分かりにくい。
一言でいうと、 ブラシなどを使って手作業でランドスケープの地形を変えたりテクスチャで地形を塗っていた作業を画像データで行った。 ということになる。
一方で、ランドスケープの地形やテクスチャをブラシを用いて直接編集した場合はレイヤー情報を都度作成していたという流れになる。
両者をフローで表すと下図のようになり、UEだけで地形を作成する場合との違いはデータを外部で作ったぐらいしかないことが分かる。
備考
マスクデータはなんで赤色になってるの?
World Machine からエクスポートした一部の画像が、 UE へインポートすると赤色へ変色することがある。
これは 画像のカラーチャンネルが1つしかないグレースケール画像をインポートしたから であり、カラーチャンネルが一つしかない場合、 UEでは赤色に変色する。
この原理はマテリアル編集画面でテクスチャをインポートした時の仕様で、 UE ではテクスチャのカラー情報を RGB のいずれかで出力するようになっている。
そして下図のように先頭のカラーチャンネルが R となっているため、単一のカラーチャンネルしか持たないグレースケールが先頭の R スロットを使って画像データを出力した結果画像が赤くなっている。
ただし、 RGB チャンネルを持った画像が 'R: 0, G: 0, B: 255' のような色を出力する場合は画像は青くなる。
このような画像ではカラーチャンネル自体は RGB 全てもっていてB 以外の値が 0になっているだけなので、 UE では RGB 各チャンネルを用いて画像を出力する。