World Composition (ワールド コンポジション) は大きなワールドの管理を簡略化することを目的としています。目的の 1 つは ストリーミング情報の格納にパーシスタント レベルの使用回避があります。 理由は、チーム内のレベルデザイナーが同時にレベルの作業を行うと、これがボトルネックとなってしまうからです。パーシスタント レベルは、ストリーミング情報を何も格納しない代わりにフォルダをスキャンして、 見つかったレベルすべてをストリーミング レベルとして扱います。それぞれのストリーミング レベルには、パッケージ ヘッダに保存した情報があります。 ワールド コンポジションは、メモリにレベルをロードせずにこの情報を読み込みむことができます。パーシスタント レベル以外の全レベルは、 最初はワールド コンポジションに読み込まれていません。ワールドのあらゆる部分を、いつでも手作業でロードまたはアンロードすることができます。
ワールド コンポジションは、ワールド基点移動機能に依存します。 この機能は、距離に基づいたレベルストリーミングと使用すると、定数値がエンジンにハードコーディングされた「WORLD_MAX」に限定しないワールドの作成を有効にします。
ワールド コンポジションはレベル ストリーミングに使用するレガシー システムです。Unreal Engine 5.0 以降を使用するプロジェクトでレベル ストリーミングを行う場合は World Partition の使用をお勧めします。
ワールド コンポジションをアクティブにする
ワールド コンポジションが管理するワールドは、[World Settings (ワールド設定)] の Enable World Composition フラグをオンに切り替えると有効にすることができます。
ワールド コンポジションが管理するワールドの基点は、ワールド設定 の Enable World Origin Rebasing フラグをオフに切り替えると無効にすることができます。

レベル階層
ワールド コンポジションを有効にすると、プロジェクト内のレベルがすべて [Level (レベル)] ウィンドウに表示されます。このウィンドウを開くには、
[Windows] メニューをクリックして [Level (レベル)] を選択します。
[Level (レベル)] ウィンドウのエントリは、ワールド階層を表します。

名前のテキストが青いレベルは現在のレベルを表します。現在、ロードされたレベルは名前が白いテキストで表示され、アンロードされたレベルは名前がグレーアウト表示になります。
レベルをワールド コンポジションに追加するには、名前を ダブルクリック します。ドラッグ&ドロップを使って、個々のレベル間の関係を作成することができます。 子レベルは親レベルの相対位置を格納するので、親レベルの位置が変更すると、すべての子レベルの位置も変化に応じて再計算されます。
[Level (レベル)] ウィンドウでは、レベルのロックと保存だけでなく、レベル名の右にあるボタンで各レベルの Level ブループリント を開くことができます。
レベル合成
ワールド コンポジションがオンの場合、[Level (レベル)] ウィンドウの上部にワールド合成を開くボタンがあります。

これはワールドのレイアウトです。

レイヤー
デフォルトでは、レベルはすべて Uncategorized レイヤーに割り当てられています。レイヤーは、ストリーミング距離に関する情報を保持するので、 特定のレイヤーに割り当てられたレベルはそのストリーミング距離を継承します。ストリーミング距離が無効にされたレイヤーに割り当てられたレベルは距離のストリーミングから取り除かれるので、 ブループリントを使った制御が可能になります。
新規レイヤーは、既存のレイヤー名の右にある Add (+) ボタンをクリックして作成します。 1 度にレイヤーに割り当てることができるレベルは 1 つだけです。
レイヤーの削除や編集ができないので、ストリーミング距離を変更する場合は、自身の設定値とレベルを割り当てて新規のレイヤーを作成するといいかもしれません。 割り当てたレベルがないレイヤーは、次回レベルを開くときに自動的に削除されます。
ミニマップ上のレイヤーをクリックすると、レイヤーでレベルをフィルタをかけることができます。Ctrl を押しながらマウスクリック 操作で、複数のレイヤー間のオン / オフを切り替えることができます。 オンに切り替えるレイヤーが存在しないとフィルタリング処理は実行できません。
ミニマップ
パーシスタント レベルを除くそれぞれのレベルは、ワールド内に画像があり位置が決まっています。レベルの画像は、 レベルのコンテンツが変更するたびに更新されます。このマップは、ワールドを上から捉えたプレビューを有効にして、注釈 他のレベルの端にスナップします。Ctrl キーを押すと、レベルの移動がレベル エディタのスナップ設定を 使用するようになります。レベル位置は整数座標系で格納されるので、 隣接するレベル タイルを完全に一致させる場合、レベルは整数のバウンドサイズでなけれななりません。
ランドスケープ アクタに基くレベルは、基本となるランドスケープ コンポーネント サイズに基いてスナップ処理されます。異なるレベルでランドスケープ アクタ間の編集を シームレスに行うためです。
ランドスケープを任意の量だけ移動したり、他のランドスケープ レベルとの調整機能が失うことができないようにするために、 すべてのランドスケープ アクタはエディタ ビューポートで平行移動を無効化します。
ワールド コンポジションに最初にレベルがロードされる時に、レベル内に新規の Level Bounds アクタが自動作成されます。 Level Bounds アクタはレベルのサイズ計算に使用されます。
Level Bounds アクタは、デフォルトではレベル内に存在するすべてのアクタを含むように自動的にリサイズされます。ただし、 中にはスカイボックスのように、かなり大きめのバウンディング ボックスを持つことができるアクタもあり、その場合ワールド ミニマップのレベル タイルが非常に大きくなる結果となります。 このようなアクタをレベル境界の計算から除外するためには、 レベル境界の自動計算を無効にして Level Bounds アクタに固定サイズを設定します。

Level Bounds アクタを機能させるためには、この時点でビューポートでリアルタイムが有効にされていなければなりません。
ミニマップ上の黄色い四角は、安全な編集領域を表します。安全な編集領域のサイズは、エンジンの WORLD_MAX
定数と同等です。
この領域外のレベルは自動的に非表示となり、それらのレベル画像に反映されます。ワールド コンポジションは、
作業中のレベルをエディタのワールド基点付近に保持しようとします。この機能は「focusing」と呼ばれ、
この安全な編集領域外のレベルでの編集を開始すると、現在のワールド基点を新しい位置に変更します。変更されたレベルにはアクタが保存された時に元の移動も保存されているので、
現在変更しているレベルを保存してもアクタの絶対位置は変わりません。
UI キー

番号 | ステータスバー | 説明 |
---|---|---|
1 | Layers | レイヤー名をクリックしてそのレイヤーによるフィルタリングに切り替えます。または、 + をクリックして新規レイヤーを作成します。 |
2 | WORLD_MAX |
WORLD_MAX 定数のスケールを示すバーです。 |
3 | World Origin | ワールド基点の現在位置です。 |
4 | Current level | 現在のレベルの名前です。 |
5 | Mouse cursor position | マウスカーソルの現在のワールド位置です。 |
6 | Marque selection | ワールド単位で示したマーキー選択ボックスのサイズです。 |
7 | World size | すべてのレベル バウンディング ボックスの合計として計算された、ワールドのサイズです。 |
レベルの詳細
[Level] ウィンドウにレベルの詳細を表示するには、対象を選択してツールバーの虫眼鏡アイコンをクリックします。これによって、 [Level Details (レベル詳細)] ウィンドウが呼び出され、ドロップダウン メニューの利用可能レベルの情報を切り替えることもできます。

タイル設定
設定 | 説明 |
---|---|
Package Name | 選択レベルのパッケージ名です。読み取り専用の情報です。 |
Parent Package Name | 親レベルのパッケージ名です。レベルに指定された親が存在する場合、位置は親レベルに相対的な場所となります。 |
Position | 0 のワールド基点からのレベル オフセットです。整数の 2D ベクターとして格納されます。レベル内のすべてのアクタは、レベルがワールドに追加された時にこの値で変更されます (表示されます)。そしてレベルがワールドから削除されると再び変更されます (非表示)。 |
Absolute Position | レベルの絶対位置です。親レベルがない時のレベルと同じ 位置 です。読み取り専用の情報です。 |
Z Order | ミニマップのレベル タイルの Z ソート順を定義します。重複タイルがいくつか存在したり、ユーザーが特定の順序でソートしたい場合に実用的です。 |
LOD 設定
ワールド合成のそれぞれのレベルは、最大 4 つまで LOD ストリーミング レベルを持つことができます。 ストリーミングの距離設定に合わせて、ストリーミング レベルは対応する LOD レベルと置き換えられます。LOD レベルは、[Package name]_LOD# パターンを利用して World Composition によって認識されます。この時、数値は 1 から 4 でなくてはいけません。 LOD レベルは手動あるいは自動 LOD マップ ジェネレーターで作成することができます。
設定 | 説明 |
---|---|
Num LOD | 選択したレベルの LOD レベルの数です。 |
LOD[1..4] | |
Generate | レベルに収容されているスタティックメッシュ アクタを 1 つの単純化したプロキシ メッシュへマージして、オリジナル レベルの簡素化版を作成します。ランドスケープ アクタは最も高いランドスケープ LOD を使ってスタティック メッシュに変換されます。一般的にランドスケープ アクタとたくさんのスタティックメッシュ アクタを伴うレベルは、簡易化された 2 つのスタティックメッシュ アクタを含む LOD レベルとなります。この操作により、ディスクに存在する以前の LOD レベルが上書きされます。 |
Distance | オリジナルのレベル ストリーミング距離と相対的な距離です。例えば、オリジナル レベルのストリーミング距離が 1000 で LOD1 レベルが 1500 の距離に設定されている場合、 LOD1 レベルは [1000..2500] 範囲とオリジナル レベルが [0..1000] 範囲の時に表示されます。 |
Details percentage | オリジナル メッシュの縮小時に詳細を維持する割合です。 |
ワールド基点の移動
World Composition エディタは、任意の量でワールド基点の移動をサポートします。ワールド基点を移動すると、結果としてワールドに登録されたすべての アクタ にオフセット ベクターを追加します。それぞれのアクタはには追加操作を行うために、子クラスでオーバーライドが可能な ApplyWorldOffset 関数があります。AActor の派生クラスを新規作成してこれに絶対位置の値を格納した場合、ワールド基点の変更に対応して正しく機能させるためには、ApplyWorldOffset 関数をオーバーライドして、絶対値を関数内へ移動しなくてはいけません。レンダリングと物理プリミティブは、ゲームスレッドのアクタへ平行移動します。
大きなワールドとマルチプレイヤー
現時点のワールド基点移動は、マルチプレイヤーゲームではサポートされていません。以下の 2 通りのソリューションは、特定のニーズに対して実行することができます。
- 各自のサーバーソリューションを実行する。MMO ライセンシーがよく行う方法です。
- クライアントとアンリアル デディケイテッド サーバー間にいくつかのレイヤーを実装することにより、変更した絶対位置をクライアントからトランスフォームし正しいデディケイテッド サーバーへ転送します。デディケイテッド サーバーはクライアントが存在するワールドの一部のみ保持します。
ただし、ワールド基点の移動を無効にしている場合、デディケイテッド サーバーでタイル化されたワールドを実行することができます。 デディケイテッド サーバーは距離に依存するすべてのレベルをロードし、それに接続されているクライアントは通常通りストリーミング距離設定を満たすレベルのみロードします。サーバーはクライアント別に可視設定のレベルのリストを保持し、このリストによってアクタ レプリケーションにフィルターをかけます。
ランドスケープ レベルの作成
レベル タイルを 右クリック すると、Landscape アクタの入っているコンテキスト メニューが呼び出され、それらにランドスケープ プロキシ アクタの隣接レベルを追加するためのオプションが表示されます。これには隣接レベルのランドスケープがソースとなるランドスケープのサイズと同等であることが必要となります。
タイル化したランドスケープのインポート
[Levels (レベル)] パネル ツールバーにタイル化したランドスケープのインポート用のオプションがあります。タイル化したランドスケープはタイル化したハイトマップから作成されます。それぞれのハイトマップ タイルはその中にあるランドスケープ アクタのレベルを表します。タイル化されたハイトマップ / ウェイトマップは World Machine などのアプリケーションからのエクスポートが可能です。隣接するハイトマップ タイルは、境界線の頂点を共有します (World Machine では「エッジ頂点を共有」します)。また、それぞれのタイルの解像度は、このページ ランドスケープを作成する の推奨に従ってください。

設定 | 説明 |
---|---|
Select Heightmap Tiles... | インポートしたいハイトマップ タイルを複数選択できます。 |
Flip Tile Y Coordinate | タイルを Y 軸反転でインポートするかどうかを設定します。World Machine で作成したタイルをインポートする場合はこのオプションはオフにしてください。 |
Tile Coordinates Offset | 原点からタイルをオフセットします。0 に設定すると、座標軸 x0_y0 のタイルがワールド基点に作成されます。 |
Import Configuration | 選択したタイルの解像度に合わせて、可能な限りのランドスケープ コンフィギュレーションを作成します。 |
Landscape Scale | タイル化したランドスケープのスケール量です。 |
Material | 使用するマテリアルです。マテリアルが選択されると、マテリアルに存在するそれぞれのランドスケープ レイヤーに対してウェイとマップと各レイヤーのブレンド方法の割り当てが可能になります。 |
タイル化されたランドスケープをインポートすると、ミニマップのコンテキスト メニューを 右クリック すれば、選択中のレベルに対してハイトマップとウェイとマップを再インポートできます。