BoardCADで作ったサーフボードをMeshLabを使って3Dプリンタで使えるSTLにする
リーシュコード付けました!
BoardCADで作ったサーフボードのSTLファイルを3Dプリンタで使えるようにするまで手こずりました。
何種類ものソフトを使うからすぐに操作を忘れちゃう!MeshLabの使い方をメモしておきます。
自分だけのサーフボードを設計できるBoardCADを以前の記事で紹介しました。
サーフボードを作ろう! オープンソースのサーフボード設計CAD "BoardCAD"
本物を作る場所も設備も腕もありませんので、
作ったボードの形状を3Dプリンタでプリントしてミニチュアを作るまでをご紹介します。
今回はBordCADからのデータを3Dプリンタで扱いやすくする加工までを書きます。
まだ最適な手順は判っていませんが何かの参考になるかと思います。1か月も経つと私もすっかり忘れてしまうから書き留めておきます。
いろいろなソフトウエアを駆使します。
使うソフト
できるだけ個人利用なら費用のかからないソフトを使います。
- BoardCAD https://sourceforge.net/projects/boardcad/
- サーフボードの形状を設計します。
- MeshLab http://meshlab.sourceforge.net/
- BoardCADのメッシュデータを整形するのに使います。
- FreeCAD http://www.freecadweb.org/
- 複数の3Dデータを合成するのに使います。
- OpenSCAD http://www.openscad.org/
- 直接は使いませんがFreeCADでメッシュを扱う時に使うかも。
サーフボードの設計
サーフボードの基の形はBoardCADで作ります。今回はBoardCADで作ったデータをどうやって3Dプリンタで使えるSTLにするかを説明します。そのため、BoardCAD自体の説明はしません。サーフボードの設計には専門用語が使われています。私はサーフボードの各部の名称とか良く知りませんので単語をうまく解釈できません。
サーファーの方なら知っているカタカナことばが英単語になっているだけと思えば何となく判るんじゃないかと思います。
BoardCADで自分の好きな形状を作ります。
BoardCADの3D表示は操作しずらいので適当にデザインしたら形状をエクスポートして他のソフトで見た方が楽です。
今回はミニチュアでキーホルダを作ろうと思うので少しデフォルメを入れます。何もしないでプリントしたらペーパーナイフかと思うようなモノができました。
サーフボードと言うよりパドルボードを作りたいのでロングボードを選択します。板をぶ厚くして外形も少し幅広にしてっと。ボキシーにはどうやってするんだ?フロントが広めの卵型にしてっと。
BoardCADはSTLとSTEPという形式でエクスポートできます。前回の記事でも触れましたがSTLへのエクスポートで例外エラーが頻発します。どういう条件で出るのか判りません。3Dレンダリングしていろいろいじってからエクスポートすると成功したりしました。STEPならいつでも成功するようです。
BoardCADの出力データのメッシュを整形する
BoardCADでエクスポートした形状データをMeshLabで整形します。MeshLabはSTLもSTEPも読み込むことができます。MeshLabで読み込む
MeshLabを起動したらBoardCADで作ったファイルをドラッグアンドドロップしましょう。いきなり意味の分からないメッセージが・・・
重複した頂点をまとめてくれるようです。とりあえずOKを押しましょう。
なにか真黒なものが表示されました。
この3Dモデルは小さな三角形の集合でできています。三角形には表と裏があります。裏は黒に表示されちゃいます。つまり全部裏返しになってると真黒になります。
表と裏は法線という面に垂直なベクトルで記録されています。この向きを逆にしてやります。
MeshLabのメニューから
Filters->Normals, Curvatures and Orientation->Invert Faces Orientation
をクリックします。
するとダイアログボックスが出ます。
Force Flipだけチェックあるいは何もチェックしないでApplyを押します。
それっぽく表示されました。
モデルの加工はFiltersにあるメニューで行います。今後も他の加工を使います。なんか長い英語がたくさんあって気が重い・・・
メッシュの構造を確認する
ボードのお尻に黒い所があります。まだ反転している面があるのでしょうか?拡大してみましょう。
面ではなく穴が空いています。
お尻だけではなく一番前ノーズにも穴があります。
ボードのデータの構造を分解してみます。
Filters->Mesh Layer->Split in Connected Componentsをクリックします。
なにも変化が無い? いえ、変わっています。Ctrl+Lを押すかViewメニューでLayer Dialogを表示しましょう。
illustratorとかお絵かきソフトを使う方にはおなじみのレイヤーで3Dデータを管理・表示できます。上の図の例ではレイヤー0が最初に開いたボードのデータです。ファイル名がレイヤー名として表示されますのでご自分のファイル名に読み替えてください。
そして、Split in Connected Componentsでできたのがレイヤー1と2です。名前はCC0とCC1と自動で付いたようです。
何をしたかというと、元の3Dメッシュから一つながりの面毎にレイヤーを作ってコピーしてくれたようです。
要はBoardCADで作ったSTLファイルは2つのメッシュからできていたという事です。上の図の赤枠の部分でレイヤーの表示/非表示の選択ができます。CC0レイヤーだけ、CC1レイヤーだけとか表示させて見ましょう。
例えばCC0レイヤーだけ表示してみました。
どうやらサーフボードの上面だけのメッシュデータのようです。内側は先ほどの法線ベクトルで裏になるので黒で表示されています。同様にCC1レイヤーは底面だけのメッシュになっている事が判ります。
こういうデータは3Dプリンターには向きません。どうにかして一体化した一つの塊でボードを表すように変換していかなくてはなりません。
まずは表と裏のメッシュをつないで一つのメッシュにしたいです。そして穴になる部分を塞がないと。
メッシュを再構築する
面を結合する方法
前の節で作ったCC0レイヤーとCC1レイヤーは使いませんので削除します。レイヤーダイアログで右クリックしてDelete Current Meshを選ぶと消せます。
3DモデルのSTLデータは一つの物体に見えてもいくつかの面が合わさっている場合があります。このような3Dモデルは3Dプリンタ用のデータとしては具合が悪く、多くの場合スライサは正しく物体を認識してくれません。変な場所に隙間が空いたり、壁が完全に消えたりします。
上面と底面に分かれたサーフボードを少なくとも一つの繋がったメッシュにしなくてはなりません。穴も塞ぎます。
つなぎ目の頂点座標は2つのメッシュで重なっているはずなので簡単に一つのメッシュにできます。
Filters->Cleaning and Repairing->Merge Close Vertices
結合する頂点の距離を指定できるようです。パラメータの意味は判りません。うまくいかない場合は適当に変えて試してます。今回の例ではほぼ一致している頂点なので何もいじらなくても良いでしょう。
Applyを押して結合します。
見た目は何も変わらなくとも上面と底面のメッシュは結合されました。確かめたければ先ほどのSplit in Connected Componentsをしてみてください。今度はレイヤーが一つ増えるだけです。メッシュはひとつしかないからです。
次にテールとノーズの穴を埋めなくてはなりません。
MeshLabのボタンにFill Holeというのがあります。
押してみましょう。
エラーが出ました。manifoldnessじゃないと使えないそうです。3DプリンタのSTLファイルで苦しめられる単語です。今やっている作業もmanifoldなSTLにするためにやっています。
MeshLabでは強力なメッシュ修正機能があります。で・す・が! 使い方がぜんぜんわかりません。
今回は極めて単純な形状なので何とかなるかな。
Filters->Cleaning and Repairing->Select non Manifold Edges と
Filters->Cleaning and Repairing->Select non Manifold Vertices を使います。
マニフォールドじゃないエッジと頂点を選択して削除してしまいます。Applyを押すとマニフォールドじゃない部分があれば選択されます。今回はVerticesは何もありませんでした。Edgesをやると、
ノーズの穴のところどころが選択されました。
これを削除します。
Filters->Selection->Delete Selected Vertices をクリックします。
赤く選択された頂点と関連する面が削除されました。
ここで先ほどエラーで使えなかったFill Holeボタンを押してみます。
Applyを押して結合します。
見た目は何も変わらなくとも上面と底面のメッシュは結合されました。確かめたければ先ほどのSplit in Connected Componentsをしてみてください。今度はレイヤーが一つ増えるだけです。メッシュはひとつしかないからです。
次にテールとノーズの穴を埋めなくてはなりません。
MeshLabのボタンにFill Holeというのがあります。
押してみましょう。
エラーが出ました。manifoldnessじゃないと使えないそうです。3DプリンタのSTLファイルで苦しめられる単語です。今やっている作業もmanifoldなSTLにするためにやっています。
MeshLabでは強力なメッシュ修正機能があります。で・す・が! 使い方がぜんぜんわかりません。
今回は極めて単純な形状なので何とかなるかな。
Filters->Cleaning and Repairing->Select non Manifold Edges と
Filters->Cleaning and Repairing->Select non Manifold Vertices を使います。
マニフォールドじゃないエッジと頂点を選択して削除してしまいます。Applyを押すとマニフォールドじゃない部分があれば選択されます。今回はVerticesは何もありませんでした。Edgesをやると、
ノーズの穴のところどころが選択されました。
これを削除します。
Filters->Selection->Delete Selected Vertices をクリックします。
赤く選択された頂点と関連する面が削除されました。
ここで先ほどエラーで使えなかったFill Holeボタンを押してみます。
今度は何か表示されました。認識された穴の一覧が表示されます。Selectにチェックを入れてFillボタンを押します。
するとリストが更新されました。
Acceptなる欄が増えます。
Acceptボタンを押します。
もう穴は無いそうです。もしもまだ塞がれていない穴があれば先ほどのリストが更新され残りの穴が表示されるでしょう。
では穴が塞がったか見てみましょう。
お尻にあったかまぼこ型の穴が綺麗に塞がれています。鼻先の穴も塞がれてました。
今回のモデルはこれで理想的なメッシュになったはずです。STLへエクスポートしましょう。
場合によっては一回ではうまくいきません。もう一度Select non Manifold EdgesとVerticesを実行して何か選択されるようなら削除して穴を塞ぎます。これを何回か繰り返す場合もあるでしょう。
面を再構築する方法
面のつなぎ目がきれいになっておらずメッシュをつなぐことができない場合があります。
そんな時は面を近似して立体の形を再現する方法を使ってみます。
そんな時は面を近似して立体の形を再現する方法を使ってみます。
メニューの
Filters->Remeshing, Simpification and Reconstruction->Surface Reconstruction
に
Ball Pivoting
Poisson
VCG
と3つの異なるアルゴリズムで面を再構築する事ができます。
私は詳しく知りませんが、球体の集合として再構築、ポアソン方程式で再構築、立方体の集合で再構築という感じのようです。
もとの形が丸っこければBallで、角ばっているとか平面が多ければVCGを使う感じでしょうか。マシュマロマンならBallで、マインクラフトみたいならVCGですかね。良くわからないならPoissonを使う程度かなとしか説明できません。
どれを選ぶにしろ十分に小さい球や立方体の集合を使えば同じ見た目になるはずです。が、メモリーの都合かパラメータの選択範囲の都合かそんな訳にもいきませんでした。
それぞれパラメータがたくさんあって何をどういじれば良いのかわからないです。元の数式から辿らないと説明はできないでしょう。どなたかにお任せ。
今回のサーフボードの場合はPoissonかVCGを使うと良い結果が得られました。ミニチュアなら極端な話、楕円の板でも十分ですから・・・。
ではPoissonを選んでみましょう。パラメータのダイアログが出てきます。
Octree Depthが近似の粗さのようなパラメータみたいです。数字が大きいほど良く形が再現されました。今回は13で試しました。しかし、大きすぎるとメモリーが足りないと怒られます。タスクモニタを見てもそれほど使ってないのになぁ。
話がそれますが私のPCのメモリーは16GB積んでます。5年近く使っていますが一度もメモリーを使い切った事はありませんでした。しかし、MeshLabでいろいろフィルターを動かしていると初めて16GBのメモリーを使い切りました! スワップファイルもフルに。結果、計算できなかったんですけどね。
さてさて、Applyを押して実行してみましょう。
MeshLabなどオープンソースのプログラムでは計算にシングルスレッドしか使ってくれないのが多いです。少し時間がかかります。
うまく動いたようです。細かく見ると微妙な存在しなかった凸凹ができてしまっています。
モデルを覆うような面で近似しますのでお尻の穴も無くなっています。
これなら今回十分使えます。
これなら今回十分使えます。
メッシュを粗くしてデータ量を減らす
これで基本的には3Dプリンタで出力できる形になりました。
しかし、もう少し手間をかけてやります。私はFreeCADを良く使っていますが、このままではメッシュデータが多すぎてFreeCADではまともに扱えないのです。
あらためてメッシュっって何?というのがピンときませんよね。でもビュワーの表示を変えればすぐに判るでしょう。今までの図でメッシュ表示しちゃってるけど。
Layerダイアログで上の図の赤枠のボタンを押しましょう。
表示が変わります。ほら、メッシュでしょ。あみあみ。
で、このメッシュが細かすぎです。こんな高精度のデータは必要ありません。
3Dプリンタでミニチュアを作る場合、せいぜい全長20cmでしょう。私の場合は12cmほどを目標にしています。これに対してノズル径や層厚が0.4mmほどです。比では300:1です。実際の造形精度はもっと悪いですしね。細かいデータがあっても表現できず無駄なだけです。
という事でメッシュの頂点の数を減らします。サーフボードは単純な形なのでガンガン減らせます。
ちなみにメッシュは三角形の集まりです。三角形の点を頂点(vertex)、三角形の面をfaceと呼ぶと思ってください。
それではメッシュを減らします。
メッシュの具合がわかるようにメッシュを表示させておくのを忘れないでください。
Filters->Remeshing, Simplification and Reconstruction->Quadic Edge Collapse Decimation
をクリックします。
するとダイアログが表示されます。
Percentage reductionはメッシュの削減率を入れます。いきなり減らしすぎると形が失われるかもしれないので50%から25%ほどに指定して、何度も実行します。今回は0.5とします。
Preserved Boundary of the meshのチェックを入れます。メッシュに端っこが無い場合にはチェックはいりません。今回の再構築をする前のモデルなどでこのチェックをしないと上側と下側の境界の頂点座標がバラバラになって隙間が空いてしまいます。
Applyを押すと50%削減されます。今回は4回Applyボタンを押してみました。つまり94%ほど減らした計算になります。
メッシュがスカスカになりました。3回で良かったかな?さすがに形が崩れますが3Dプリンタで使うには十分です。
ここで一旦保存しておきましょう。STLでエクスポートします。エクスポートする時はレイヤーダイアログで必要なレイヤーだけ表示した状態で行います。
これでMeshLabの操作は終わりました。
もしもフィンのデータをfinFoil.ioなどで作られたならメッシュの削減だけを行いましょう。finFoilのデータは再構築しなくとも3Dプリンタで使えます。
今回の記事を書くのはとても疲れました。思いがけず長編になってしまった!1週間持たず忘れることばかりなので書いておかないと。書いてる途中で忘れてましたし。
コメント
コメントを投稿