地形メッシュを無料で作る!
[必要なもの]
- 数値標高モデル
- 基盤情報のダウンロードに必要な登録
- 基盤情報ビューワー
- 平面直角座標系
- テキストエディタ
- MeshLab
- MeshMixer
[数値標高モデル]
いわゆるDEMといわれるものを入手する必要があります。
これは国土地理院のページからダウンロードできます。
https://fgd.gsi.go.jp/download/menu.php
数値標高モデルのボタンを選択すると、
エリアを選択するための画面になります。
ダウンロードしたいエリアを選択して、
ほしい情報にチェックを入れてダウンロードします。
今回は5mメッシュだけいいですね。
※ダウンロード時にログインとパスワード認証が必要です。
ちなみに緯度・経度がわかっていると検索しやすいです。
ビューワーのダウンロード
[読み込み]
ビューワーをインストール・起動したら、
ダウンロードしたファイルをドラッグ&ドロップでデータを読み込めます。
※ZIPファイルを解凍する必要はありません。
[書き出し]
書き出したいエリアをズームして、ビューワーの画面いっぱいにしてエクスポートします。
"エクスポートー標高メッシュをシェープファイルへ出力" を選びます。
ブラウズボタンからテキスト形式.IDXYZ(*.xyz)を選んで保存します。
この時大事なのが "直角座標系に変換して出力" をチェックすることです。
書き出しエリアが何番系なのか調べて置きましょう。
[地図データ]
後で航空写真をテクスチャとして貼るなら、
地図データも出してあげると位置合わせがしやすいと思います。
.SFCで書き出せば、JWWなどでDXF変換できます。
書き出されたデータの中身はこんなフォーマットになっています。
IDとX、Y、Zの座標値の4つのコラムで構成されています。
[測量座標系の変換]
基盤情報ビューワーから書き出された点群データは測量座標系になっているらしく、
XとYが反転しています。
そのまま変換してCGソフトに取り込むとひっくり返ったりしてややこしくなるので、
CGソフトに持って行く前にテキストエディタで修正してしまうと楽です。
必要なのは以下の作業です。
- IDの列を削除 ※座標系の変化とは関係ないですが1列目は不要なので削除!
- XとYを入れ替え
- Y-Upの座標系に変換 ※Maya等、Y-Up座標系のCGソフトに持っていく場合のみ
正規表現を使った置換をすることになりますが、点群データのサイズがデカすぎると
その辺のテキストエディタでは開くことさえ大変になるので、自分はEmEditorを使っています。
一列目削除
入れ替え
Y-Upにするには測量系を直したあと、YとZを入れ替えます。
この時、Yは符号を反転してからZと入れ替える必要があります。
検索置換でやるなら、Y軸にマイナスを追加して、
あとでマイナス二つになったところを削除します。
[点群をメッシュ化]
MeshLabを使うと取得した点群ファイルをメッシュ化できます。
MeshLabはOpen Sourceです。
[MeshLab]
点群データの読み込み
Import Mesh...
[ズレている点群を削除]
点群の端部がガクンと落ちていたりすることがあるので目視で確認して、おかしければ
点を選択して削除します。
点選択ツールで選んでからDelete。
そのまま保存すると元の.xyzファイルが更新されます。
[Compute normals for point sets]
メッシュを張るまえに法線を計算します。
地形の場合、たいていは上から見てNormalを計算するのがよいと思います。
※数字キーでビューを変えることができます。
Show NormalをOnにするとNormal(法線)を表示できます。
[Surface Reconstruction : Ball Pivoting]
メッシュを生成します。
パラメータの設定がなかなか難しいので何回かトライ&エラーが必要です。
今回は5mメッシュを取得したので6くらいから始めてみます。
Pivoting Ball radiusをあまり大きくすると不正なフェースがたくさんできるので、
小さめがベターだと思います。
ただし、あとで穴がたくさん出来るので、修正が大変になります。
不正なフェースなど細かいことを気にしないような状況なら
少し大きめにしてもいいと思います。
[Cleaning and Repairing]
どうしても一発で完璧なメッシュが出来ることはないので、
いろいろな手法で修正が必要です。
Select Self Intersected Faces
Delete Selected Faces
大変落ちやすいので保存しながら慎重に!
こまめにexport as meshしてOBJなどに保存しながら作業します。
Close Holes
塞ぎたい穴の周囲の面を選択して実行するのがベターです。
周囲のフェースを選択すると重なっている面がわかるので、
その周囲まるごと削除してからClose holesをやり直すといいです。
Close Holesした後に真っ黒になったら、それは単に裏返っただけです。
[ダウンサンプリング]
データが重すぎて扱えないほどになってしまうようなら、
点群を読み込んだ後に
Clustered Vertex Subsamplingして点群の数を減らします。
[Meshmixer]
MeshLabsで修正しきれなかった穴をどうしても修正したいなら、Meshmixerが便利です。
http://www.meshmixer.com/
[Inspector]
インスペクターを使うと問題点を洗い出してくれます。
穴を塞ぐには、青いボールをクリックしてつぶしていきます。
[Fill Hole]
手動で穴を塞ぎたいなら、穴の周囲の面を選択してFキー。
Wキーを押すとワイヤーフレームを表示します。
この他にも便利な機能がたくさんあるのでいろいろいじってみると面白いですよ。