City サンプル プロジェクトは、シミュレートされたワールドを作成するために、Unreal Engine 5 で SideFX の Houdini Engine からプロシージャルに生成されたデータを使用する方法の技術的なデモンストレーションです。City サンプルは、Houdini から生成したデータを使用して、アセット、人口知能のためのドライブ シミュレーション、オーディオ シミュレーションなどを入力します。
このガイドは、Houdini Engine で生成したデータの Unreal Engine 5 へのインポートについて説明する 2 部構成のシリーズの第 1 部です。
この部分のガイドを完了するには、まず「City サンプル クイック スタート - Houdini を使用して街と高速道路を生成する」を実行している必要があります。
このガイドでは、次のことを学びます。
Houdini Engine から生成されたデータを Unreal Engine 5 にインポートする。
街に対応するオープン ワールド環境を準備する。
Rule Processor (ルール プロセッサ) を使用して Houdini のプロシージャルなデータをインポートして街を生成する。
トラフィック シミュレーションのためにゾーン グラフとともに点群データを使用する。
World Partition のために階層詳細度メッシュを生成する。
このガイドの前提条件
バージョン 18.5.532 が City サンプル プロジェクトの開発に使用するバージョンであるため、このバージョンを使用することをお勧めします。
データを抽出して小規模な街を生成するための 2 ギガバイト (GB) 以上のハード ディスクの空き領域。大きな街の場合、5 から 10 GB の領域を使用することがあります。
「City サンプルの推奨システムスペック」を参照してください
City サンプル Unreal Engine 5 プロジェクトを Epic Games Launcher でダウンロードします。
このガイドに関する追記
このガイドで使用するワークフローとファイルは、Windows 10 オペレーティング システムで動作します。Unreal Engine と Houdini は、Mac および Linux をサポートしていますが、ワークフローとソース ファイルはこれらのシステムでテストされておらず、意図したとおりに動作することは保証できません。
このガイドでは、コマンド プロンプトなどの使用時は Windows オペレーティング システムに関する知識があることも前提としています。
ステップ 1 - プロジェクトの設定と構成
ガイド「City サンプル:Houdini を使用して街と高速道路を生成する」に従って生成した街のデータを使用する前に、まず、Unreal Engine 5 でいくつかの項目を開いて設定する必要があります。
City サンプル プロジェクトを Unreal Engine 5 で開きます。
[Content (コンテンツ)] > [City (街)] の下にある コンテンツ ブラウザ で、Houdini で作成した街と同じ名前のフォルダを作成します。たとえば、パート 1 で作成した Houdini のサンプルの街ファイルの名前は、「MyCity」でした。したがって、コンテンツ ブラウザで作成したフォルダに「MyCity」という名前をつけます。
名前を付けた街のフォルダを開いて、「Geometry」と「PBC」という名前の新しいフォルダを作成します。
この City サンプル プロジェクトには Houdini Engine プラグイン が含まれており、すでに有効になっています。メイン メニューから、[Houdini Engine] ドロップダウン メニューを開き、[Create Session (セッションの作成)] を選択します。
セッションを作成できない場合、Output Log (出力ログ) をチェックして、その理由について追加のコンテキストを確認します。
この時点で、City サンプル プロジェクトが開いていて、自分の街のために Houdini で生成したデータをインポートするためのフォルダの場所が作成されています。街のための新しいフォルダがあり、その中に「Geometry」と「PBC」という名前の 2 つのフォルダが含まれています。
ステップ 2 - Unreal Engine 5 に街データをインポートする
街のフォルダが作成され、Houdini Engine セッションが前のステップで開始しているので、データを Unreal Engine 5 にインポートすることができます。
Windows で、Houdini の街データを保存したファイルの場所を開きます。「Houdini を使用して街と高速道路を生成する」のクイック スタート ガイドの最初のパートで、フォルダ パスを「
D:/CitySampleSource/MyCity
」として設定しました。Windows の「MyCity」フォルダで、「PBC」フォルダを開きます。Unreal Engine で、コンテンツ ブラウザ を使用して、「City > MyCity > PBC」フォルダを開きます。Windows で「PBC」フォルダのすべてのファイルを選択して、これらを Unreal Engine の「PBC」フォルダにドラッグします。
インポート プロセスが完了すると、「PBC」フォルダは以下のようになり、Houdini で生成されたインポート済み点群データが含まれています。
Windows の「MyCity」フォルダで、「EXPORT」フォルダを開きます。Unreal Engine で、コンテンツ ブラウザ を使用して、「City > MyCity > Geometry」フォルダを開きます。Windows で「EXPORT」フォルダのすべてのファイルを選択して、これらを Unreal Engine の「Geometry」フォルダにドラッグします。
このビデオは、Houdini で作成した小さな街がインポートされる完全なインポート プロセスを示すために再生速度を上げています。街のサイズによっては、インポート プロセスは時間がかかることがあります。たとえば、City サンプル プロジェクトに含まれている街のインポートにかかる時間は、Small_City の場合は 10 分未満ですが、Big_City の場合は 40 分以上かかることがあります。
[File (ファイル)] メニューを使用して、[Save All (すべて保存)] します。
この時点では、ジオメトリ および点群データ ファイルが、このガイドのステップ 1 で作成したフォルダにすべてインポートされ、アセットとして保存されています。これらのアセットは、次のステップで使用し、街の生成を開始します。
ステップ 3 - オープン ワールド レベルを準備する
このステップでは、テンプレート化された街のオープン ワールドから新しいレベルを作成します。このテンプレート レベルは、独自のライティングとスカイボックスを設定し、データの入力にブループリント スポーナーを使用して、City サンプルの街から自分の街を作成するための開始点を提供します。
[File] メニューを使用して、[New Level (新規レベル)] (1) を選択します。使用可能なテンプレートから [City Open World Empty (空の街のオープン ワールド)] (2) を選択して、[Create (作成)] (3) をクリックします。
新しいレベルを作成したら、[File (ファイル)] メニューを使用して、[Save Current Level As (名前を付けて現在のレベルを保存)] (1) します。「Content > Map」 (2) フォルダにマップを保存し、街の 名前 (3) をテキスト フィールドに入力します。たとえば、このガイドでは、MyCity をレベル名として使用しています。
[Save Level As(レベルに名前を付けて保存)] ウィンドウで、[Save (保存)] をクリックします。
これで、街の生成と構築に使用可能なレベルができました。
ステップ 4 - Rule Processor の生成を実行する
街の生成の開始に必要なすべてのデータはエンジンにインポートされており、これをロードして保存するマップがあります。このステップでは、エンジンにインポートした街と高速道路の点群データに Rule Processor を使用します。Rule Processor は、ワールドに入力するデータの使用方法を Unreal Engine に指示するルールに、Houdini Engine から生成した点群データをマップします。
メイン メニューから、[Window (ウィンドウ)] > [Rule Processor] を使用して、[RuleProcessor_City] を開きます。ウィンドウが開き、Houdini で生成したファイルを使用して、Unreal Engine で街を生成します。
クリックしてフルサイズ表示
[RuleProcessor_City] ウィンドウで、[Point Cloud (点群)] 列の割り当て済みアセットを「City > [YourCityName] > PBC」フォルダの同じ名前のアセットに置き換えます。たとえば、このガイドでは、「City > MyCity > PBC」フォルダにある、ステップ 2 でインポートしたファイルを使用しています。
[RuleProcessor_City] ウィンドウで、[Run Rules (ルールの実行)] を実行してインポート済み街ファイルを処理します。
ポップアップ ウィンドウで、処理の確認を求められます。準備が完了していれば、[OK] をクリックします。
街の生成にかかる時間は、街のサイズによって異なる場合があります。処理の完了に 15 分から 1 時間かかることがあります。
「PBC」フォルダにある 高速道路 の PBC ファイルに処理を繰り返します。メイン メニューから、[Window] > [Rule Processor] を使用して、[Processor_Freeway] を開きます。[Point Cloud (点群)] 列のアセットを「City > [YourCityName] > PBC」の同じ名前のアセットに置き換えます。たとえば、このガイドでは、「City > MyCity > PBC」フォルダにある、ステップ 2 でインポートしたファイルを使用しています。
[RuleProcessor_Freeway] ウィンドウで、[Run Rules] をクリックしてインポート済み高速道路ファイルを処理します。
ポップアップ ウィンドウで、処理の確認を求められます。準備が完了していれば、[OK] をクリックします。
街の生成にかかる時間は、街のサイズによって異なる場合があります。処理の完了に 15 分から 1 時間かかることがあります。
[World Partition] パネルで 左クリックしてドラッグ し、World Partition マップのすべてのセルを選択します。右クリック して [Load Selected Cells (選択したセルをロード)] を選択します。
街と高速道路の点群データに Rule Processor を使用すると、Unreal Engine に、ルールに基づいた街を生成するための情報が提供されます。これによって、エンジンはアセットを配置して、街を構築できるようになります。
Rule Processor がデータの処理を完了すると、World Partition エディタを使用して、街をレベル ビューポートにロードすることができます。ロード後、街を上から眺め、観察することができます。
ステップ 5 - トラフィック用のゾーン グラフに点群データを設定する
操作可能な街を構成して設定するレベルに、2 つのブループリント スポーナーが含まれています。つまり、自分の街用に小さな街で使用するデータ アセットを複製する必要があるということです。これらのデータ アセットは、インポートした点群データによって決まります。
レベル ビューポートで、[Show (表示)] ドロップダウン メニューを使用して、[Navigation (ナビゲーション)] が有効になっていることを確認します。
コンテンツ ブラウザ で、「Content > AI > Traffic」フォルダに移動します。
「ParkingSpaces」フォルダで、CitySampleSmallCityParkingSpaces データ アセットをコピーします。名前を変更し、「SmallCity」を自分の街の名前に置き換えます。たとえば、このガイドでは、CitySampleMyCityParkingSpaces を使用しています。
CitySampleMyCityParkingSpace データ アセットを開きます。[Parking Spaces Point Cloud (駐車場の点群)] 割り当てスロットで、City_cars_parked を自分の街の「Content > City > [YourCityName] > PBC」フォルダにある同じ名前のものに置き換えます。このガイドでは、「
Content/City/MyCity/PBC
」を使用しています。「Content > AI > Traffic」フォルダに戻ります。
「TrafficLights」フォルダで、CitySampleSmallCityTrafficLights データ アセットをコピーします。名前を変更し、「SmallCity」を自分の街の名前に置き換えます。たとえば、このガイドでは CitySampleMyCityTrafficLights を使用しています。
CitySampleMyCityTrafficLights データ アセットを開きます。[Traffic Lights Point Cloud (信号機の点群)] 割り当てスロットで、City_traffic を自分の街の「Content > City > [YourCityName] > PBC」フォルダにある同じ名前のものに置き換えます。
[World Outliner (ワールド アウトライナー)]で、「Builder」を 検索 テキスト フィールド (1) に入力します。CityTrafficBuilder_BP と FreewayTrafficBuilder_BP の両方のブループリントが返されます。これら各項目の横にマウスを置いて、名前の横にある ピン (2) アイコンをクリックし、これらをレベルにロードして編集します。
CityTrafficBuilder_BP をロードして、[World Outliner] (1) でこれを選択します。[Details (詳細)] パネルを使用して、自分の街用にインポートしたデータに既存の点群データを置き換えます。Mantle という名前のセクションの下で、City_traffic 点群データを [Epic Intersections Mantle Point Cloud (Epic 交差点の Mantle 点群)] 割り当てスロット (2) に割り当てます。
クリックしてフルサイズ表示
FreewayTrafficBuilder_BP をロードして、これを [World Outliner] (1) で選択します。[Details (詳細)] パネルを使用して、自分の街用にインポートしたデータに既存の点群データを置き換えます。Mantle という名前のセクションの下で、Freeway_traffic_data 点群データを [Epic Freeway Mantle Point Cloud (Epic 高速道路の Mantle 点群)] 割り当てスロット (2) に割り当てます。
クリックしてフルサイズ表示
[World Outliner]で、BP_MassTrafficIntersectionSpawner (1) を検索して選択します。[Details] パネルを使用して、[Mass (質量)] > [Spawn Data Generators (スポーン データ ジェネレータ)] > [Index [0]] > [Generator Instance (ジェネレータ インスタンス)] > [Traffic Lights (信号機)] にある [Traffic Light Instance Data (信号機インスタンス データ)] (2) 割り当てスロットを見つけます。データ アセットを、ガイドのこのパートで先に作成した、CitySampleMyCityTrafficLights という名前のデータ アセットに置き換えます。
クリックしてフルサイズ表示
[World Outliner]で、BP_MassTrafficParkedVehicleSpawner (1) を検索して選択します。[Details] パネルを使用して、[Mass] > [Spawn Data Generators (スポーン データ ジェネレータ)] > [Index [0]] > [Generator Instance (ジェネレータ インスタンス)] > [Entity Type to Parking Space Type (エンティティ タイプから駐車場タイプ)] にある [Parking Spaces(駐車場)] (2) 割り当てスロットを見つけます。データ アセットを、このガイドのこのパートで先に作成した CitySampleMyCityParkingSpaces という名前のデータ アセットに置き換えます。
クリックしてフルサイズ表示
小さな街で使用される駐車場と信号機の 2 つのデータ アセットができました。これらのデータ アセットで、自分の街の点群データが割り当てられています。これを次のゾーン グラフ生成のセクションで使用します。
ステップ 6 - トラフィックのゾーン グラフ生成を実行する
この時点で、街のレベルにあるさまざまなブループリント スポーナーで使用するデータ アセットが作成されています。データ アセットを使用して Houdini Engine から生成した一部の点群データをこれらのスポーナーに割り当てられています。
このステップでは、前のセクションでデータ アセットとブループリント スポーナーに割り当てた点群データを使用して、車線のゾーン グラフを生成するタスクの実行専用に作成されたエディタ ユーティリティ ウィジェットを使用します。
コンテンツ ブラウザ で、「Content > AI > ZoneGraphBuilder」に移動します。WBP_CitySampleZoneGraphBuilder という名前の [Editor Utility Widget (エディタ ユーティリティ ウィジェット)] を右クリックして [Run Editor Utility Widget (エディタ ユーティリティ ウィジェットの実行)] をクリックします。
クリックしてフルサイズ表示
[Editor Utility Widget] ウィンドウで、[City Traffic Builder (街のトラフィック ビルダー)] (1) と [Freeway Traffic Builder (高速道路のトラフィック ビルダー)] (2) の横にある両方の [Build Zone Shapes (ゾーン形状のビルド)] のボタンをクリックして、[Do All The Things! (すべて実行)] (3) をクリックします。
コンテンツ ブラウザ で、「Content > AI > Traffic > ParkingSpaces」フォルダに移動します。CitySampleMyCityParkingSpaces データ アセットを開きます。
[Parking Spaces Point Cloud (駐車場の点群)] 割り当てスロットで、City_cars_parked (1) を自分の街の「Content > City > [YourCityName] > PBC」フォルダにあるものに置き換え、[Populate Parking Spaces from Point Cloud (点群から駐車場を入力)] (2) ボタンをクリックします。
コンテンツ ブラウザ で、「Content > AI > Traffic > TrafficLights」フォルダに移動します。CitySampleMyCityTrafficLights データ アセットを開きます。
[Traffic Lights Point Cloud (信号機の点群)] 割り当てスロットで、City_traffic (1) を自分の街の「Content > City > [YourCityName] > PBC」フォルダにあるものに置き換え、[Populate Traffic Lights from Point Cloud (点群から信号機を入力)] (2) ボタンをクリックします。
ゾーン グラフのエディタ ユーティリティ ウィジェットを実行し、駐車場と信号機の両方のデータ アセットからデータを入力したら、レベル ビューポート内のデータから生成されるナビゲーションを視覚化できます。以下のようなナビゲーション データが表示されない場合、レベル ビューポートの [Show] メニューを使用して、[Navigation] が有効になっていることを確認するか、ホットキー P を押して、オンとオフを切り替えます。
ステップ 7 - 自分の街の World Partition HLOD を生成する
街の構築での重要な点として、サイズにかかわらず、遠くから街を見ることが必要になる場合があります。World Partition システムは、動的にストリーミング可能な単一の大きなアクタに複数のオブジェクトを結合できる階層詳細度 (HLOD) を使用して、遠距離を処理します。詳細については、「World Partition - Hierarchical Level of Detail」を参照してください。
次のステップは、World Partition を使用して、街に動的にストリーミング可能な自分の HLOD を生成することです。街のサイズが、自分のレベルでの HLOD の生成にかかる時間に関係する場合があります。エディタ内ツールを使用して、[Build(ビルド)] メニューからこれを実行します。あるいは、プロジェクトを閉じて Windows のコマンド プロンプトを使用することもできます。後者の方が、時間かかかりません。
Windows のコマンド プロンプトとコマンドラインの引数を使用する
Windows で、コマンド プロンプト ウィンドウを開きます。
自分のプロジェクトのフォルダの場所に応じて、ウィンドウに次のコマンドを入力します。
"D:\Builds\UE_5.0\Engine\Binaries\Win64\UnrealEditor-Win64-DebugGame-Cmd.exe" D:\UE5 Test Projects\CitySample MyCity.umap -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -Builder=WorldPartitionHLODsBuilder -D3D11
Enter を押して、プロセスを開始します。
コマンドライン引数は、次のように設定します。
"[FilePathOfYourEngineBuild]" [FilePathOfYourCitySampleProject] [YourMapName].umap -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -Builder=WorldPartitionHLODsBuilder -D3D11
「UnrealEditor-Win64-DebugGame-Cmd.exe」へのエンジン ファイル パス
CitySample プロジェクトへのファイル パス。プロジェクトがエンジン ディレクトリにある場合、プロジェクトの名前を使用できます。
開きたいマップ ファイル。
World Partition の実行と HLOD のビルドのための残りのコマンド引数。
エディタ内ツールを使用して HLOD をビルドする
メイン メニューから [Build (ビルド)] をクリックし、メニューから [Build HLODs (HLOD のビルド)] を選択します。
レベルを Save (保存) します。
レベル エディタでの作業時は、変更が加えられたことに気づかないことがあります。これは、World Partition を操作してレベルを編集しているときに、World Partition エディタがロードするセルを選択しているためです。ただし、HLOD をビルドする前に Play-in-Editor (PIE) または シミュレート を実行している場合、特定の距離にあるオブジェクトのみがロードされます。パフォーマンスの理由から、その距離を超えるものは空になり、ロードされません。
HLOD をビルドした後、PIE モードおよびシミュレート モード時に World Partition によって、動的にロードおよびアンロードされます。以下の例では、HLOD がビルドされない場合、特定の範囲内にあるカメラの近くにロードされた街の部分のみが表示されます。ただし、HLOD をビルドした後、World Partition は特定の範囲を超えるものに対して HLOD をロードします。
|
|
---|---|
HLOD のビルド前 |
HLOD のビルド後 |
ステップ 8 - 最終結果
この最終ステップでは、ゲームを開始したときにスポーンする街のレベルにプレイヤー スタートを配置します。
Play-in-Editor (PIE) を使用してプロジェクトを起動するときに、開始位置として指定する街の位置を見つけます。
地面近くで レベル ビューポート を右クリックし、コンテキスト メニューを使用して [Place Actor (アクタを配置)] > [Player Start (プレイヤー スタート)] を選択します。
シーンをクリックした場所に応じて、配置したプレイヤー スタートは、他のオブジェクトと交わっていたり、地面の上に浮いていることがあります。「Bad Size (不適切なサイズ)」などのエラー メッセージが表示されないように、プレイヤー スタートを移動します。
左はプレイヤー スタートの正しい配置で、右はプレイヤー スタートの不適切な配置。
レベル ビューポート のコントロールを使用して、Play-in-Editor ボタンを押します。
初めて play-in-editor または シミュレートを実行するときは、ロードに時間がかかることがあります。2 回目以降は、ロード時間は短くなります。
この時点で、プロシージャルな街を構築し、Unreal Engine 5 でインポートおよび設定できるように Houdini Engine に提供されたソース ファイルを使用して、街が正常に構築されています。また、自分の街や、小さな街と大きな街がどのように設定されているかを探索して再生することもできます。