Monday, May 4, 2020

[UE4でオープンワールド] A Boy and his Kiteで見るWorld Composition機能

UE4でオープンワールドを構築した、A Boy and his Kite(いわゆるKite Demo)を使ってWorld Composition機能の使われ方を確認します。UE4.24を使います。

KiteデモのプロジェクトはLearnタブの中からダウンロード可能です。


スペック十分なら GDC_Landscape_01 というレベルを開くようにガイドされます。
24GBのメモリ搭載が必要とのことです。

何も配置されていないかのようなレベルが現れますが、これはランドスケープ等が全てサブレベルに配置されており、サブレベルがロードされていないためです。Playボタンを押すとプレイヤー周辺のランドスケープが自動的にロードされます。

Playボタンを押すと、レベルを自由に散策するモードになりますが、コンソールで"PlayKiteCine"と入力すると「少年と凧」の映像が再生されます。


Persistent LevelにEnable World Compositionがチェックされていることに注目です。


Enable World CompositionをチェックするとLevelsタブの使い方が根本的に変わります。複数のサブレベルが見えますが、これらは明示的に追加したものではなく、Persistent LevelであるGDC_Landscape_01の存在するフォルダ以下のレベルが自動的に管理下に入ります。

Levelsタブのサブレベルをダブルクリックするとサブレベルがロードされます。編集したい所だけを選んでロードできるのは便利です。


World Compsitionタブを開くには、Levelsタブのこのボタンを押します。


世界全体を上から俯瞰した図が出現します。
編集中やプレイ中にはWorld Compositionタブ内に矢印が表示され、現在地を表示するミニマップの役割もしてくれます。

 Altキーを押すと、どのようにサブレベルで区切られているかが可視化されます。
ここで、マウスカーソルを動かすとマウスカーソル周囲のサブレベルの枠が緑色になります。これはプレイヤーがマウスカーソルの位置にいる時にロードされる領域であることを示しています。各サブレベルにカーソルをあわせた時に表示されるStreaming Distanceは、プレイヤーがこの距離以内に近づいた時にそのサブレベルがロードされることを示します。

上の、「Uncategorized」「Distance-AlwaysLoaded」「5km」「CineStreamLayer」という表示はレベルが属するレイヤーを示します。用語がややこしいですが、アクターが属するレイヤーとは別物です。このレイヤーの役割は名前からわかりにくいですが同じStreaming Distanceを共有するサブレベルです。Uncategorizedはいわばデフォルトのレイヤーで、50,000(500メートル)まで近づくとロードされます。Distance-AlwaysLoadedは 2,147,483,647(2000万キロメートル)が設定されており、つまり常にロードされたままになります。一方、CineStreamLayerはStreaming Distance Disabledとされ、プレイヤーとの距離によるロードを無効化、つまり開発者が自分でロードするサブレベルということになります。

Level Detailsタブを呼び出してみます。

ここでは、各サブレベルに対する設定を行えます。サブレベルのLODやFoliage, Grassをベイクするかなどが選べるようです。ここで編集できるのはロード中のサブレベルに限られており、選択肢に出るレベルはWorld Compositionタブで選んだレイヤーに属するレベルにフィルタリングされているようです。

各サブレベルにはLevelBoundsというアクタが存在し、World Composition上のサブレベルの区画を定義するのに使われています。区画は自動で計算されるようですが、手動で設定することもできるようになっています。



2019年はVirtual TexturingやBlueprint Custom Brushes、Landscape Layer system、Sky Atmosphere等、オープンワールド構築に役立ちそうな機能が次々に追加され、これからUE4を利用したオープンワールド制作が盛り上がりそうな予感がします。

その中でもWorld CompositionはKite Demoで使われていることもあり、歴史の長い部類です。実際試してみると、サブレベルを置くだけで勝手にストリーミングしてくれる手軽さは魅力で、いわゆるオープンワールド的な広大な世界を舞台としたゲーム以外でも便利に使えそうです。