GoogleMapのモデル取り込み

Last-modified: 2021-06-24 (木) 10:31:50

!!!著作権には十分注意してください。当Wikiは責任を負いません!!!



はじめに

MSFS2020では、デフォルトの建物などで不満足な場合、自分でシーナリーを追加することができる。一からモデルを作成するのは大変なので、ここでは、解説動画(英語)に基づいて、GoogleMapの3Dモデルを借用する方法を説明する。ただし、それでも相当大変だが。

なお、動画とは幾つか手順が異なっている部分もある。

準備

ここで説明する方法でシーナリーを作るには、最初に以下の準備の必要がある(MSFS2020があれば、残りは無料で入手できる)。

  • MSFS2020をデベロッパーモードにする
  • MSFS2020のSDK(ソフトウェア開発キット)の入手
    • デベロッパーメニューの"help > SDK Installer"からダウンロード(1.87GByte)できる。ダウンロードしたらダブルクリックして好きなところにインストール。
  • Google Chromeのインストール
    • ブラウザ。これでGoogleMapにアクセスする。
      Chrome以外でもVivaldiなどのChromiumブラウザなら可能(起動パスなどは適宜読み替える)。
      Firefoxではできないらしい。
  • RenderDocのインストール
    • GoogleMapの3Dモデルを取り出すソフト。
    • 最新バージョンでうまく動かない場合は、v1.10のような古いバージョンをインストールすること。
      組み合わせが悪いとエクスポートやインポートで支障が出る。
      一旦そのバージョンでインポートとエクスポートが正常にできるかどうか確認してから作業に取り掛かることを推奨。
  • Blenderのインストール
    • 取り出した3Dモデルを編集するソフト。バージョン2.83以上。現時点では2.93が最新だが、後述するBlender2MSFS toolkitとの兼ね合いで2.83推奨。
  • MapsModelsImporterのインストール
    • Blenderのアドオン。これを使って、RenderDocの出力ファイル(拡張子.rdc)をBlenderに取り込む。zipファイルを適当なところにダウンロードしたら、展開せずにそのままにし、Blenderを起動して、"Edit > Preferences, Add-ons, Install"から保存したzipファイルを選ぶ。
  • Blender2MSFS toolkitのインストール
    • Blenderのアドオン。これを使って、Blenderで編集したモデルをMSFS2020のシーナリー作成プロジェクト内に出力する。zipファイルを適当なところにダウンロードしたら、展開せずにそのままにし、Blenderを起動して、"Edit > Preferences, Add-ons, Install"から保存したzipファイルを選ぶ。(バージョン0.37.0は、Blender 2.90に対応してないらしい。対処は、バージョン0.36.1を使うか、Blenderの方を古いバージョンに戻すか。)
    • 2020/9/23にBlender2MSFS toolkitのVer.0.40.0リリースされているが、Blenderは2.83を推奨とのことで、2.90対応版はテスト中。

プロジェクトフォルダーの用意

ここから先は作成するシーナリーごとに毎回行う必要がある。以下では、シーナリー名を"AAAA"とする。"AAAA"の部分は自分の作るシーナリーに合わせたものに変える事。

  • サンプルシーナリーの複製
    • MSFS SDKをインストールしたフォルダー内の"Samples\SimpleScenary"を適当なところに複製する。
  • ファイル、フォルダー名変更、不要なファイルの削除、ディレクトリの追加
    • 複製したフォルダー名を"AAAA"に変更。
    • "AAAA\SceneryProject.xml"を"AAAA\AAAA.xml"に変更。
    • "AAAA\PackageDefinitions\mycompany-scene.xml"を"AAAA\PackageDefinitions\AAAA.xml"に変更。
    • "AAAA\PackageDefinitions\mycompany-scene"を"AAAA\PackageDefinitions\AAAA"に変更。
    • "AAAA\PackageSources\modelLib"の下のフォルダー三つを削除
    • "AAAA\PackageSources\modelLib"の下に二つのフォルダー "Model", "texture"を作る(ここは解説動画と違う。後でBlenderの中で作るのが面倒なので)。
    • "AAAA\PackageSources\scene\objects.xml"を削除
  • XMLファイルを編集
    • "AAAA\AAAA.xml"をテキストエディターで開き、5行目"mycompany-scene-simple"を"AAAA"にして保存。
    • "AAAA\PackageDefinitions\AAAA.xml"をテキストエディターで開き、1行目、18行目、19行目の三箇所の"mycompany-scene-simple"を"AAAA"に変更して保存。

以上で、プロジェクトフォルダーの用意は完了だが、このあと失敗してやり直したくなったとき用に、ここで"AAAA"フォルダーのバックアップを取っておくと楽。

GoogleMapからのモデル取り込み

  • Chromeの起動1
    • 既に起動していたchromeがある場合には、全て落とすこと。
    • コマンドプロンプトを開いて(Win+R, "cmd")、以下の二行を打ち込む(chrome.exeをインストールした場所によって二行目は変わる。単純なChrome起動では無いことに注意。筆者は一行目を入れ忘れて悩みまくった。また、Chromeのショートカットを作って、以下を楽にする方法もあるようだが、筆者はうまくできなかった)。これで、真っ白なウィンドウと、"GPU starting with pid 23076(番号は毎回変わる)" のウィンドウの二つが出る。まだ、"OK"ボタンを押さない。

      set RENDERDOC_HOOK_EGL=0
      "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-gpu-sandbox --gpu-startup-dialog

  • RenderDocをChromeプロセスに注入
    • RenderDocを起動。
    • メニューから "File > Inject into process"を選ぶ。
    • 薄字で書かれた"Filter process list by PID or name"の所に、Chromeの起動1の"GPU starting with pid ...."のウィンドウに書かれている数字を入れる。
    • 上のリストボックスに出てくるchrome.exeの行をクリックする。
    • 右下の"Inject"ボタンを押す。
  • Chromeの起動2
    • "GPU starting with pid ...."のダイアログの"OK"ボタンを押すと、Chromeの起動が完了する。
  • GoogleMapでモデル表示
    • Chrome上でGoogleMapを開き、取り込みたいモデルのある場所に行く(GoogleMapを開いた時に、また"GPU starting with pid ...."のダイアログが出る場合、うまくできてない。恐らく "set RENDERDOC_HOOK_EGL=0"を忘れている。Chromeの起動1からやり直し)。
    • 適当な縮尺にして、左下の"航空写真"を押す。さらに同じ場所(レイヤ)の"詳細"を押して"地球表示"を有効にする。
      (ここで、目的の場所の近くをクリックして、ピンを刺し、そのピンをもう一度クリックすると緯度、経度が出るので、それをメモしておくと後で楽ができる)
    • 3Dモデルを使って町が表示される(場所によってはされない。その時は諦める)ので、マウスホイールやドラッグ、シフトドラッグを使って、欲しいモデル全体を画面に収める。ここで、ズームし過ぎてモデルの精度を高め過ぎないように注意。
  • RenderDocによるモデルのキャプチャー
    • RenderDocに戻り、"Capture Frame(s) Immediately"を押す(解説動画17分27秒、少し再生開始時間を遡ると失敗したときの例もある)。
    • すかさずChromeの3Dマップ画面に戻り、画面をドラッグして細かく上下に揺さぶる。
    • RenderDocの"Captures collected"の下に出てくるサムネイルをクリック。
    • 左側の"EID, Name"の中に10行ぐらい出てきたらキャプチャー成功。
      20行ぐらい出てきたら失敗。失敗したときは、先程クリックしたサムネイルを右クリックして"Delete"して、"CaptureFrame(s) Immediately"からやり直し。
      どうしても成功しない場合は、"CaptureFrame(s) Immediately"ではなく"Capture After Delay"を使うとよい。(ボタンの隣の欄を3sec程度に設定してから"Capture After Delay"を実行、すかさず3Dマップに切り替えて揺さぶると、設定した秒数後にキャプチャーしてくれる)
    • キャプチャーに成功したら、メニューから"File > Save Capture as"で、適当な場所にファイルを適当な名前で保存(".rdc"拡張子が付く)。
  • Chrome, RenderDoc終了
    • ここまでは序盤。

Blenderによるモデル編集

大変なのはここから。(以下はBlenderに関しては英語メニューで説明する。)

Blenderメインビュー右上の"Toggle X-Ray"をクリックしてオンにしておくと、頂点の削除作業がずっと楽になるので、最初に書いておく。解説動画の人は、これをやらないで苦労している。

  • Blenderの起動
  • 始めのゴミ削除
    • "Scene Collection"ビューの"Camera", "Cube", "Light"をそれぞれクリックしてDeleteキー。
  • MapsModelsImporterによるモデルのインポート
    • メニューから"File > Import > Google Maps Capture (.rdc)"で先程保存したファイルを選択。
    • メインビュー右上の "Viewport Shading"をクリック。これでモデルにテクスチャーがついて表示される。
  • 遠くにある大まかなゴミオブジェクトを削除
    • 矩形セレクトなどを使って、遠くの全く関係ないオブジェクトを削除する。
  • 残ったオブジェクトを一つに結合。
    • "Scene Collection"ビューの"Collection"の右クリックメニューで"Select Objects"選択。
    • Ctrl + J で、全オブジェクトを一つにする。
  • 頂点の簡略化
    • Tabキーを押してオブジェクトモードからエディットモードに切り替える。
    • 矩形選択で全頂点を選択
    • 右クリックメニューから"Merge Vertices > By Distance"
  • モデルの編集
    • ここがメインの作業。Blenderを駆使して、必要な頂点を消さないように注意しつつ、欲しい部分だけ残して、要らないビルや家を消す。
  • Blender2MSFS toolkitによるモデルのエクスポート
    • オブジェクトモードにして、保存したいオブジェクト(結合をしてたら一つしかないはず)を選択。
    • メニューから"File > Export > extended glTF 2.0(.glb/.gltf) for MSFS"
    • 出てきたダイアログで、最初に作ったプロジェクトフォルダー"AAAA"の下の"PackageSources\modelLib\Model"を保存先フォルダーとして選択。"AAAA"は各自付けた名前に読み替える事。
    • 一番下のテキストボックスで保存ファイル名"AAAA"を指定。
    • 右上 "Format"ドロップダウンメニューで、"glTF separate (.gltf + .bin + textures)"を選択。
    • その下の"Textures"の所に、"../texture/" を入力。
    • 少し下の"MSFS"のポッチを押して"Generate/Append XML file"にチェック。
    • 下に"XML Filename"を入れるところが出てくるので、"AAAA"を入れる。
    • その下の"Generate GUID"にチェック。
    • 次の"Include"のポッチを押して、出てきた二つ両方にチェック。
    • 一つ飛ばして"Geometry"のポッチを押して、"Apply Modifiers"にチェック。
    • "Export extended glTF 2.0"ボタンをクリック。保存にしばらく掛かる。
    • フォルダー"AAAA\PackageSources\modelLib\Model"の下に三つのファイル、"AAAA\PackageSources\modelLib\texture"の下に沢山のテクスチャーファイルができていることを確認。テクスチャーは一つにまとめるテクニックもあるらしい。
    • 解説動画では、保存されたxmlファイルを修正しているが、そのままで問題ない。
  • Blenderの作業は以上だが、次のシーナリー作成のときにモデルの形を確認するのに便利なので、Blenderはそのまま開いておいた方が良い。

MSFS2020によるシーナリー作成

ここも大変。中々満足の行くものができない。

  • モデルを配置したいところに行く
    • MSFS2020を起動。
    • デベロッパーモードにする。
    • World Mapでモデルを配置したいところの近くを指定して好きな機体で目的の場所に飛んでいく(GoogleMapで目的の場所の緯度経度を調べていたら、Searchのところに「緯度,経度」を入れれば直接行けて楽)。
    • デベロッパーメニューの"Options > Pause Simulations ||"でポーズ。
    • デベロッパーメニューの"Camera > Developer Camera"でデベロッパーカメラにする。この辺りは、モデルを配置したいところをカメラ内に収めれば、順序は好みでどうでもいい。デベロッパーカメラの動かし方は、
      • Alt + マウス左ドラッグ: 回転
      • Alt + マウス中ドラッグ: 位置移動
  • モデルの読み込み
    • デベロッパーメニューの"Tools > Project Editor"を選んでプロジェクトエディターを表示。
    • 同時にインスペクターが表示されなかったら、プロジェクトエディターの"View > Inspector"にチェックを入れて表示させる。
    • プロジェクトエディターの"Project > Open..."で作ったプロジェクトの"AAAA\AAAA.xml"を開く。
    • プロジェクトエディターに、AAAAが現れるので、クリック。インスペクターの方に色々出てくる。
    • インスペクターの左下"Build package"を押してパッケージをビルド。
    • しばらくしてビルドが済むと、コンソールウィンドウが出る。エラーが沢山出ていても気にしない(未確認だが、"AAAA\PackageSources\modelLib\texture"の下のテクスチャーファイルのサイズが縦横どちらも4の倍数になってないといけないらしい。気になるなら、画像編集ソフトで一つ一つのテクスチャーファイルを開いてサイズ調整する)。
    • 邪魔なので、デベロッパーメニューの"Windows > Console"のチェックを外して、コンソールを閉じる。
    • プロジェクトエディターのAAAA横のポッチを開くと、"myscene BGL", "mymodellib ArtProj"がある。"myscene BGL"の方をクリックして、インスペクターの"Load in Editor"を押す。
    • 沢山ウインドウが開くが、この先、Material Editorは不要。Scenery Editor, Objects, Propertiesウィンドウが要る。これらが開いてないときは、デベロッパーメニューの"Tools > Scenery Editor"でシーナリーエディター、シーナリーエディターの"View > Objects"と"View > Properties"でオブジェクトウィンドウとプロパティーウィンドウを開く。
    • オブジェクトウィンドウの"Object type"ドロップダウンメニューで"Scenery"を選択。"Filter (inc,-exc)"にAAAAを入れて、リストにAAAAがあれば、モデルの読み込みは成功。
  • シーナリーの編集
    • 自分のモデルを配置したいところにあるデフォルトの3Dオブジェクトを消す。次のモデル配置、大きさ、位置揃えを先にやるかは好み次第。
      • オブジェクトウィンドウの"Object type"ドロップダウンメニューで"Polygon"を選択して、下の"Add"ボタンを押す。カーソルが赤い+になる(解説動画32分25秒)。
      • 消したい3Dオブジェクトが入っている範囲を囲うように、周囲をCtrlキーを押しながらクリックしていく。最後にCtrlキーを押しながらダブルクリックで範囲が閉じられる。
      • シーナリーエディターの"Scene:"リストの中に、追加したPolygonが出るはず。多分選択されているが、念の為クリック。
      • プロパティーの"Exclude all"にチェックを入れる。これでPolygon内部は、デフォルト3Dオブジェクトが隠れて平坦な航空写真になる。Polygonの位置や形を修正したいときは、下の「その他各種の編集」参照。
    • モデル配置、大きさ、位置揃え。
      • オブジェクトウィンドウの"Object type"ドロップダウンメニューで"Scenery"を選択。"Filter (inc,-exc)"にAAAAを入れて、リストのAAAAをクリックして、左下の"Add"ボタンを押す。
      • GoogleMapから持ってきたモデルはそのままでは小さ過ぎて見えないかも知れないが、赤青緑の座標軸(ギズモという)が追加されたら、モデルの配置は成功している。
      • シーナリーエディターの"Scene:"リストの中にAAAAがあるはずなので、念の為クリック。
      • プロパティーウィンドウの"Snap to groud"のチェックを外す。これをしないと、追加したモデルが地面に張り付いたままで、高さが調整できない。
      • シーナリーエディターの"View > Gizmo"をチェックして、ギズモウィンドウを表示。"Scale"内の数値を調整すると、モデルが拡大縮小される。
      • ギズモのモード(並進、回転、スケール)は、ギズモの中でマウス中クリック、または、ギズモウィンドウの上の"Translate", "Rotate", "Scale"ラジオボタンで切り替えられる。このギズモとギズモウィンドウの数値入力を使って、モデルの大きさ、向き、位置を調整(解説動画34分14秒)。
    • その他各種の編集
      • デフォルトの3Dオブジェクトを消すときに使ったポリゴンは他にも各種の用途に使える。ポリゴンの作り方は同じ。
      • ポリゴンの内部をクリックして出てくるギズモでポリゴン全体の位置調整、ポリゴンの各頂点をクリックして出てくるギズモで、頂点の位置調整ができる。ただし、高さは変えられないと思う。
      • シーナリーエディターの"Scene:"リストの中でポリゴンを選ぶと、プロパティーウィンドウで選んだポリゴン内部のエリアの特徴を設定できる。例えば、以下のような設定ができる。
      • プロパティーウィンドウで"Terraforming"にチェックを入れれば、ポリゴン内部の地面の高さを変えられる(地面の高さを変えると、せっかく高さ調整したモデルの高さも変ってしまうので、再調整)。ポリゴンの周囲にも点線が囲われた範囲ができ、その高さもつられて連続的に変わる。この部分の大きさは、"Falloff distance"の数値によって調整できる。
      • プロパティーウィンドウで"Vegetation"にチェックを入れれば、ポリゴン内部に木が生える。"Vegetation"下の各種数値で木の高さや密集度などが調整できる。
      • プロパティーウィンドウで"Water"にチェックを入れれば、ポリゴン内部を川や池にできる。
    • ライト追加
      • オブジェクトウィンドウの"Object type"ドロップダウンメニューで"Scenery"を選択。"Filter (inc,-exc)"にlightを入れる。
      • リストに"Light_cold", "Light_warm"などの各種のライトが出てくる。好みのライトをクリックして、下の"Add"ボタンを押す。
      • プロパティーウィンドウの"Snap to groud"のチェックを外して高さ調整もできるようにし、ギズモで位置などを調整。
      • 時間を夜にして見え方を確認(デベロッパーメニューの "Options > Local time"で変えるか、通常のシミュレーション同様、Weatherで変える)。
      • 明るさの変更は、シーナリーエディターで追加したライトを選択して、"Duplicate"ボタンを押して同じ場所に複製を作ることによって行う。
  • 保存
    • シーナリーエディターの右下"Save Scenery"をクリック。保存先フォルダーとして、"AAAA\PackageSources\scene"を選び、ファイル名"AAAASHP"を指定して"Save"。もう一度保存ウィンドウが開くので、ファイル名"AAAASCN"を指定して"Save"(ファイル名は重複しなければ任意)。未確認だが、二度目のウィンドウは開かないこともあるらしい。
    • インスペンターの"Build pacage"を押して、もう一度パッケージをビルド。
    • しばらくしてビルドが済むと、コンソールウィンドウが出る。
    • フォルダー"AAAA\Packages"の下に"AAAA"ができていれば成功。
    • MSFS2020を終了。

パッケージのインストール

  • フォルダー"AAAA\Packages\AAAA"をMSFS2020の"Community"フォルダーにコピー(筆者は、ここを間違えて、プロジェクトフォルダー"AAAA"全体を"Community"フォルダーにコピーすると思い込んでいて一日潰した)。
  • MSFS2020を起動して、デベロッパーモードを抜ける。
  • シーナリーを作ったところに行って出来栄えを確かめる。