ニッチなblender手記

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

loose import Landscape from World Machine to Unreal Engine

概要

WorldMachine で作成した地形データを UEで地形として利用する方法。
今回は World Machine を利用したが、 同じ方法で Terragen や Gaia などのソフトウェアからデータをインポートできる。

f:id:r9aArrowhead:20210708111714p:plain

参考

UE doc - ランドスケープ マテリアル

UE doc - ランドスケープのクイックスタートガイド

UE doc - ランドスケープ ペイントモード

UE doc - ランドスケープのテクニカルガイド

前提

掲題の通りなので、 World Machine を所持していると想定。
また、このソフト自体の操作方法は割愛する。

手順

手順は大きく以下の通り

World Machine で地形を作成する

下図のように、 World Machine 上で地形を作成する。

f:id:r9aArrowhead:20210708111250p:plain

World Machine のハイトマップ(Height)およびテクスチャのマスクをエクスポート

World Machine の Output ノードを使って地形のハイトマップとノーマルマップ、地形の層毎にテクスチャのマスク情報をエクスポートする。

importFromWM_002.PNG (118.2 kB) f:id:r9aArrowhead:20210708111259p:plain

Unreal Engineランドスケープでハイトマップをインポート

ここからようやく Unreal Engine 上での作業となる。
ランドスケープに World Machine で作成したデータを読み込ませていき、地形を作っていく。 ここでは新規プロジェクトを作成した。

f:id:r9aArrowhead:20210708111308p:plain

地形の再現は基本的にハイトマップをインポートすればいいだけだが、若干の注意点が存在する。
下記 UE のドキュメントで記載されているように、地形データのインポート時は推奨される設定値が存在する。それぞれ推奨値よりも高くすることで地形の精度は上がるが、パフォーマンスとのトレードオフとなる点に留意する必要がある。

UE doc - ランドスケープのテクニカルガイド

今回は World Machine 上の解像度と UE上での解像度を揃え、推奨値に従うような形の設定とした。

f:id:r9aArrowhead:20210708111318p:plain f:id:r9aArrowhead:20210708111327p:plain f:id:r9aArrowhead:20210708111334p:plain f:id:r9aArrowhead:20210708111344p:plain

Unreal Engine のマテリアルの準備

ハイトマップを元にして地形を生成できたので、地形へ適用するマテリアルの準備を行う。
要点としては、 Landscape Layer Blend でレイヤーを追加してペイントモード時に各レイヤーへ割り当てるテクスチャを設定し、 Landscape Coordinateランドスケープの UV 座標を作成する。

UE doc - ランドスケープ マテリアル

UE doc - ランドスケープ ペイントモード

f:id:r9aArrowhead:20210708111359p:plain f:id:r9aArrowhead:20210708111409p:plain f:id:r9aArrowhead:20210708111422p:plain f:id:r9aArrowhead:20210708111432p:plain f:id:r9aArrowhead:20210708111440p:plain f:id:r9aArrowhead:20210708111448p:plain f:id:r9aArrowhead:20210708111505p:plain f:id:r9aArrowhead:20210708111516p:plain f:id:r9aArrowhead:20210708111525p:plain f:id:r9aArrowhead:20210708111536p:plain f:id:r9aArrowhead:20210708111544p:plain f:id:r9aArrowhead:20210708111552p:plain f:id:r9aArrowhead:20210708111601p:plain f:id:r9aArrowhead:20210708111614p:plain

Unreal Engineランドスケープへテクスチャのマスクをインポート

ここまででようやくランドスケープのペイントモードでレイヤー編集ができる状態となった。
後はマテリアルで作成したレイヤーへWorld Machine で作成したマスク情報をインポートするのみとなる。

f:id:r9aArrowhead:20210708111622p:plain f:id:r9aArrowhead:20210708111631p:plain f:id:r9aArrowhead:20210708111646p:plain f:id:r9aArrowhead:20210708111655p:plain f:id:r9aArrowhead:20210708111705p:plain f:id:r9aArrowhead:20210708111714p:plain f:id:r9aArrowhead:20210708111724p:plain

実際にこれは何をしていたのか?

地形は作成できたが、じゃあこれはいったい何をしていたのかというのは分かりにくい。
一言でいうと、 ブラシなどを使って手作業でランドスケープの地形を変えたりテクスチャで地形を塗っていた作業を画像データで行った。 ということになる。

一方で、ランドスケープの地形やテクスチャをブラシを用いて直接編集した場合はレイヤー情報を都度作成していたという流れになる。

両者をフローで表すと下図のようになり、UEだけで地形を作成する場合との違いはデータを外部で作ったぐらいしかないことが分かる。

f:id:r9aArrowhead:20210708111741j:plain

備考

マスクデータはなんで赤色になってるの?

World Machine からエクスポートした一部の画像が、 UE へインポートすると赤色へ変色することがある。
これは 画像のカラーチャンネルが1つしかないグレースケール画像をインポートしたから であり、カラーチャンネルが一つしかない場合、 UEでは赤色に変色する。

この原理はマテリアル編集画面でテクスチャをインポートした時の仕様で、 UE ではテクスチャのカラー情報を RGB のいずれかで出力するようになっている。
そして下図のように先頭のカラーチャンネルが R となっているため、単一のカラーチャンネルしか持たないグレースケールが先頭の R スロットを使って画像データを出力した結果画像が赤くなっている。

f:id:r9aArrowhead:20210708111732p:plain

ただし、 RGB チャンネルを持った画像が 'R: 0, G: 0, B: 255' のような色を出力する場合は画像は青くなる。
このような画像ではカラーチャンネル自体は RGB 全てもっていてB 以外の値が 0になっているだけなので、 UE では RGB 各チャンネルを用いて画像を出力する。