OSMの地形データを利用したLand作成

Last-modified: 2022-01-25 (火) 07:28:29

この記事では、フリーで利用可能なオープンストリートマップ(OpenStreetMap、OSM)の地形データを元に、3DモデリングソフトBlenderとMetasequoiaを使いRigidchipsで読み込めるLandを作成する手順について解説しています。

この記事は、基本的に下記の記事の内容に準じています。
OSMからRigidChipsのLand作成の手順について

3Dモデリングソフトについては1%ぐらいしかわかってないので、細かい点についてはご容赦ください。

用意するもの

  • Blender
    • https://www.blender.org/
    • 2022年1月23日時点、この記事で使用するのはSteamで用意したバージョン 3.0.0ですが、他のバージョンでも可。

Blenderでの作業

OSMプラグインの導入

https://www.kkaneko.jp/db/cg/blenderosm.html
基本的にはここを参照。

上記リンクよりblosm.zip(展開不要)をダウンロードし、下記手順でBlenderに導入します。
osm導入.png
編集>プリファレンス>アドオン>インストール
で先程ダウンロードしたblosm.zipを選択し、「アドオンをインストール」を選択。

画面右上のクソゲロ小さい左向きの矢印(またはNキー)からRight side panelを開き、下記のように「osm」のタブが現れれば導入成功。
osmタブ.png
osm設定.png
プリファレンス>アドオンの画面より、「有効化アドオンのみ」をチェックしimport-Export: blender-osm
でダウンロードしてきた地形データを保存するフォルダを選択、
Mapbox衛星写真を利用する場合はMapboxアクセストークンを入力。

図のようにUIを日本語にしたい場合、左上Edit>Preference>Interface>Translation>Langage>日本語(Japanese)
を選択。

OSMデータのインポート

blender画面.png
Blenderのメイン画面に戻り、画面中央のCube(または右上シーンコレクションのCube)を左クリックしDeleteキーで削除しておく。
CameraとLightは消しても消さなくてもRigidchipsには関係はない。

Rigid side panelのosmの隣の「ビュー」タブから「終了」の数値をデフォルトの1000mからヤケクソに大きい数字にしておく。この距離より遠いものはBlender上で表示されなくなるため(必須ではない)

osm座標設定.png
osmタブを開き、Extent:のslectボタンを押すと左上のような地図のwebページが開くので
適当な地域を選択し、Show slection rectangleをクリック。
地図上にインポートする範囲を選択する矩形が現れるので、四隅のノブを移動させてええ感じの位置を選択して「Copy」をクリック。
クリップボードに座標情報が送られるので、Blenderに戻り、「paste」で座標を転送。
インポートする項目(ここではterrain(地形))を選び、importをクリック。

どの項目をインポートするにせよ選択した範囲がデカすぎるとここでBlenderが爆発するので、初めは小さめで試しましょう。

続いてimage overlayを選択し、import。
オーバーレイはArcGIS SatelliteかMapbox Satelliteを選択。
左下に緑の文字で進捗が表示されるのでしばし待つ。

しばし待つとインポート完了するので、
シーンコレクションのTerrain>Terrian>overlay項目があればインポート完了。
カメラを引くと地形が見えるはずです。地形が灰色に見える場合、右上の丸いアイコンを押し、
3Dビューのシェーディングをマテリアルプレビューに切り替えればOK。
インポート完了.png
(海の色が衛星画像の切れ目になってんな…)

ポリゴン削減(Optional)

今回選択したのは島根県の島後島で、直径15kmほどの島ですが
右下ポリゴンのサイズは頂点が80万、三角面159万程です。ヤバいですね。
(出てない場合は右下のバーの部分を右クリックし、「シーン統計」にチェック)
デシメート.png
後述の理由で地形のポリゴンを削減したい場合、デシメートモディファイアーを使用します。(多分他にもやり方はあると思いますが)
右下のレンチアイコン>モディファイアー>デシメート>比率がポリゴン削減後の割合なので、例えば四分の一にしたい場合0.25と入力。
これがなかなか優れもので、凹凸の激しい部分はそのままに、平坦な部分のポリゴンを統合するため全体の印象はよほど極端な削減でない限り変わりません。

地形の整形(Optional)

さて、このまま保存してもいいのですが、島後島には2000mの空港があります。
インポートしたterrainメッシュは大抵の場合平地でもガタガタなので、ここだけでも平坦になってると嬉しいところです。
空港ポリゴンの選択.png
左上のオブジェクトモードを編集モードに切り替え、空港部分のメッシュを選択。
(ドラッグアンドドロップで矩形選択、Shift押しっぱなしで続けて選択できます)
空港平坦化前.png
横から見た図。だいぶガタガタ。
この状態で「S」→「Z」→「0(ゼロ)」を押して天地軸を平坦にします。
空港平坦化後.png
滑走路端が土手みたいに段になってしまいましたが、Google Mapで見る限り、実物もだいぶ坂になっているようです。
Googlemap.png
ってかGoogle Mapの地図クオリティ高すぎてウケる。これ使わせてくれ!(滑走路のペイントまで読める!)

その他地形の調整、Blenderに詳しい人がいたらよろしくやってください。(全投げ)

Blenderからの出力

保存周りは参照元記事
OSMからRigidChipsのLand作成の手順について
と特に変わりは無いのでそちらを見てください。
オブジェクトファイル.objとマテリアルファイル.mtl、テクスチャファイル.pngが保存されたはずなので、
一つのフォルダにまとめておくと吉です。

テクスチャの軽量化(Optional)

Blenderから出力されたテクスチャファイル.pngを.dds(Direct Draw Surface)に変換します。
.ddsとははDirect Xでの使用に最適化されたラスタ画像フォーマットで、ファイルの軽量化と読み込みの高速化が図られています。
pngからddsへの変換の方法はいくらでもありますが、

などが利用できます。
生成された.ddsファイルを元のpngファイルの代わりにテクスチャへ指定すれば作業完了です。
Metasequoia内でddsファイルを指定してもよいですが、Metasequoiaはddsの表示に対応しておらずMetasequoia上の見た目では灰色になってしまうため、下記作業工程の後、Metasequoiaが出力した.xファイルのテクスチャアドレスを直接書き換えても問題ありません。

Metasequoiaでの作業

Metasequoia LE R3.0で.objを開きます。インポート時の軸とスケールの設定に注意。
マテリアルの設定.png
パネル>材質パネル>設定>模様 で先程のテクスチャファイルを相対パスで指定。

地形の調整(Optional)

方位が反転しているので、気になるなら、Ctrl+Aで全メッシュを選択し、「C」(回転)>「Y軸」>180と入力しOK。
高度変更.png
全体のメッシュの高さが適当なので、気になるなら全体の高さを調整。
「V」(移動)を押して「絶対」ボタンを押し、海面の高さにしたい頂点をクリックし座標を確認。
この場合Y軸が178.35なので、Ctrl+Aで全メッシュを選択し、「相対」を押し、Y軸に-178.35と入力し、OK。
移動後「絶対」を押して海岸線付近の頂点をクリックして、Y軸が0近辺になっていることを確認。

空港原点.png
また、このままだとRigidchipsで読み込んだときの原点が島の中心部になるため、気になるなら空港中心がX=0、Z=0となるように移動。要領は先程と同じ。(これもうちょっと賢いやり方がある気がする)

Metasequoiaからの出力

出力周りは元記事を参照。
法線OFF.png
ファイルの種類をDirect3D Retained Mode(*.x)とし、軸とスケールの設定に注意。
元記事では保存時設定の法線(スムージング)チェックがONでしたが、OFFにすると出力ファイルが3~4割ほど小さくなり、読み込みも早くなります。
ファイルサイズが大きすぎると出力に失敗してしまうので、ダメだった場合は前述のポリゴン削減を試してください。

Rigidchipsで開く

この島で.xファイルは22MB、テクスチャは6MBになりました。
開くのに少々時間が必要でしょう。
RCで読み込み.png
見たところ海岸線の高さが要調整ですが、方位が正しいことを確認したらひとまず完成!