こんにちは!金融ソリューション事業部の山下です。 本記事では、オープンソースの3DCGソフトBlenderを用いて、現実の地形や建物を模した3DCGモデルを生成する方法を紹介します。
今回はBlender GISというプラグインを用いて、衛星画像、建物データ(OSM)、標高データ(SRTM)を利用してモデルを制作しました。
実施環境/ツール
実施手順
- BlenderにBlenderGISプラグインをインストールする
- 衛星画像データを取得する
- 標高データ(SRTM)の取得、反映
- 建物、その他データ(OSM)の取得、反映
- 建物上部へテクスチャをマッピング
- 建物側面へのマテリアルの適用
1. BlenderにBlenderGISプラグインをインストールする
プラグインのインストールは、メニューのEdit > Preferences > Add-onsを選択して、ダウンロードしたZIPファイルを読み込むことで完了します。完了後、Add onの一覧にBlenderGISが追加され、チェックがつきます。
2. 衛星画像データを取得する
BlenderGISプラグインをインストールすると、以下のように3D viewport内に「GIS」というメニューが表示されます。
GIS > Web geodata > Basemapを選択します。
設定はそのままで、OKを押下します。
世界地図が表示されます。
Gボタン押下で検索バーが表示されるので、表示させたい地名で検索します。 今回は「Shinagawa Station」、Zoom Levelは「16」と入力します。
品川駅周辺の地図が表示されました。
Eボタン押下で、Basemapの2D画像がExportできます。
3. 標高データ(SRTM)の取得、反映
2D画像を選択した状態で、GIS > Web geodata > Get SRTMを選択します。
ちなみにSRTMはShuttle Radar Topography Missionの略で、スペースシャトルに搭載したレーダーで取得した地球の標高データです。 取得にはopnetopography.orgのAPI Keyが必要になります。以下のサイトからAPI keyが無料で取得可能です。 https://portal.opentopography.org/
API Keyを入力してOKボタンを押下。
先ほどの2D画像にSRTMの標高データが反映されます。 起伏には乏しい地域ですが、高輪のグランドプリンスホテル周辺や御殿山周辺は比較的標高が高いことが分かります。
4. 建物、その他データ(OSM)の取得、反映
2D画像を選択した状態で、GIS > Web geodata > Get OSMを選択します。 ちなみにOSMはOpenStreetMapの略で、オープンソースで運営されている地図データのプロジェクトです。
取得するデータ種類を選択します。今回は全て選択します。 また、手順3.で標高データのマッピングを行っている為、Elevation from objectのチェックをONにします。
OKボタンを押下すると、建物データや線路データなどが反映されます。
5. 建物上部へテクスチャをマッピング
4.で取得した建物データ(Areas;building)を選択した状態で、Tabキー押下でEditModeに切り替えます。 ModeをFace Selectに変更します。
どれか一つの建物上部の面を選択した状態で、Select > Select Similar > Normalにより、同じ向きの面を全て選択します。
建物上部の面が選択されている状態
次に、Edit Modeから、UV Editor Modeに切り替えます。
上部メニューから、マッピングさせる画像(EXPORT_GOOGLE_SAT_WM)を選択します。
選択した面と、画像が一致するように、位置を修正します。 Gボタン + マウスカーソルで移動、Sボタン+マウスカーソルでスケールの調整が可能です。 ランドマークとなる建物にフォーカスすると調整しやすいです。
位置が決まったら、マテリアルを設定します。 まず、3D View右下のMaterial Propertyメニューを選択して、+ボタンでマテリアルを作成します。 今回は、2つのマテリアルスロットを作成しました(「Material 001」と「roof」)。 Assignボタン押下で、Edit Modeで選択している面に、これらのマテリアルを適用します。
roofマテリアルを選択した状態で、UV Editor ModeからShader Editor Modeに切り替えます。
Shift + Aで検索バーを出して、Image Textureノードを追加します。 インプットイメージに、先ほどUV Editorでマッピングさせた画像(EXPORT_GOOGLE_SAT_WM)を選択して、ColorをPrincipled BSDFノードのBase Colorに接続します。
建物上部の面に、衛星画像がマッピングされました。
6. 建物側面へのマテリアルの適用
続いて、建物側面のマテリアルを作成します。 建物側面のテクスチャは衛星データやオープンデータで提供されていないので、一般的なビルに近しいテクスチャを使用します。
以下のテクスチャを使用します(フリーアカウントでも商用フリーの画像がダウンロード可能です)。 Size MのAlbedo, Height, Normal, Roughness, Metalic, AO, Emissiveの7種類の画像をダウンロードします。 https://www.textures.com/download/PBR0537/138572
先ほど作成したマテリアル(Material 001)を選択した状態で、UV Editingメニューを開きます。
Principle BSDFを選択した状態で、Ctrl + Shift + Tを押下します。 Blender File Viewが表示されるので、先ほどダウンロードした画像を全て選択して、「Principled Texture Setup」を押下します。
建物の側面にもマテリアルが適用されました。
完成イメージ
完成イメージはこちらです。夜景にしてみました。 本記事ではライティング、レンダリングのプロセスは割愛します。
所感
今回はGISを用いてビル群を作成しました。 ハイクオリティなビルを作成するアプローチは他にも色々とありますが、GISを使うと大規模な都市や地形がほぼ一瞬で生成できる為、高精細なクオリティが不要な遠景等で用いる分には有用だと感じました。また、山など起伏のある地形のモデルを制作する場合は国土地理院地図などもう少し正確な標高データの活用も有用だと思います。
現在ISIDはweb3領域のグループ横断組織を立ち上げ、Web3およびメタバース領域のR&Dを行っております(カテゴリー「3DCG」の記事はこちら)。
もし本領域にご興味のある方や、一緒にチャレンジしていきたい方は、ぜひお気軽にご連絡ください!
私たちと同じチームで働いてくれる仲間を、是非お待ちしております!
ISID採用ページ(Web3/メタバース/AI)
参考
- https://www.esrij.com/gis-guide/gis-datamodel/gis-datamodel/
- https://www.youtube.com/watch?v=YNtKnmRXVlo&t=283s
- https://www.youtube.com/watch?v=uk404c43pRY
執筆:@yamashita.yuki、レビュー:@wakamoto.ryosuke (Shodoで執筆されました)