tpc17-2

TOPIC 17|PLATEAU SDKでの活用[2/2]|PLATEAU SDK for Unrealを活用する

PLATEAU SDK for Unrealとは、PLATEAUの豊富なデータを活用して実世界を舞台にしたアプリの開発や都市シミュレーション等を行うためのツールキットです。このトピックでは、PLATEAU SDK for Unrealの利用方法を説明します。

Share

【目次】

17.4  PLATEAU SDK for Unrealとは

 17.4.1  PLATEAU SDK for Unrealの機能

17.5  PLATEAU SDK for Unrealを使用する

 17.5.1  サンプルプロジェクトを導入する

 17.5.2  PLATEAU SDK for Unrealを使用する

17.6  PLATEAU SDK for Unrealでできること

 17.6.1  GISサンプルアプリ

 17.6.2  GISサンプルの3D都市モデルの変更

 17.6.3   ゲームサンプルアプリ

 17.6.4   ゲームサンプルの3D都市モデルの変更

17.4 _ PLATEAU SDK for Unrealとは

図17-33

PLATEAU SDK for UnrealはPLATEAUをUnreal Engine5で活用するためのオープンソースのツールキットです。PLATEAU SDK for Unrealを利用することで、実世界を舞台にしたゲームの開発やPLATEAUの豊富なデータを活用した都市シミュレーションを簡単に行うことができます。

PLATEAU SDK for Unrealのユーザーマニュアルは、次のURLで開けます。

https://Project-PLATEAU.github.io/PLATEAU-SDK-for-Unreal

ここでは、PLATEAU SDK for Unrealを初めて利用するユーザー向けのチュートリアルとして、SDKの解説と、SDKで何ができるのかを知っていただくための2種類のサンプルアプリの利用方法について解説します。

17.4.1 _ PLATEAU SDK for Unrealの機能

図17-34 PLATEAU SDKの概要

PLATEAU SDK for Unrealでは以下の機能を提供しています。

[1]都市モデルインポート機能

都市モデルインポート機能では、PLATEAUの3D都市モデル標準製品仕様書(第2版シリーズ)に準拠しているすべての3D都市モデルデータを入力としてUnrealのレベルにインポートできます。

図17-35 PLATEAU SDKでのデータの流れ

インポート処理は以下の流れで行われます。

1. ファイルの取得

必要なCityGML、コードリスト、テクスチャファイルを検索し取得します。インポート元のファイルはローカルに保存されているものだけでなく、PLATEAUのサーバーからインポートすることも可能です。

2. 3D都市モデルの抽出

インポート時に設定された座標範囲内の3D都市モデルを抽出します。範囲指定は座標最小値・最大値を入力とした矩形選択が可能です。

3. 平面直角座標への座標投影

CityGMLの各座標は緯度経度で保持されています。Unreal内ではメートル単位で座標値を扱う必要があるため、各座標は平面直角座標に変換されます。また、この際に各地物がレベル内で原点近くに表示されるようにオフセットをかけています。オフセット値は選択範囲の中心で初期設定されますが、インポート設定で自由なオフセット値に変更することも可能です。

4. CityGMLの形状データのポリゴンメッシュへの変換

CityGMLの形状データはそのままの形式ではゲームエンジンで可視化できないため、インポート時にポリゴンメッシュへ変換しています。変換されたポリゴンメッシュはUnrealワールド内でStaticMeshコンポーネントとして可視化されます。ポリゴンメッシュに変換する際の結合単位は主要地物単位(建物、道路等)、最小地物単位(壁面、屋根面等)、地域単位(100m×100mの範囲の地物をすべて結合)から選択することができます。

[2]都市モデル調整機能

インポート機能でシーンにインポートされた3D都市モデルの見た目の調整が行えます。具体的には、以下の設定によって各地物の表示/・非表示の切り替えができます。

● LOD

● 地物タイプ

 ◯ 建築物、道路、起伏等

 ◯ 最小地物単位でインポートされている場合、壁面、屋根面等面単位での表示/非表示ができます。

【メモ】LODとは

CityGMLには、各地物について複数の形状データが格納されている場合があります。LOD0がもっとも大まかな形状で、LOD1、LOD2 と数字が上がるほど細かい形状になります。建築物の場合、LOD0 は平面、LOD1は平面に一定の高さを付けたもの、LOD2はより細かい形状です。

[3]属性情報取得機能

図17-36 CityGMLとゲームエンジンでのオブジェクトの対応

属性情報取得機能では、ブループリント、C++ユーザー向けのAPIを提供しています。APIを利用することでCityGMLに含まれるすべての属性情報にアクセスできます。インポートされた都市モデルに含まれるコンポーネントの名前はCityGMLでのIDに対応しているため、各コンポーネントの名前をAPIに入力することで付随する属性情報を取得できます。属性情報取得機能の詳細についてはユーザーマニュアルの属性情報へのアクセスのページをご覧ください。

[4]都市モデルエクスポート機能

都市モデルエクスポート機能では、インポートされた3D都市モデルを3Dファイル形式でエクスポートできます。

出力設定は以下の通りです。

ファイル形式OBJ、FBX、glTFに対応しています。
テクスチャ出力するメッシュにテクスチャを含めるかどうかを選択します。
非表示モデルを含める都市モデル調整機能で非表示に設定されたオブジェクトを含めるかどうかを選択します。
座標変換出力座標系をローカル座標(Unrealワールド内での座標)と平面直角座標から選択します。
座標軸出力されるメッシュの座標軸を設定します。

17.5 _ PLATEAU SDK for Unrealを使用する

PLATEAU SDK for Unrealは、Unreal Engine向けのプラグインとして提供されています。本チュートリアルではSDKのサンプルを含んだプロジェクトを使用して解説しますが、個別のプロジェクトにSDKを導入する場合はユーザーマニュアルのインストール手順に従ってください。

17.5.1 _ サンプルプロジェクトを導入する

PLATEAU SDK for Unreal は、Unreal Engine 5.0.3を想定しています。

そのバージョンがインストールされていない場合は、次の手順でインストールしてください。

1. Epic Games Launcher をこちらからインストールします。

2. Epic Games Launcherを開き、[Unreal Engine]→[ライブラリ]→[+]の順に選択します。

図17-37 Epic Games Launcherの画面

3. 5.0.3のバージョンを選択してから[インストール]ボタンをクリックします。

[3]サンプルアプリの導入

1. PLATEAU SDK for Unreal SamplesのページからサンプルアプリのUnrealプロジェクトをダウンロードしてzipファイルを展開します。

2. 展開したフォルダ内にあるPLATEAUUnrealSamples.uprojectをダブルクリックすることでプロジェクトを開くことができます。

17.5.2 _ PLATEAU SDK for Unrealを使用する

[1]データのダウンロード(ローカルのデータを利用する場合)

PLATEAUの3D都市モデルデータは、G空間情報センターの3D都市モデル(Project PLATEAU)ポータルサイトで公開されています。ポータルサイトから地域を選び、CityGMLデータをダウンロードして展開します。

https://www.geospatial.jp/ckan/dataset/plateau

図17-38 CityGMLのダウンロード

[2]インポート元の選択(ローカル)

ここからは、ユーザーマニュアルの都市モデルのインポートのページに沿って、展開したデータをインポートします。

UE5のメニューバーから [PLATEAU]→[PLATEAU SDK]を選択してSDK画面を開きます。上部のタブから[インポート]を選択してインポート画面を開きます。

フォルダパスには、展開したCityGMLデータの最上位フォルダ(「udx」などの1つ上の階層のフォルダ)を設定します。

図17-39 フォルダパスの設定

[3]インポート元の選択(サーバー)

ローカルのデータではなくサーバーから直接シーンに3D都市モデルをインポートしたい場合、インポート元として[サーバー]を選択します。サーバー上に存在するデータセットの一覧が表示されるので、取得したいデータセットを選択します。

図17-40 サーバーのデータセットの選択

[4]基準座標系の選択

リストのうち、データが存在する場所として近いものを選択します。基準座標系が離れすぎている場合、インポートした3D都市モデルに歪みが生じてしまうのでご注意ください。

図17-41 基準座標系の選択

[5]インポート範囲の選択

範囲選択ボタンを押すと範囲選択画面が開きます。 

図17-42 範囲選択画面

● 範囲選択画面の操作方法:

 ◯ マウスホイールを上下に回してズームアウト、ズームインします。

 ◯ 左クリックしながらマウスを移動してカメラ移動します。

 ◯ オレンジ色の球体をドラッグして範囲を選択します。

 ◯ ビューポート左上の[決定]ボタンを押して範囲を確定します。

● 画面の見方:

 ◯ 青色の線は利用可能な地域を示します。

 ◯ 地域ごとに利用可能なGML種別と対応LODがアイコン形式で表示されます。

 ◯ 地図は国土地理院のサーバーから自動でダウンロードされて表示されます。インターネットへの接続が必要です。

[6]地物別設定

地物の種類ごとにインポートに関する設定を行います。

設定項目について:

● インポートする

 ◯ チェックが付いている地物タイプのみインポートします。

● テクスチャを含める

 ◯ テクスチャが存在する地物タイプで表示される設定項目です。

 ◯ チェックが付いていて、かつテクスチャがある場合はそれを含めてインポートします。

 ◯ 都市によってはテクスチャがない場合があり、その場合はチェックを外した時と同様に真っ白な3D都市モデルが出力されます。

● LOD描画設定

 ◯ 複数のLODを利用可能な地物タイプで表示される設定項目です。

 ◯ 最小LOD、最大LODを指定して、インポートするLODの範囲を指定できます。

● モデル結合

 ◯ 主要地物単位(建築物,道路等)

  モデルのメッシュは建物ごとに結合されて出力されます。建物ごとに地物データを取得できるようにしたい場合はこちらを選択します。

 ◯ 最小地物単位(壁面,屋根面等)

  屋根、壁単位など非常に細かくオブジェクトを分けたい場合はこちらを選択します。

 ◯ 地域単位

  モデルのメッシュは結合されて出力されます。オブジェクト数を削減して軽量化できますが、建物ごとの地物データは取得不可になります。メッシュの結合はある程度の大きさの範囲ごとに行われます。

[7]インポートの実行

[モデルをインポート]ボタンをクリックするとインポートが開始されます。

PLATEAUCityModelLoaderアクタの詳細パネルにインポート処理の進捗が表示されます。 処理が進むと、都市のオブジェクトが順次ワールドに配置されていきます。進捗が「100.0」になったらインポート終了です。

図17-43 インポートの進捗表示
図17-44 インポートされた3D都市モデル

配置されたアクタの詳細パネル(図17-45)から緯度、経度などの情報を確認できます。

 図17-45 都市モデルの緯度経度情報

【メモ】

インポート元となるファイルはContent/PLATEAU/Datasetsフォルダにコピーされます。インポート処理で生成されたテクスチャアセットはContent/PLATEAU/Texturesフォルダに保存され、2回目以降のインポートで同じテクスチャを利用する場合は既に保存されたアセットが再利用されます。

[8]各機能へのアクセス

SDKの各機能にはSDK画面の上部タブ(図17-46)からアクセスできます。SDKの機能を利用することで、インポートした3D都市モデルについて表示地物の調整・3Dファイル形式へのエクスポート・属性情報へのアクセスができます。各機能の利用方法はユーザーマニュアルを参照してください。

図17-46 SDKの機能タブ

17.6 _ PLATEAU SDK for Unrealでできること

PLATEAU SDK for Unrealを利用することで、PLATEAUの3D都市モデルを活用したGIS、AR/VR、ゲーム等、さまざまなアプリケーションを開発できます。このトピックではサンプルを使用してSDKを利用して実際にどのようなアプリケーションが作れるかについて解説します。

17.6.1 _ GISサンプルアプリ

PLATEAU SDKでは、どのような属性情報にアクセスできるかを知るためのチュートリアルとして、GISサンプルアプリを提供しています。GISサンプルアプリでは、PLATEAUの3D都市モデルのさまざまな属性情報の表示や、属性情報に応じたフィルタリング・色分けができます。GISサンプルアプリは、サンプルプロジェクトに含まれるContent/GISSample/GISSample_Map.umapを開き、プレイすることで実行できます(初期化処理に時間がかかることがあります)。

図17-47 GISSample_Mapをプレイしたところ

[1]カメラ操作

カメラの移動や回転には、マウスを使います。

水平移動左ボタン+ドラッグ
回転右ボタン+ドラッグ
前後移動ホイール回転
上下左右移動中央ボタン+ドラッグ または
左ボタン+右ボタン+ドラッグ

[2]属性の確認

地物をクリックすると、その地物がハイライトされ、属性情報が表示されます。(図17-53)

3D都市モデルに含まれる各地物(建築物、道路など)の属性情報の可視化は以下の流れで行われています。

● クリックされたゲームオブジェクトの取得

● ゲームオブジェクトに対応する地物の属性情報の取得

● 属性情報のUIへの表示

クリックされたゲームオブジェクトの取得

ゲームオブジェクトの取得にはGet Hit Result UnderCursor for Objects関数を使用しています(図17-48)。画面上をクリックした際、カメラの原点からクリックされた地点に向けて仮想のビームが射出されて、ビームの衝突情報(Hit Result)から衝突したコンポーネント(Hit Component)を取得しています。

図17-48 クリックされたコンポーネントの取得(BP_GISCameraActor)

ゲームオブジェクトに対応する地物の属性情報の取得

先ほど取得された地物のコンポーネント(Hit Component)から属性情報を取得するには、まずGet City Object Info関数とLoad Async関数を利用してCityGMLの読み込みを行います。Get City Object Info関数に地物のコンポーネントとインポートされた都市モデルのアクタ(City Model Instance)を入力し、その出力をLoad Async関数に入力します。Load Async関数はCityGMLを読み込み、読み込まれた3D都市モデルの情報(City Model)を出力します。GISSampleでは初期化時にすべてのCityGMLを読み込んでいるため、ここで得られたCity Modelは一度配列に保存されています。

図17-49 City Modelの取得(BP_GISCityObjectManager)

City Modelには、3D都市モデルに含まれる複数の地物の情報が格納されています。地物の情報を取得するには、まず先程のGet City Object Info関数(図17-49)から得られたID情報をGet City Object by ID関数に入力して、地物の情報(City Object)を取得します(図17-50)。さらにCity ObjectからGet Attribute Map関数を呼び出すことで、地物の属性情報を連想配列(TMap)として取得します(図17-51)。

図17-50 City Objectの取得(BP_CityObjectManager)
図17-51 属性情報の取得(BP_CityObjectManagerのView Attribute関数)

属性情報のUIへの表示

GISSampleでは、UIの構築にUnreal Motion Graphics UI デザイナ(UMG)を使用しています。属性情報UIのWidget ブループリントでは、デザイナー画面でスクロールビューに2つのテキストを含んだ要素を上下に並べるように設定してあります(図17-52)。グラフ画面で属性情報の連想配列からすべてのキーと値を取得して、それぞれの組み合わせについてUIを追加していくことで属性情報UIを構成しています(図17-53)。

図17-52 属性情報UIの表示設定(WBP_HUD)
図17-53 属性情報のUIへの表示(WBP_HUD)
図17-54 属性情報の表示

[3]属性による色分け表示

高さや各種浸水ランクで、地物を色分けすることができます。

SDKでインポートされた各地物のマテリアルには、色を変更するためのパラメータとして、テクスチャ付きの場合は[BlendColor]パラメータが、テクスチャ無しの場合は[BaseColor]パラメータが提供されています。GISSampleでは両方のマテリアルに対応するために、両方のパラメータの値を変更しています。

図17-55 StaticMeshComponentへの色の設定(BP_GISCityObjectManager)
図17-56 色分けを選択するラジオボタン
図17-57 高さで色分けしたところ

[4]フィルタリング

高さやLODの範囲を指定し、指定された範囲内の地物だけを抽出することができます。

GISSampleでは各地物の表示・非表示切替のために、Set Visibility関数で描画を、Set Collision Enable関数でコリジョンを切り替えています。

図17-58 コンポーネントの表示・非表示切替(BP_GISCityObjectManager)
図17-59 フィルタリングの設定を行うスライダー
図17-60 高い建物を抽出したところ

17.6.2 _ GISサンプルの3D都市モデルの変更

3D都市モデルを、任意の地域に変更することができます。

[1]3D都市モデルの削除

GISSampleレベルに配置されている3D都市モデルのアクタ(初期状態では「13100_tokyo23-ku_2020_citygml_3_2_op」)を削除します。

図17-61 削除するアクタ

[2]3D都市モデルのインポート

利用したい3D都市モデルをインポートします。インポート方法については「17.5.2 _ PLATEAU SDK for Unrealを使用する」を参照してください。

※地物別設定では[土地起伏]の[インポートする]のチェックを外してください。

【メモ】

起伏については、インポートしてもしなくても機能的には影響ありません。
また道路なども、必要なければインポートしなくても問題ありません。
インポートが完了すると、レベルに3D都市モデルのアクタが配置されます。

[3]City Model Instanceの設定

BP_GISCityObjectManagerアクタのCity Model Instanceプロパティに、3D都市モデルのアクタを設定します。

図17-62 City Model Instanceの設定

[4]位置の調整

BP_CameraActorの位置を調整し、3D都市モデルがビューポートに収まるようにします。

図17-63 BP_CameraActorの位置調整

[5]プレイ

プレイすると、インポートした3D都市モデルの属性の確認や色分け表示ができます。

17.6.3 _ ゲームサンプルアプ

都市モデルの見栄えの調整とインタラクションの作成方法について知るためのチュートリアルとして、ゲームサンプルアプリを提供しています。ゲームサンプルアプリでは、都市モデル内で自動車の走行を再現できます。ゲームサンプルアプリはサンプルプロジェクトに含まれるGameSample_Map.umapを開き、プレイすることで実行できます。

図17-64 GameSample_Mapをプレイしたところ

[1]操作

自動車を動かすには、キーボードを使います。

Wアクセル
Sブレーキ/バック
A / Dハンドル操作

[2]車両アセット

この自動車には、Unreal Engineの車両物理シミュレーション用システム「Chaos Vehicle」を使用しています。

ブループリント内で、キーボードからブレーキ、スロットル、ハンドルの値を入力して、Chaos Vehicleの各値に設定することで車両制御を行っています。

図17-65 車両制御(BP_Vehicle)

[3]車両の初期位置の設定

車両の初期位置(スポーン位置)はPlayer Startアクタによって指定されています。Player Startアクタはワールド内でのプレイヤーの開始位置を定義するためのアクタで、ゲームモードのDefault Pawn Classで指定されたブループリントをスポーンさせます。

図17-66 車両の初期位置設定

17.6.4 _ ゲームサンプルの3D都市モデルの変更

[1]都市モデルの差し替え

GISSampleと同様、GameSampleでも都市モデルを変更できます。

インポート済みの都市モデルを削除したうえで、「17.5.2 _ PLATEAU SDK for Unrealを使用する」に従って都市モデルをインポートしてください。

※地物別設定では、[都市計画決定情報][土地利用][災害リスク]の[インポートする]のチェックを外してください。

【メモ】

起伏をインポートしないと、道路と建物の間に隙間ができたりします。

[2]位置の調整

PlayerStartアクタを自動車の初期位置にしたい場所に設定します。

図17-67 PlayerStartの位置調整

ここまでの手順だけでも機能しますが、以下の設定を行うと、道路の見映えが良くなります。

[3]土地起伏の位置調整

3D都市モデルのアクタに属する土地起伏のコンポーネントで道路が隠れないよう、土地起伏のコンポーネントのZ座標を-25程度にします。
土地起伏のコンポーネントは、名前に「dem」が含まれています。

図17-68 土地起伏のコンポーネント

[4]道路のマテリアル設定

道路のコンポーネントのマテリアルに「Road」を設定します。道路のコンポーネントは、名前に「TRN」が含まれています。

図17-69 道路のマテリアルを変更したところ

[5]道路の位置調整

道路の白線がある場合、道路自体と重ならないよう、道路のZ座標を-1程度にします。

図17-70 道路の位置を下げたところ

[6]プレイ

[Play]ボタンをクリックすると、インポートした3D都市モデルの中を自動車で走行できます。

【文】

崎山 和正(株式会社シナスタジア)