趣味と飛行とガジェットと

趣味で空を飛んでいるアラサー会社員が、スマホやタブレットを中心としたガジェットの活用法を気ままに紹介していきます。

スポンサーリンク

X-Planeで街作り!3D Warehouseのモデルを使ったシーナリーの作成(その1)

f:id:flying-gadget:20171113194318p:plain

こんにちは、空飛ぶガジェッター、みいや(@flying_gadget_m)です。

PC向けフライトシミュレータの定番であるX-Plane11で、公開されている建物等の3Dデータを使って実際の街並みを再現したシーナリーを制作していきます。長くなるので複数の記事に分けて紹介予定で、今回は全体の手順概略と下準備です。

 

はじめに

これまでこのブログで紹介してきたように、X-Plane11では標準シーナリーにOrtho4XPやW2XPを加えることで、手間をかけずに再現度をある程度向上させることができる。しかしながら、個別の建物やランドマークについてはカスタムシーナリーを作成して対応するしかない。特にVFR勢にとってはフライトで目印となる高層ビルやタワー、各地域を特徴づけるランドマークが再現されることでフライトの楽しさも大幅に向上するはずだ。

とはいえ、CADソフト等で一から建物の3Dモデルを作成するには相当なスキルと時間が必要となり、多くの人には難しい。そこで、今回は3D Warehouseという3Dモデルの公開ギャラリーからモデルを頂いてX-Planeで読み込み可能な形式に変換し、X-Planeのシーナリー上に配置する手順を説明していく。

大変地道な作業ではあるが、自分のよく知っている街を作成して上空から眺めるのは楽しいものである。私は現在名古屋のシーナリーを作成している。参考として実際の飛行機からの眺めと作成中のシーナリーとの比較画像を載せておく。

 

f:id:flying-gadget:20171114003045p:plain

 

作業の流れ

今回の作業は手順、必要なツールともに多いので複数回に分けて解説し、今回は概略と下準備です。大まかな作業の流れは以下の通り。

 

  1. 3D Warehouseで配置したい建物等のデータを探してダウンロード
  2. ダウンロードしたデータをX-Planeのオブジェクトに変換
  3. 位置決め用の下敷きとなる衛星画像を用意
  4. シーナリーを作成し、オブジェクトを配置
  5. 配置した場所に飛んで行って確認

 

3D Warehouseとは?

3D Warehouse(旧名称Google3Dギャラリー)は多種多様な3Dモデルデータを公開しているギャラリーで、データは無償で提供されており、改変も含めて自由に利用できる。データはSketchUpという3Dモデリングツールの形式で公開されている。

 

https://3dwarehouse.sketchup.com/index.html

 

上記サイトで欲しい建物の名前、地域などで検索する。例えば、"名古屋"と検索すると以下のように名古屋の建物やランドマークのモデルが山ほど出てくる(ちなみに"Nagoya"だとまた違った検索結果になる)。まずは自分が作りたい地域を決めてモデルを検索し、検索結果を眺めつつGoogle Earth等で実際の街並みを確認して作りたいシーナリーのイメージを固めると良い。

 

f:id:flying-gadget:20171113202439p:plain

  

SketchUpのインストール

SketchUpは3Dモデリングツールで、3D WarehouseのモデルデータはSketchUpで作られいる。注意点として、今回の作業ではSketchUp Proの機能(objエクスポート)を使うので、本来であれば有料のPro版の購入が必要(約10万)である。SketchUpは初回のインストールから30日以内に限りPro版の機能を無償で利用できるので、今回はこの30日の無料体験の間にWarehouseの目ぼしいモデルを片っ端から変換しておく作戦で行く。なのでSketchUpをインストールする前に使いたいWarehouseモデルにおおよその目星をつけておこう。

SketchUpは以下の公式サイトからダウンロード、インストールできる。今回使用したバージョンはSketchUp2017である。

 

www.sketchup.com

 

SketchUpデータをobj形式に変換

以下では3D WarehouseのオブジェクトをX-Planeのシーナリーに変換するための下準備として、不要なデータの消去とデータ形式の変換を行う。今回は名古屋城のいかしたモデル(モデル名:名古屋城 本丸 ファイル名:NagoyaCAS.skp 製作者:noboru様)があったので、それを例に説明する。

SketchUpで3D Warehouseからダウンロードしたデータを開く。ダウンロードする際の形式はSketchUp2017で良い。また、データ変換の際に出力ファイルが複数作成されるので、散らからないようにモデルごとに専用フォルダを作ってその中で作業すると良い。

 

f:id:flying-gadget:20171113210002p:plain

 

まずはモデル本体の下に配置されている画像を消す。建物のモデルでは多くの場合位置の参照としての衛星画像が下に敷かれているので、右クリックして「ロック解除」した後Deleteキーで削除する。画像以外にも明らかに余分なものが含まれている場合はそれも削除しておく。なお、建物などでモデルによっては「地下」まで作られているものがあるが、X-Planeに配置すれば地面より下は見えなくなるので気にしなくて良い。

 

f:id:flying-gadget:20171113210504p:plain

 

次に、メニューから「ウインドウ」→「モデル情報」→「単位」を開き、以下の図のように単位を「10進表示」「メートル」に、精度を「0.01m」に設定しておく(精度の設定についてJunJun様に情報、画像提供頂きました、感謝致します)。 

 

f:id:flying-gadget:20171120211714j:plain

 

次に、メニューから「ファイル」→「エクスポート」→「3Dモデル」でobj形式を選んでモデルをobj形式にエクスポートする(Pro版限定機能)エクスポートの際にオプションで「すべての面を三角形化」と「裏面と表面をエクスポート」のチェックをオンにしてエクスポートする。

 

f:id:flying-gadget:20171113211355p:plain

 

エクスポートするとNagoyaCAS.skpの場合は以下のファイル及びフォルダが作成される。この3点セットが後から必要になる。SketchUo Proの機能が必要なのはここだけなので、Warehouseの目ぼしいデータに対して30日以内に片っ端から上記の作業を行って下の3点セットを手に入れておこう。

 

  • NagoyaCAS.obj(形状データ)
  • NagoyaCAS.mtl(素材データ)
  • NagoyaCAS(テクスチャ画像フォルダ)

 

X-Planeのシーナリーオブジェクトも.objであるが、ここで作成した.objファイルはそのままではX-Planeでは使えない。もう一段変換する必要があるのだ。ここで活躍するのが以降で解説するobjutils_combined.pyというPythonスクリプトである。

なお、SketchUpからX-Plane用の.objファイルを直接出力するプラグイン(SketchUp2Xplane)も公開されているが、多くのモデルでテクスチャが上手く変換できないのでお勧めしない。また、SketchUp2Xplane→objutils_combined.pyでSketchUp Proの機能に頼らない変換も試みたが上手くいかなかった。現状私が試した範囲ではSketchUp Proの機能でobj変換→objutils_combined.pyでX-Plane変換が唯一上手くいった方法である。

 

PythonスクリプトでX-Plane形式に変換

ここからは上で得られた3点セットをobjutils_combined.pyを使ってX-Planeのシーナリーで利用可能なオブジェクト+テクスチャに変換する手順を解説する。

 

スクリプトのダウンロード

スクリプトの作者であるOscar Pilote氏のDropboxからobjutils_combined.pyをダウンロードする。

 

www.dropbox.com

 

Python環境の構築

objutils_combined.pyを実行するにはPythonと関連ライブラリ(numpy, pillow, rectpack)をインストールする必要がある。まずはPython本体を入れる。以下のリンクからPythonをダウンロード、インストールする。私はPython3.6.3を入れた。インストールの際にはAdd Python3.6.3 to PATHにチェックを入れてPATHを通しておこう。

 

www.python.org

 

f:id:flying-gadget:20171114005415p:plain

 

Python本体のインストールが完了したら、次にobjutils_combined.pyで使っている数値計算、画像処理等のライブラリをインストールする。コマンドプロンプトを管理者権限で起動(スタートメニューの検索窓に"cmd"と入力し、表示されたコマンドプロンプトのアイコンを右クリックして「管理者として実行」を選択)し、以下のコマンドを順に入力する。ライブラリが自動でダウンロードされ、インストールされる。

 

pip3 install numpy

pip3 install pillow

pip3 install rectpack

 

f:id:flying-gadget:20171113215915p:plain

 

データ変換

テキストエディタに以下の内容を入力して、拡張子を.batとして先ほど3Dモデルをエクスポートして得られた3点セットと同じフォルダに保存する(NagoyaCAS.objはファイル名に合わせて変更)。

 

python objutils_combined.py NagoyaCAS.obj

 

objutils_combined.pyも同じフォルダに配置し、先ほどの.batファイルをダブルクリックして実行する。スクリプトが走って以下の2つのファイルが作成される。

 

  • NagoyaCAS-XPlane.obj (X-Plane用オブジェクトファイル)
  • NagoyaCAS-grouped.png(1枚に統合されたテクスチャ画像)

 

ここで得られた2つのファイルがX-Planeシーナリーで利用可能なオブジェクトである。WEDを使える人はこれらをCuntum Sceneryフォルダに入れてWEDで開いてみると、テクスチャも含めて綺麗に変換できていることが確認できると思う(WEDについては次回の記事で解説予定)。

 

f:id:flying-gadget:20171114003637p:plain

 

上手く変換できない場合

以下のような場合にはobjutils_combined.pyでの変換ができないことがあります。現時点で判明している傾向と対策は以下の通りです。

 

テクスチャが無いモデル

テクスチャ画像が使用されていないモデルの場合、読み込むべきファイルが無いためかスクリプトが途中で止まります。この場合はSketchUpのマテリアル設定で、何でも良いのでテクスチャを設定ましょう。

 

細かすぎるモデル

非常に細かく作りこまれたモデルをそのまま変換しようとするとスクリプトがMemoryErrorで止まることがあります(植木の葉っぱが1枚ずつモデル化されているなど)。上空から見るのに明らかに不要なディテールは削って簡略化しましょう。また、変換の際に「表面と裏面をエクスポート」のオプションをオフにするとMemoryErrorが解消する場合があります。ただしこの場合は面の法線が正しい方向を向いていないと透明になってしまいます。

 

今回はここまで。次回はこれらのオブジェクトを配置してシーナリーを作成する手順を解説予定です。お楽しみに!

それでは、今日も読んで下さりありがとうございました。Good day!