2019-02-02

mapbox in Houdini


ここでは Game Development Tools の Mapbox ノードの最新改善機能を紹介する。



使用したビルド: Houdini 17.0.473、Game Development Toolkit 1.118 (下記のタイル化には 1.118 以降が必須)

1. はじめに

  • Mapbox のチュートリアル
  • Game Development Toolkit のインストール
  • Mapbox への登録
      www.mapbox.com へ行き、ユーザ登録を行い、API Key を入手する。もしかするとユーザ登録してから実際に使えるようになるまで1日かかるかもしれない。

2. Mapbox ノード

マップデータのダウンロードを始める前に、シーンファイルを保存して、ファイル名と保存場所を決定しておくのが好ましい。ダウンロードされるファイルは3種類で、シーンファイル名 ($HIPNAME) とノード名 ($OS) でそれぞれのファイル名が決定される (パラメータビューの一番下にあり)。

  • Color テクスチャ: $HIP/maps/${HIPNAME}_${OS}_terrain_color.jpg
  • Height テクスチャ: $HIP/maps/${HIPNAME}_${OS}_terrain_height.png
  • OSM マップデータ(道路などのタグ情報): $HIP/maps/${HIPNAME}_${OS}_city.osm
このファイル名設定は 1.114 以降。それ以前のバージョンの GDT の Mapbox ノードを使う場合には、ファイル名がそれぞれ固定名なので上書きしないように気をつける。
  1. Houdini 起動後、Geometry ノードを配置し、その中に Mapbox ノード を配置。
      sop_mapbox1 が出来る。
  2. Mapbox API Key のフィールドに mapbox.com で取得した Key をペーストする。
      1.118 から、環境変数 MAPBOX_API でキーを指定可能になった。これにより、ノードにキー文字列をペーストすることが不要になり、また キーを共有せずに .hip ファイルのみ共有したい場合でも、キー文字列を誤って残す可能性がなくなった。環境変数は houdini.env などに指定する。環境変数を使った場合、このフィールドは空白。
  3. 地図データを取得するには、Look Up ボタンをクリック (要 API Key)。
      地図のウィンドウが表示される。
  4. ビューを操作して、サンプルしたい位置に移動およびズーム。

      例えば、富士山山頂を中心に目いっぱいズームしたところ。
  5. Download ボタンをクリック。
      ダウンロードが開始され、終了すれば、ビューポートに富士山頂が Heightmap データで表示される。

      Space+G なり Space+F なりを押してビューを Heightfield オブジェクトにフォーカスしなければならないかもしれない。
      ダウンロード終了後、Base Settings には以下のようなパラメータ値が表示される。
    • Lat (Latitude): 緯度
    • Lon (Longitude): 経度
    • Zoom: ズーム、値が大きいほど選択された領域は狭くなる。
  6. データ量は場所とズーム値により大きく異なる。Color (衛星写真)、Height (標高情報)、OSM データとあるうち、データ量の増減が最も大きいのはマップデータ。その場所にタグされた情報 (道路、ビル、河川、その他) が多ければ多いほどデータ量も増加し、またズーム値が小さければ網羅する領域が広くなり、結果的により多くのマップ情報をダウンロードすることとなり、時間がかかる。

3. Mapbox ノードのタイル化

1.114 以降、 Offsets パラメータが追加され、 Mapbox で取得した一箇所の周囲をタイル状にダウンロードするのが非常に簡単になった。なお、ここ以下は 1.118 以降を推奨する。

  1. 上でダウンロードした富士山山頂データのパラメータを以下のように変更する。
    • Resolution Scale を 0.1
    • Terrain Mode を Polygons
    こうすることで8百万ボクセル以上のデータを4万強の頂点データで描画可能。
  2. Network View で sop_mapbox1 ノードを選択。Alt キーを押しながらドラッグすると複製が一つ出来る (sop_mapbox2)。
  3. sop_mapbox2 の Offsets を 1 0 にし、Refresh ボタンをクリック。
      ダウンロードした山頂データにぴったりと隣り合う東側のデータが取得できたことがわかるはず。
  4. Merge ノード (merge1) を作成し、sop_map1 と sop_mapbox2 を接続。
      左側の出力を接続することに注意。右側は OSM データの出力。
  5. Mapbox ノードをもう一つ複製 (sop_mapbox3) し、Offset を 0 1 として Refresh、merge1 に接続する。
      すると山頂北側も作成される。
  6. Mapbox ノードをもう一つ複製 (sop_mapbox4) し、Offset を 1 1 として Refresh、merge1 に接続する。
      すると山頂北東側も作成される。
  7. ノードの複製、Offset の値の調整を
    -1, 1 // 北西
    -1, 0 // 西
    -1, -1 // 南西
    0, -1 // 南
    1 -1 // 南東
    と繰り返し、合計9つの Mapbox ノードで 3x3 のタイル状マップデータが取得可能。

    ちなみにこの時点で Houdini は 6GB 強のメモリを消費している。
  8. カメラをズームしてみると、マップ間にギャップがあることがわかる。

    これを修正するには、それぞれの Resolution Scale を 1 に戻す必要があるが、9つのノードがある場合、3,700万頂点データを描画することになり、Houdini だけで 45GB ぐらいメモリを消費する (Win7) ので注意が必要。
1.114 では Offsets の X と Y が逆になっていたので、方向を決めるのがあまり直感的ではなかったが、 1.118 で修正された。

まとめ

今回は Mapbox データをポリゴン化した上でのタイル化を紹介したが、タイル化は Heightfield のままでは上手くいかない。 ただし、単一の Mapbbox ノードでの編集には、非常に都合が良い。それには下記のチュートリアルが非常に参考になる。

リンク集

シーンファイル


最終更新: 2023-11-26

0 件のコメント:

コメントを投稿