立体地図を作る -その1標高データの準備-
とあるきっかけでインターネット上のデータから日本や世界の立体地図(3Dモデル)を作れないか調べる機会がありました。なんとかものになりそうなものができたのでやりかたを記録しておきます。
といいつつ、実は(後でわかったのですが)日本の地図については国土地理院がダウンロードできるSTLデータや触地図作成用のツールを提供してくれていました。
私の場合、立体地図モデルに自分なりの味付けをしたいという思いがあり試行錯誤を続けたのですが、とりあえず日本の立体地図を3Dプリントしたいというかたは上記のサイトをチェックしてみてください。
私がモデルを作成した手順ですが
- 標高データの準備
- 行政区画情報の準備
- 標高メッシュの作成
- 3Dモデル(STLファイル)の生成
といった順序になります。
奈良県を中心に兵庫を除く近畿地方の府県の立体地図をモデル化してDMM.makeに依頼して出力してもらった結果です。水平方向222万分の1、垂直方向が20万分の1ぐらいの縮尺になっています。
1.標高データの準備
地図を縦横の細かいメッシュに区切ってメッシュごとにその領域の標高の平均値を求めたり、行政区画とのすり合わせを行うにはフリーのGIS(地理情報システム)であるQGIS(Ver.2.18)を使います。
立体地図の基本のデータである標高データを取得しQGISに取り込みます。
元ネタである世界各地の標高データはJAXAのWebサイトから入手できます。ユーザー登録が必要ですが名前とメールアドレスぐらいをフォームに記入してサブミットすればすぐに登録してもらえます。
ALOS全球数値地表モデル(DSM) "ALOS World 3D - 30m (AW3D30)"
注意:私の環境ではブラウザにMicrosoft Edgeを使うと認証エラーがでてダウンロードができませんでした。Internet Explorerでは問題なくダウンロードできています。
正常にログインできると世界地図のクリッカブルマップが表示されるので所望の地域をクリックしていってダウンロードボタンを押下します。日本も複数の領域に分かれているので必要な領域をカバーできる分だけ何個かのファイルをダウンロードします。解凍して????????_AVE_DSM.tifという名前のファイルをとりだして1つのフォルダにまとめておきます。DSM(Digital Surface Model)というのは植生や建物を含んだ高さのデータですが本Blogの記述ではDSMのデータに対して標高という言葉を使っています。
QGISを起動して新規プロジェクトを作成、ラスタ(R)->その他->結合..コマンドで各ファイルを1つ(下記の例ではjapan.tif)にまとめます。日本の本土全体をまとめた場合、私の環境だと数分かかります。統合されたデータは1つのレイヤとしてロードされ、レイヤパネルに表示されます。読み込んだデータの座標参照系はWGS84 (EPGS:4326)です。レイヤ間でデータ処理を行う場合のためにこれをプロジェクトのデフォルトの座標参照系として設定しておきます。下の例では表示を見やすくするため、レイヤのプロパティを変更して標高を擬似カラーで表現しています。
ここで作ったラスタデータのファイルを後の処理で使うのですが、よほど大きくて高精細の地図を作成するのでなければ、この時点で縮小したデータを作っておいて以後縮小したデータを使ったほうが計算機資源の節約になります。元データのレイヤを選択しておいて右クリックメニューから「名前をつけて保存する…」を選択します。上記のようなダイアログが表示されるので解像度(青線の部分)の数字を変更して保存すれば縮小したデータが格納されます。
また、3Dモデルで山の峰の先端がとがってギザギザになるのを防ぐためこの段階でラスターデータの標高値を平滑化しておくこともできます。標準でインストールされているプラグインの中にガウスフィルタがあるのでこれを利用します。プロセッシング->ツールボックスでプロセッシングツールボックスのパネルを開き、"Gaussian"を検索すればプログラムが見つかりますのでダブルクリックで起動します。ただし、メモリの制約があるらしく、私の環境では画像の縮小や切取りを行った後でないと動作しませんでした。
メニューバーにプロセッシングが見つからない場合はプラグイン->プラグインの管理とインストールをクリックしてProcessingを検索、活性化してください。
Fusion 360でクインジェットのモデリング:可動部分のモデリング
以前にZBrushでクインジェットのモデリングを行ったときは形をなぞるので精いっぱいでしたが、試作2号機では多少のギミック(仕掛け)を導入するつもりです。子供のころ飛行機のプラモデルを選ぶ基準は、着陸脚が引っ込むとか、コックピットの風防がスライドするとか、爆弾の投下口が開く、などなど動く部分が何か所あるかでした。ところが当時はちゃんと作ることができなくて(今でもぶきっちょで細かい手作業は苦手です)、セメダイン(なつかしい)のつけすぎで着陸脚は引っ込んだまま、風防は閉じたまま、爆弾は投下できず、という残念な結果になることが多かったのです。
50年ぶりのリベンジを狙って今回モデリングしたのは
- 主翼先端部分の折れ曲がり
- 後部ハッチの開閉
の2点です。
主翼については本体と先端部の2つのBodyに分けて作成し先端部には直径1.8mmの軸を、本体側には軸受けの台をつけて直径2mmの穴を作成しました。Fusion 360ではこうやって作ったモデルが実際にうまく動くか、部品同士が干渉していないかをシミュレーションで確認することができます。
2つのBodyを(独立した座標系を持つ)コンポーネントに変換して、ジョイント機能で軸回りの円と軸受けの穴の円とを対応づけます。あとはジョイント駆動の機能で先端部を何度回転させるか角度を指定します。部品同士の干渉がなければ、指定された角度まで先端部が回転します。最初のデザインでは45度まで回転させたところで部品同士が干渉してしまいました(下図、赤丸の部分)。これ以上大きな角度の数字を入力しても先端部は回転しません。
モデルを見直して軸の形状を変え、主翼本体側にも彫り込みをいれた結果、下記のように直角に折り曲げることができるようになりました。
Fusion 360でのクインジェットのモデリング:主翼編
主翼部分も胴体と同様に2次元の断面スケッチをつないで形状を作ります。根本の厚みがある部分と翼の部分を分けて作成しました。根本部分は胴体と同様に進行方向に沿って断面図を並べていきます。
主翼部分については直線的、硬質な感じをだしたかったのでソリッドモデルのロフトを使っています。
主翼の本体部分は横方向に断面スケッチを並べていきます。
こちらもソリッドモデルのロフト機能を使って断面をつないでいます。先端部と主翼本体が別れているのは主翼の先端を折り曲げられるようギミックを入れる予定だからです(次回か次々回に記述予定)。
垂直上昇用のローター部分の穴をあけるため、主翼の上表面にスケッチを行います。前にモデリングに使ったZBrushと異なり、穴の直径などの寸法を指定できるので「設計やってる感」を得られます(笑)。
押し出し機能で穴をあけたり中心の円柱形状を形成しています。主翼表面からのローターの羽根1枚分の形状を押し出して、円形状パターン機能により円の中心を囲むように16枚の羽根を作成しています。
Fusion 360でのクインジェットのモデリング:胴体編
Fusion 360でのモデリングは2次元のスケッチを描いてからそれを押出したり回転させたりして3次元の形状を作っていくというやりかたが基本です。いろいろと試行錯誤を繰り返して下図のようなクインジェットの胴体を作ったのでそのやりかたを記録しておきます。
まず、ネットで見つけた写真やイラストを下絵にして上と横から見た輪郭をスケッチします。
上や横から見たスケッチをもとにして胴体の断面のスケッチをいくつか作ります(スケッチのプロジェクトや交差という機能を使います)。これらの断面図を繋げていって望む3次元形状を定義します。
Fusion 360は大ざっぱに言って以下の3種類のモデルの操作モードをサポートしています。
- ソリッド
- サーフェス
- スカルプト
どの操作モードにも断面図を繋げるロフトと呼ばれる機能はありますが、得手不得手があるようで「この入力からは形状を計算できません」といったエラーメッセージを出されることがしばしばあります。私が試してみた限りではスカルプトモードでロフトとブリッジという機能を併用したら所望の形を作ることができました。ブリッジ機能の制約で各断面のスケッチを構成するエッジの数(今回は10)に統一しています(最後の断面図は単純な長方形ですが10個のエッジを分けて描いています)。
まず、機首の先端部の面積が無い点だけの断面スケッチ(下図のプロファイル1)とその隣の断面スケッチ(同プロファイル2)をロフトを使って繋げます。デフォルトでは先端部が鋭角に尖った円錐状の形状が作られますがオプション(赤枠部分)で「点の接線」を指定するとゆるやかに膨らんだカーブができて下絵に近づけることができました。
面積のある断面同士を繋げるのにはブリッジを使います。ブリッジは3次元形状のエッジ同士を繋げる機能なので、まず2次元のスケッチから押出で筒状の面を作成します。ブリッジに必要なのはこの面の機首側のエッジです(面自体は後で削除してしまいます)。
ブリッジを用いて接続するエッジ(下図ではちょっと見にくいですが選択すると黄色になります)を指定します。
下図のように対応するエッジ同士を繋ぐ面が生成されます。この後、個別の面を選択してフォーム編集の機能を使って移動させて縦や横から見た輪郭に合わせて調整していきます。断面形状が急激に変化する部分ではエッジを追加して細かな形状変化に対応します。こういったエッジや面単位で追加や移動ができることがスカルプトモードの大きな利点です。
クインジェット2号機試作開始
先週ぐらいからクインジェット試作2号機のモデリングを始めました。
今度は、翼の先端が折れ曲がるとか後部のハッチが開くとかといったギミックをいれたいと思っています。そのため、モデリングツールもCAD/CAM向けのFusion 360を使用することにしました。寸法をきっちり指定したり、可動部品の干渉をチェックしたりといったことができます。
また、個人での使用であれば基本、無料というのも魅力です。
Fusion 360についてはこちら
CAD/CAM/CAE が統合されたまったく新しい 3D ツール| Fusion 360
クインジェットの組立
組立といっても瞬間接着剤(アロンアルファ)を使って
1.左右に分かれている胴体を接着
2.左右の尾翼部分をそれぞれ接着
3.左右の主翼をそれぞれ接着
するだけですが、ダボをはめ合わせるためにやすり(中目)で削って調整する作業が必要になります。特に、主翼の厚さに合わせて胴体にあけるダボ穴を小さく設計したのですが、出力してみるとほとんど穴があいていなくて主翼側の突起部分がなくなるくらいまで削らなくてはなりませんでした(どのくらい精度がでるものなのか実感としてわかっていなかった)。ダボの形と大きさについては次の設計では要注意です。
接着の際、パーツとパーツのすき間を埋めるためにエポキシパテ(2種類の材料を混ぜ合わせるタイプ)を使ったのですが、私には硬すぎてあまりきれいに仕上げることができませんでした。粘度が調整できるラッカーパテを使ったほうがよかったかも(今回はペットの老犬に溶剤の影響がでるのが怖くて使いませんでした)。パテのはみ出た部分についてはやすりと3Dプリンタ造形物用研磨フィルム(紙やすりでもよかったかも)で削りました。
ざっと磨いた後はこんな感じ。
あと、細かいやすりがけや磨きのときにとても役にたったのが.. 「ハズキルーペ」。
裸眼の解像度が落ちてきたおじさんにとっては必需品でした。
3Dプリントに使ったモデルは下記にて公開しています。
3Dプリンタをお持ちのかたは自分で造形できると思います。
クインジェットを3Dプリントで出力
CGのレンダリング用に作ったデータを元にして3Dプリント用のデータを作成しました。
このままでも出力はできるのですが、業者に委託したときの料金を安くするためいくつかのパーツに分割してコンパクトに配置しています。
DMM.MAKEさんに出力を依頼しました。1週間ほどでこんな感じで造形されたパーツが送られてしました。