はじめに
PLATEAUの公式で配布されているOBJファイルは、平面直角座標系で作られていて、
そのままモデリングソフトやゲームエンジンに読み込むと、とんでもない場所(正しい場所なんですけどね)に配置されます。
これをうまく調整するには、3DCGソフトなどで編集するか、読み込んでからオフセットをかける必要がありますが、
元データの座標値が大きいと、計算誤差の蓄積なども心配になります。
そこで、本稿では、どこのご家庭にもあるawkのワンライナー一発で、OBJファイルにオフセットをかけ、任意の原点にモデルを持ってくる方法を解説します。
awk
どこのUNIX系にも必ず入ってる老舗ツールですね。
1977年に3人の大先生によって開発されたテキスト加工ツールです。
今回はこれを使ってOBJファイルを加工しましょう。
なお、awkはすでにインストールされている前提ですが、入ってない場合は、Windows環境の場合だと思いますが、
gitを入れるのが楽だと思います。gitをインストールするとgit-bashという環境が一緒にインストールされ、その中にawkも含まれます。
準備1 ファイルダウンロード
PLATEAU公式から使いたい地域のOBJファイルを落とし、圧縮ファイルを展開して目当てのOBJファイルを探してください。
今回は、東京駅近辺を変換してみます。東京23区のPLATEAUデータの、lod1objの53394611_bldg_6677.objを使ってみましょう。
準備2 原点の確認
国土地理院の測量計算サイトで、原点の座標を取得します。
以下の図を参考に、
- 「地図上で選択」
- 「系番号」
- 「地図上の位置」(今回は東京駅にしてみました)
- 「計算実行」
をしてみてください。右側の計算結果の出力値のX座標とY座標を使います。
今回は東京駅を原点とします。
変換
おもむろにコマンドラインで、以下を実行します。ファイル名とオフセットの座標値は適宜変更してください。
$2にY座標、$3にX座標を「引き算」します。
$ cat 53394611_bldg_6677.obj | awk 'BEGIN{OFMT="%.11g"}{if($1=="v"){print "v",$2+5947, $3+35369, $4}else{print $0}}' > tokyost_test.obj
これでオフセットをかけたOBJファイルが作成できました。
Unityで読み込む
普通に読み込みましょう。読み込むと変な回転がかかっていると思うので、適当にRotationを調整します。
ちなみに、オフセット調整なしのも読み込んで比較すると以下のようになります。
上が原点付近に置かれているオフセット調整されたもの。下がされていないものです。