何回やっても苦労する仕事ですね...。
formZにはTerrainツールがあるので一見簡単そうですが、それがなかなかうまく行かないんです...。
[等高線]
クライアントから等高線データが提供される場合でも必ずしも安心できないです。
データに様々な問題があり、'使えない'場合が多々あります。
そもそも、CADデータを貰えない場合も多いものです。
その場合は地図の画像をトレースして等高線データを作ることになります。
[formZ]
- 等高線が途切れている
- 等高線の自己交差
- 等高線が敷地範囲をしっかり跨いでいない
- 短い線分などのゴミが混じっている
- 等高線が多すぎる
幸いなことにformZにはTerrainツールの実行前にこれらの問題を事前にチェックする
Contour Dr.ツールがあり、
チェック時に'修正を試みる'というオプションもあります。
ただしあんまり使えなくて、結局手動で修正することになります。
修正すべきものの数が少なければ手動でもよいのですが、何百もあったらもう無理...。
等高線に問題があっても面を張る方法はないのか?
今回、高さ情報を持った等高線データを貰えましたが、上記のようなデータの問題で結局Terrainツールは諦めました。
ではどうしたらよいのか?
[Rhinoceros]
Patchコマンドを使うと複数のカーブ上に面を張ることができます。
しかも早い!サーフェースの次数を調整すればグリッド状の面も張れます。
ただし、サーフェースの分割数に制限があるので、
あまり細かいメッシュにはできません...。
IGES経由でMayaに互換した後、NurbsSurface to Polygonを使うと
グリッド状のポリゴンメッシュにできます。ただし、元がNurbsサーフェースなので、
凸凹部分が跳ね上がったり沈み込んだりします。
もう少しディテールのあるメッシュに出来ないか?
たとえばカシミール3Dみたいな地形作成ソフトだと最小5mとか10mメッシュくらいのデータを扱います。5mというと自動車くらいの大きさですが、細い道路なんかは潰れてしまいます。
これでも地形モデリングソフトの世界では非常に細かいものです。
でも実際はもう少し細かく表現出来たらいいのになという場合が多々あります。
[Maya nCloth]
MayaにはnClothという '布' をシミュレートする機能があります。
Gravity(重力)を設定すればテーブルクロスを敷くようにメッシュを物体の上に
被せることができます。
今回は等高線を縦方向にExtrudeしてポリゴンメッシュにし、
それをRigidに変換してテストしてみましたが重くて動きませんでした...。
大きすぎて無理だと諦めました。
他の方法
コンターラインの頂点を'点群'と見立てれば、点群処理用のソフトが使えるのではないかと思い、試してみました。今回は約240万点になります。
[ReCap]
http://www.autodesk.com/products/recap-360/overview
どうもProバージョンが無いとメッシュの生成と書き出しができないようです...。
[MeshLab]
http://www.meshlab.net/
Point Cloudを扱うオープンソースソフトウェアです。
通常はレーザースキャンで生成される点群データを扱いますが、
点データならとりあえず取り込めます。
今回はMayaに取り込んだ等高線カーブからCVの座標情報を
全部書きだしてデータとしました。
3列の座標値の羅列のテキストデータです。
データを取り込んだらダウンサンプリングした後、
平均ノーマルを計算、
Surface Reconstruction Ball Pivoting で面を生成できます。
やってみましたが、これもあまりうまく行きませんでした...。
等高線の性格上、均等にバラ撒かれた点群にはならないので、
ディテールを潰さないように細かい設定にすると、
穴だらけになってしまいます。逆に穴を埋められるように
パラメータを調整するとディテールが無くなってしまいます...。
まあ、レーザースキャン出来れば早いんですけどね。
結局、Rhinoで作ったラフなメッシュに手動でディテールを付けることになりました。
ローポリモデリングです。ディテールを端折って形状特徴をひろっていくという地道な作業です。
手間がかかりますが、無駄なポリゴンが増えず軽くて扱いやすいデータにできます。
今のところこれがベターなのかなと思っています。