TOPIC 10|Unreal Engineで活用する[1/2]|Unreal Engineで3D都市モデルを表示する
Unreal Engineは、VRゲームやシミュレーションなど高度なリアルタイム3Dコンテンツ制作に用いられるゲームエンジンです。Unreal Engineのインストール、プロジェクトの作成、PLATEAUの3D都市モデルを読み込んで配置するまでの手順を説明します。
Unreal Engineは、VRゲームやシミュレーションなど高度なリアルタイム3Dコンテンツ制作に用いられるゲームエンジンです。Unreal Engineのインストール、プロジェクトの作成、PLATEAUの3D都市モデルを読み込んで配置するまでの手順を説明します。
TOPIC 10 _ Unreal Engineで活用する
Unreal Engineは、Epic Games社のリアルタイム3D製作ツールです。このトピックでは、Unreal EngineでPLATEAUを活用する方法を説明します。
【目次】
10.1 Unreal Engineとは
10.1.1 Unreal Engineのダウンロード
10.1.2 Unreal Engineの起動とプロジェクトの作成
10.2 3D都市モデルの基本的な読み込み方
10.2.1 FBX形式ファイルのダウンロード
10.2.2 原点への移動とスケールの検討
10.2.3 FBXファイルをUnreal Engineに配置する
10.3 別のデータを重ねる
10.3.1 異なるメッシュコードの建築物を重ねる
10.1 _ Unreal Engineとは
Unreal Engineは、リアルタイム3D制作ができるゲームエンジンです。ゲーム以外にも、映像制作、建築、シミュレーションなど、幅広い分野で活用されています。エンジンのソースコードが公開されており、さまざまな開発者が開発に携わっているのも特徴です。
10.1.1 _ Unreal Engineのダウンロード
Unreal Engineは、無料で始められます。Unreal Engineでロイヤリティが発生するのは、Unreal Engineを組み込んだ市販向け製品(ゲームなど)を配布し、その総収入が100万米ドルを超える場合です(2022年10月現在)。クライアント向けのカスタムプロジェクトやリニアコンテンツ(映像やテレビ番組)などに対するロイヤリティはかかりません。
Unreal Engineの公式ページからダウンロードページに移動し、必要なファイルをダウンロードしてインストールしてください
【Unreal Engine公式ページ】
https://www.unrealengine.com/ja
Unreal Engineは、ランチャーを使ってUnreal Engine本体をダウンロードする方式です。まずはダウンロードページからランチャーをダウンロードしてインストールします。
インストールが完了すると、ランチャーが起動します。利用にあたっては、Epic Gamesアカウントが必要です。
アカウントを作成してサインインしたら、ランチャーから[Unreal Engine]タブを開きます。右上の[エンジンのインストール]をクリックすると、インストール可能なバージョンが選択できるので、クリックしてインストールします(図10-1、図10-2)。
【メモ】
今回のチュートリアルではエンジンバージョン”5.0.3”を使用しています(2022年12月時点で新バージョン”5.1”がリリースされていますが、操作はほぼ変わりません)。
その後、エンドユーザーライセンス契約書に同意すると、インストールする場所について確認されます。変更する必要がなければ、そのまま[インストール]ボタンをクリックすると、インストールが完了します(図10-3)。
10.1.2 _ Unreal Engineの起動とプロジェクトの作成
Unreal Engineのインストールが完了したら、ランチャーの[Unreal Engine]タブから起動できます。[起動]ボタンをクリックして起動します。
すると、プロジェクトブラウザが開きます(初回の起動には、しばらく時間がかかります)。
プロジェクトブラウザでは、どのようなプロジェクトを作るのか決めます。ここでは、まっさらな状態から始めます。[ゲーム]をクリックし、[Blank]をクリックします。
このとき[スターターコンテンツ]にチェックが付いていることを確認してから、[作成]ボタンをクリックします。プロジェクト名は任意に変更してかまいません。
プロジェクトを作ると、図10-6のように、編集画面であるUnreal Editorが起動します。デフォルトで、椅子とテーブル、ライトなどが配置されています。Unreal Engineでは、配置する空間のことを「レベル」と呼び、椅子やテーブル、ライトなどの配置するオブジェクトのことを「アクタ」と呼びます。利用しているアクタの一覧は、画面右側の[アウトライナー]で確認できます。
椅子やテーブルがプレビュー表示されている部分は「ビューポート」と呼びます。ここに各種アクタを配置していきます。すなわち、PLATEAUの3D都市モデルを表示するのであれば、3D都市モデルを読み込んで、それをアクタとして配置します。
【メモ】
椅子やテーブル、ライトなどが配置されたレベルが表示されていないときは、[Maps]内の[Minimal_Default]を開いてください。
デフォルトでは、ゲームプレーヤーを示すPlayer Startというアクタが配置されています。そのため、画面上のプレイボタン[▶]をクリックする(もしくは[Alt]+[P]キーを押す)と、この空間を歩き回れます。カーソルキーで移動、マウス操作で向きを変えられ、[スペース]キーで上昇、[Ctr]キーで降下します。少し後ろに下がると、この椅子は、小さな床の上に設置されていることがわかります。
以降の手順では、このレベルに、3D都市モデルを配置していきます。初期に配置されている椅子やテーブル、床は不要なので削除しておきます。これらはアウトライナーの[StaticMeshes]以下にあるので、[Shift]キーを押しながらクリックして、配下のものすべて選択し、右クリックして[編集]―[削除]をクリックします。
コラム:距離スケーリングカメラを使用する
ビューポートでは、マウス操作でアクタをつかんで移動や回転ができます。ビューポートの視点を変えるには、マウスで次のように操作します。
◼ 視点の上下・左右の移動
マウスの左右両方のボタンを押しながら、上下左右方向にマウスを動かします。
◼ 視点の上下・左右の角度変更
マウスの右ボタンを押しながら、上下左右方向にマウスを動かします。
◼ ズームイン/アウト
マウスホイールを上下に動かします。
Unreal Engineのデフォルトの単位はセンチメートルです。そのため上述のマウス操作における移動も、それに合わせられています。PLATEAUの3D都市モデルはメートル単位で建物も大きく、マウス操作に対して視点の動きが小さすぎるため、目的の部分を見るのに相当な回数のマウス操作が必要になります。よって、カメラの移動量を調整することをおすすめします。
[編集]メニューから[エディタの環境設定]を開き、[レベルエディタ]の[ビューポート]画面を開きます。[コントロール]の[詳細設定]にある[距離スケーリング済みのカメラを使用]にチェックを付けると距離に応じたカメラ移動量になり、ストレスなく操作できるようになります。
10.2 _ 3D都市モデルの基本的な読み込み方
Unreal Engineでは、OBJ形式やFBX形式のファイルをインポートできます。ここではFBX形式の3D都市モデルを読み込んで、表示する方法を説明します。
10.2.1 _ FBX形式ファイルのダウンロード
次のいずれかの方法で、FBX形式の3D都市モデルを準備します。
----------------
①G空間情報センターから、利用したい3D都市モデルのFBX形式ファイルをダウンロードする
②PLATEAU SDK【TOPIC 17】やFME Form【TOPIC 4】などを使って、CityGMLから変換する
----------------
ここでは①の方法で、G空間情報センターの東京都23区の3D都市モデルのページを開き、[FBX]の部分からダウンロードします(図10-10)。
【メモ】
FBX形式ファイルのダウンロード方法は、Unityの場合と同じです。「9.2.1 FBX形式ファイルのダウンロード」も併せて参照してください。
【3D都市モデル(Project PLATEAU)東京都23区】
https://www.geospatial.jp/ckan/dataset/plateau-tokyo23ku
ダウンロードしたファイルを展開すると、次の構造のファイルが得られます。
13100_tokyo23-ku_2020_fbx_3_op
├─13100_indexmap_op.pdf
├─bldg
│ ├─lod1
│ │ ├─53392546_bldg_6677.fbx
│ │ │ …略…
│ └─lod2
│ │ ├─53392546_bldg_6677.fbx
│ │ │ …略…
├─brid
│ ├─53392650_brid_6677.fbx
│ │ …略…
├─dem
│ ├─533925_dem_6677.fbx
│ │ …略…
└─tran
│ ├─533925_tran_6677.fbx
└─metadata
└fbx_13100_2020_metadata_op.xml
以下の例では、東京都庁周辺の建築物が含まれる、3次メッシュコード「53394525」に該当する次のファイルを扱います。
LOD1の場合:bldg/lod1/53394525_bldg_6677.fbx
LOD2の場合:bldg/lod2/53394525_bldg_6677.fbx
10.2.2 _ 原点への移動とスケールの検討
Unreal EngineでFBXファイルを読み込む際には、移動や回転、スケールを設定できます。
● 軸と回転
扱いやすい軸の方向に合わせます。Unreal Engineには、地理関数やCesium for Unrealなどのプラグインがあり、それらと同じ軸の方向に合わせると都合がよいです。
FBXファイルを回転することなく読み込むと(インポート時にトランスフォームの[回転]で、すべて0を設定する)、図10-11のように、Y軸の正方向が「南」、X軸の正方向が「東」のように読み込まれます。この軸の方向がUnrealで地理情報を扱うときの一般的な軸の方向ですが、平面直角座標系とはX軸とY軸が入れ替わり、かつY軸の向きが逆である点に、注意してください。
【メモ】
Unreal Engineで地理情報を扱う際の考え方については、「レベルでジオリファレンスを使用する」を参照してください。
● スケール
FBXファイルはメートル単位、Unreal Engineはセンチメートル単位なので、100倍にします。
● 原点の調整
平面直角座標系は、地域ごとに定められた原点が設定されており、地域によっては、原点と建物が遠くて見えにくいこともあります。そこで本トピックでは、目的の建築物を原点近くにもってくるように移動してインポートします。
【メモ】
原点の移動については、インポート時は原点を操作せず、配置するときに調整する、もしくは、調整せずにプレーヤーやカメラをその建物の位置に移動するという方法もあります(【Unityで活用する】では、原点を操作せず、プレーヤーとカメラの位置を調整する方法で解説しています)。
目的の建築物を原点近くにもってくるようにするためには、あらかじめ、中心にしたい建築物の平面直角座標における座標を確認しておき、インポート時に、そのぶんだけずらすことで、位置合わせをします。
そこでまず、TOPIC9【Unityで活用する】で行ったのと同様に、地理院地図を使って、原点にしたい場所の経緯度を調べます。
仮にここでは「緯度35.689823、経度139.693689」とします。この経緯度を、地理院の「測量計算サイト」にある、「平面直角座標への換算」というページで変換します。以下では、変換した座標が、 (-34403.6123 m, -12638.7080 m)になったとします(図10-13)。インポートする際は、この値ぶんずらすことで、この位置を原点としてインポートできます。ずらす値は、図10-11に示したように、X座標とY座標が入れ替わり、またY座標は正負が逆になるので注意してください。
10.2.3 _ FBXファイルをUnreal Engineに配置する
原点位置を定めたところで、実際に、Unreal Engineにインポートし、レベルに配置していきます。ここでは、LOD1の53394525_bldg_6677.fbxファイルを配置してみます。
【メモ】
以下では、提供されている53394525_bldg_6677.fbxファイルをそのまま使いますが、使用範囲を調整したいときは、あらかじめBlenderなどの3Dソフトを使って、不必要な部分の削除や他のファイルとマージするなど、必要に応じて加工したFBX形式ファイルを使うとよいでしょう(【Blenderで活用する】参照)。
[1]FBXファイルをインポートする
[コンテンツドロワー]を開き、利用したいFBXファイルをドラッグ&ドロップします。
ドラッグ&ドロップすると、インポート画面が開きます。ここで、インポートする際の移動や回転、スケールを設定できます。
この画面では、以下の設定で進めて、[全てインポート]ボタンをクリックします。
・[メッシュ]の[Generate Missing Collision]のチェックを外す
・[メッシュ]の[詳細設定]の[Combine Meshes]にチェックを付ける
・同じく[Normal Import Method]を[Import Normals and Tangents]に変更する
・同じく[Compute Weight Normals]にチェックを付ける
・Import Translationを、先ほど確認した平面直角座標のX座標、Y座標を用いて、(-Y * 100, X * 100, 0)に設定する(今回の例であれば、(1263870.80, -3440361.23, 0))。
・Import Rotationを(0, 0, 0)に設定する
・Import Uniform Scaleを100に設定する
・[Convert Scene]にはチェックを付けない
・[Convert Scene Unit]にはチェックを付けない
そうすることで、次のようにインポートされます。
・指定した場所が原点
・X軸の正方向が東、Y軸の正方向が南の座標系
・(100倍することで)メートルをセンチメートルに換算
コラム:Combine Meshes
[メッシュ]の[詳細設定]の[Combine Meshes]は、全部をひとつのメッシュとして取り込むかどうかの設定です。
ここではチェックを付けて、ひとつのメッシュとして取り込んでいます。LOD1もしくはFME Formでmerge_bldg_surface.fmwtを使って変換したLOD2の場合は、チェックを外しておくと、建築物を、ひとつずつ分けてインポートできます。ただしインポートには、相当な時間がかかります(G空間情報センターからダウンロード、もしくは、FME Formでcitygml2fbx.fmwを使って変換したLOD2の場合は、面がそれぞれ別のオブジェクトとして構成されているため、面単位の取り込みとなります)。
[2]まとめてレベルに配置する
インポートしたオブジェクトをレベルにドラッグ&ドロップして配置します。
【メモ】
データによっては、インポートの際、以下の警告メッセージが表示されることがあります。このエラーは、Unreal Engineだけでは修復できません。データを一度、3ds Maxなどのソフトで開き、[Export Smoothing Groupsオプション]を有効にしてエクスポートし直すなどが必要です。そのまま無視して支障ありません。
「このFBXシーンにはスムージング グループ情報がありません。ファイルをエクスポートする前に必ずFBX Exporter プラグインの[Export Smoothing Groups] オプションを有効にしてください。スムージング グループをサポートしないツールの場合でも、インポート中に正しい頂点法線を推測するため、FBX Exporter はエクスポート時に適切なスムージング データを生成します。」
[3]原点に移動する
インポートした建築物の位置を、原点である(0, 0, 0)に設定します。
[アウトライナー]上では、ドラッグ&ドロップしたオブジェクト(53394525_bldg_6677)を選択し、[詳細]の[トランスフォーム]の[位置]を、原点である(0, 0, 0)に設定します。
これで、図10-13で確認した座標が原点となるように配置されます。
[4]プレーヤーの位置を調整する
以上で、基本的な配置は完了ですが、3D都市モデルの「高さ」は標高であり、東京近郊では約40m――Unreal Engineではセンチメートル単位なので、設定値としては4000――のあたりにあります。
Blankプロジェクトのデフォルトのプレーヤーは、デフォルトでは高さ124cmで、建物群よりもずっと下から見上げるような位置です。
そこで[アウトライナー]から、プレーヤーに相当するアクトである[Player Start]をクリックし、[詳細]の[トランスフォーム]で、[位置]の高さ(Z座標)を4000に設定します。
[5]ビルドして実行する
以上で設定完了です。[ビルド]メニューから[全レベルをビルド]を選択してビルドします。ビルドが終わったら、[▶]ボタンをクリックしてみてください。カーソルキーで操作して、ビルを見ながら空中を移動できます([スペース]キーで上昇、[Ctrl]キーで下降)。
【メモ】
全体が暗いのはライティングの位置の問題です。ライティングを調整すれば、光が当たって表示されるようになります。
10.3 _ 別のデータを重ねる
同じ平面直角座標系であれば、同様の方法でインポートすると、それらはピッタリ重なります。
10.3.1 _ 異なるメッシュコードの建築物を重ねる
例えば、隣接する代々木周辺の3次メッシュ「53394515」の建築物モデル(53394515_bldg_6677.fbx)を同様の操作で配置すれば、図10-22のように、真横に表示されます。
【メモ】
このときImport Translationなどのインポートの設定値は、1つめのFBXファイルと同じ値にそろえます。
10.3.2 _ 異なる種類のデータを重ねる
建築物のデータに加え、地形や橋梁などを重ねることもできます。例えば地形のdem/533945_dem_6677.fbxを追加した例を図10-23に示します。
【文】
大澤文孝
【監修】
崎山和正(株式会社シナスタジア)
エピック ゲームズ ジャパン合同会社
株式会社 理経
日本工営株式会社