PLATEAU SDK for Unrealを使って新潟市の3D都市モデルをUnreal Engineにインポートしてみた

# 最初に
* 本記事では以下の[@41h01](https://twitter.com/41h01)様の[UEもくもく勉強会in富山](https://ue-toyama.connpass.com/)のLTスライドを参考にさせていただきました。
* 感謝🙇

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">UEでPLATEAU触ってみた <a href="https://t.co/6lK97U0fif">https://t.co/6lK97U0fif</a> <br>今日のLTで使ったスライドはこちら<a href="https://twitter.com/hashtag/ue_toyama?src=hash&amp;ref_src=twsrc%5Etfw">#ue_toyama</a> <a href="https://twitter.com/hashtag/UE5Study?src=hash&amp;ref_src=twsrc%5Etfw">#UE5Study</a> <a href="https://twitter.com/hashtag/PLATEAU?src=hash&amp;ref_src=twsrc%5Etfw">#PLATEAU</a></p>&mdash; 41h0(シホ)🐬☄️ (@41h01) <a href="https://twitter.com/41h01/status/1621800311836000256?ref_src=twsrc%5Etfw">February 4, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# PLATEAU(プラトー)とは？
* 国土交通省が主導する、日本全国の3D都市モデルの整備・活用・オープンデータ化プロジェクト ([公式ページ](https://www.mlit.go.jp/plateau/)より)
* PLATEAUが提供する3D都市モデルやソフトウェアはすべてCC BY4.0等のオープンライセンスを採用しており、利用規約に従い、複製、公衆送信、翻訳・変形等の翻案等、自由に利用できる。商用利用も可能。（[PLATEAU Site Policy](https://www.mlit.go.jp/plateau/site-policy/)より）
* 要するに、規約に従って**自由に使用できる都市3Dモデル**
* 都市3Dモデルは[G空間情報センター](http://test.geospatial.jp/ckan/dataset/plateau)からダウンロードできます

# 今回やってみようと思ったきっかけ
1. [UEもくもく勉強会in富山](https://ue-toyama.connpass.com/)のLTでPLATEAUを知る（Unreal Engineで簡単にPLATEAUを使えることを知る）
1. [NIIGATA XR プロジェクト](https://www.city.niigata.lg.jp/business/growing/xr/xrpj/index.html)で新潟市もPLATEAUに参画していることを知る（筆者は新潟居住）
1. 2/28にPLATEAU SDK for Unreal Engineの正式版がリリースされる
    ⇒**やるしかない！🔥**

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/PLATEAU?src=hash&amp;ref_src=twsrc%5Etfw">#PLATEAU</a> GitHubにて「PLATEAU SDK for <a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> ／Unreal Engine(<a href="https://twitter.com/hashtag/UE?src=hash&amp;ref_src=twsrc%5Etfw">#UE</a>)」の正式版を公開。各ゲームエンジンへの3D都市モデル(CityGML)の簡易なインポート、OBJ等3Dデータへのエクスポート機能等を提供しています。是非ご活用ください！<br><br>■Unity<a href="https://t.co/hp9kaOGCDe">https://t.co/hp9kaOGCDe</a><br><br>■UE<a href="https://t.co/jaBo1sQHki">https://t.co/jaBo1sQHki</a> <a href="https://t.co/uKPuFL3KUa">pic.twitter.com/uKPuFL3KUa</a></p>&mdash; Project PLATEAU (@ProjectPlateau) <a href="https://twitter.com/ProjectPlateau/status/1630492574556508160?ref_src=twsrc%5Etfw">February 28, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# やってみた！
* とても簡単だからみんなもやってみよう！

## 参考手順
* [PLATEAU-SDK-for-Unreal公式マニュアル](https://synesthesias.github.io/PLATEAU-SDK-for-Unreal/index.html)
* [UEでPLATEAU触ってみた](https://speakerdeck.com/41h0_shiho/uedeplateauhong-tutemita)

## 必要なもの
* ゲーミングPC (FullHDを60fpsで遊べる程度の性能)
* SSD空き容量150GBくらい（UE5: 50GB + CityGML: 80GB + 作業領域）

## 環境
私が試した環境はこんな感じです
* PC
    * Windows 11 Pro
    * メモリ: 16GB
    * ストレージ: 512GB (SSD)
    * CPU: 12th Gen Intel(R) Core(TM) i5-12500H
    * GPU: NVIDIA GeForce RTX 3050 Laptop
        * いわゆるエントリーレベルのゲーミングノートPCです。。。
* ~~Unreal Engine 5.1.0~~
* Unreal Engine 5.0.3
    * (2023/4/22追記)[公式マニュアル](https://www.mlit.go.jp/plateau/learning/tpc17-2/)に'PLATEAU SDK for Unreal は、Unreal Engine 5.0.3を想定しています。'とあるので、Unreal Engine 5.0.3を使うのが無難と思います。5.1.1でも動いてはいますが、、、
* PLATEAU SDK for Unreal 1.0.0
* Visual Studio 2019 Community
    * PLATEAU SDK for Unrealのリビルドに必要です
    * **注意：VSの以下コンポーネントも忘れずにインストールしておくこと**
    * これらのコンポーネントがないと後述するPluginのリビルド時に"xxx could not be compilied. Try rebuilding from source manually."というエラーでプロジェクトが開けなくなります
        * C++ Profiling tools
        * C++ AddressSanitizer
        * Windows 10 SDK
        ![スクリーンショット 2023-03-05 164526.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/9549be62-80ca-d6bd-0b9a-07b7beeb3ea8.png)
        * .Net Freamwork SDK 4.6.0以上
        ![スクリーンショット 2023-03-05 164646.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/ff6edffa-e8a0-dce1-7678-546ec83d77a8.png)
* (2023/4/22追記)Microsoft .NET Core Runtime - 3.1.32 (x64) 
    * 私の場合は何かの拍子にインストールが必要となりました。これがないとPluginのビルドに失敗します。 

## UEプロジェクトの作成とプラグイン導入
1. UEでプロジェクトを作成（今回はDesktopのサードパーソンを使用、ブループリントとC++はどちらでも大丈夫です）
![スクリーンショット 2023-03-05 165628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/7000bed2-a3e5-2fc5-9627-fbf949391012.png)
1. プロジェクトの作成が完了したら閉じる
1. GitHub: PLATEAU-SDK-for-Unrealの[リリースページ](https://github.com/Project-PLATEAU/PLATEAU-SDK-for-Unreal/releases)からPLATEAU-SDK-for-Unrealをダウンロードし解凍しておく
![スクリーンショット 2023-03-05 223540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/28823a3e-b123-4a27-2961-885b9c9758fe.png)
1. 先ほど作成したプロジェクトにPluginsフォルダを作って解凍したPLATEAU-SDK-for-Unrealを置く
![スクリーンショット 2023-03-05 224537.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/0c79ead3-26c8-ea77-720b-731494c6f94b.png)
1. UEでプロジェクトを再度開く
1. リビルド確認メッセージが出るので"はい"を選択
    * (2023/4/22追記)PLATEAU SDK for Unreal V1.0.2(最新版)とUE5.03を使えばリビルド不要になりました！
    * ただし、V1.0.2には属性情報取得ブループリントがビルドできないというバグがあるのでご注意ください。。。参考：https://github.com/Synesthesias/PLATEAU-SDK-for-Unreal/issues/69
        * また、V1.0.1についても問題があるという[記事](https://christinayan01.jp/architecture/archives/22100)もあるので、私はV1.0.0を使っています😢
![スクリーンショット 2023-03-05 224640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/e4cfbf4a-8a2f-9526-95ce-d246eb561848.png)
1. プロジェクトが開いて"PLATEAU"タブが表示されれば成功です！
![タイトルなし3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/709aaebf-2632-648c-a3e6-156fe273722c.png)
   * 環境によってはプロジェクトが開くまで（PLATEAU-SDK-for-Unrealのリビルド）に時間がかかるので気長に待ちましょう。。。
       * 私の環境の場合2、3分かかります😢
   * "xxx could not be compilied. Try rebuilding from source manually."というエラーが出る場合は
       * [環境](#環境)に記載したVisual Studioのコンポーネントや.NET Core Runtimeがインストールされているか確認してみてください
       * それでもダメな場合は"[プロジェクトルート]\Saved\Logs"や"C:\Users\[ユーザー名]\AppData\Local\UnrealBuildTool"のログを見ると原因がわかるかもしれません

## UE設定
* PLATEAU-SDK-for-Unreal向けに以下を設定します
![スクリーンショット 2023-03-05 230239.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/f6d70cb5-8fe3-b4b5-8833-5aa7b247d917.png)
![スクリーンショット 2023-03-05 230347.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/cda26e79-e04d-e2f4-f0bd-3e18c30a1a1a.png)
![スクリーンショット 2023-03-05 230533.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/7e02c354-e0a9-2858-2a7d-39d4d2f90d9d.png)

## 3D都市モデルのインポート
1. [G空間情報センター](http://test.geospatial.jp/ckan/dataset/plateau)からインポートする3D都市モデルをダウンロード、解凍しておく
    * もちろん新潟市の3D都市モデルを使います💪
    * https://www.geospatial.jp/ckan/dataset/plateau-15100-niigata-shi-2020
    * ちなみにダウンロードサイズは3GB程度ですが、解凍すると80GB超となるので事前にストレージを開けておきましょう😱
    * またHDDだと解凍待ち時間がエグイのでSSDをおススメします。。。
    ![スクリーンショット 2023-03-05 234042.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/948e1904-19e0-d821-846b-686025401903.png)
1. "PLATEAU"タブの"PLATEAU SDK"を選択
![タイトルなし3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/d36cea94-a46d-5e3f-b231-d41406b3c39a.png)
1. インポートタブで"ローカル"を選択("サーバー"はまだ未実装らしいです)
1. 入力フォルダに先ほど解凍した3D都市モデルフォルダ("udx"フォルダの1つ上のフォルダを選択します)を選択
1. 基準座標を選択します（今回は「08: 新潟、長野、山梨、静岡」を選択）
    ![タイトルなし1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/48dc5fb9-4040-5af4-9773-180314e1c90b.png)
1. マップ範囲を選択（今回は新潟駅南口付近を選択）
    * 範囲が広いほどインポートに時間がかかります
    * まずためすならデフォルトの範囲の1/4～1/8くらいがおススメです
    ![タイトルなし2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/afbe15bf-561e-8841-5523-71c8607f91ac.png)
1. インポートボタンをクリック！
1. インポートが完了するまで気長待ちましょう😑（私の場合はプレビューに3D都市モデルが表示されるまで10分程度かかりました）
1. プレビューに3D都市モデルが表示されたら完了です！
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/4104fd91-fb8d-f755-2936-77785cad23c5.png)
1. もちろんゲームとしてプレイすることもできます！
![タイトルなし4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/3470d07e-9ea2-7bcf-4140-204dbdad1310.png)

## お疲れ様でした！
* ひとまず私がやってみた手順を書きました。
* ~~触ってみた感想等は後日追記予定です。~~
* 2023/03/19 追記しました！

## 触ってみて
### いいところ
* UE初心者の私でも（比較的）簡単に出来た！😄
* 簡単に3D都市モデルを使える
* 自分のよく知る場所が3Dモデルになっていて感動！

### いまいちなところ
* 重い。デカい、待ちが長い。。。
    * 作業時間がほぼ待ち時間
    * PCスペックの問題かもしれませんがクラッシュも多い
* （新潟市だけかもしれませんが）LOD 2、およびテクスチャ有りエリアが狭い
    * こんな感じで新潟駅からはずれるとすぐにLOD 1エリアとなります
    * ![タイトルなし5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/3aeb3a0d-4cf1-87b9-1e91-5d4eb8b25c52.png)
* LOD 2は遠目にはいい感じですが、近づくと粗さが目立ちました
    * 1/1マップとしてそのまま使うのは難しい感じです。。。
    * そのまま使うなら工夫が必要かも
    * ![スクリーンショット 2023-03-05 164957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/248864af-613d-2f26-e0da-e07fed9950b3.png)
* LOD 2エリアも当たり判定が正方形
    * ![スクリーンショット 2023-03-05 163429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/a6998380-5940-84c9-bc09-f97eb0b1c596.png)
    * ![スクリーンショット 2023-03-05 163525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/45254cda-41ff-e29c-a902-4c72e41efe1d.png)
* 道路テクスチャはないので違和感がある
    * ↓のような方法が今のところの解決方法でしょうか。。。
        * PLATEAUのDEMファイルに空中写真のテクスチャを貼りたい
        * https://qiita.com/yoshikawa-hiroyuki/items/6935a9705b3144774fd1
    * インポート設定に道路テクスチャの記載があるので方法があるのかもしれないです
    * ![タイトルなし6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3196409/f3f8852a-7574-b665-fdd3-3bf6d9109740.png)
    * 公式のLarningにもそれっぽい記載もあるので
        * TOPIC 17｜PLATEAU SDKでの活用[2/2]｜PLATEAU SDK for Unrealを活用する
        * https://www.mlit.go.jp/plateau/learning/tpc17-2/

## 最後に
* とても簡単だからみんなもUEとPLATEAUで遊んでみよう！