stl形式ファイルを用意する
stl形式ファイルは、3Dデータをプリントするときによく用いられるファイル形式です。3Dプリンタとしてよく知られている「MakerBot 」も、stl形式ファイルから3Dプリントすることができます。
ここでは、つくれば工房で考察した、stl形式ファイルを用意するまでのさまざまなアプローチをまとめてみました。(このほかにも様々な方法があると思います。)
インターネット上に公開されているstlファイルをダウンロードする
などなど、たくさんあります。
やってみました!
「MakerBot Thingiverse 」から、子犬の3Dデータ (Dog.stl)をダウンロードし、ダヴィンチ da Vinci 1.0 で3Dプリントしたものが、下の写真です。黒のフィラメントを使いました。また、サイズを小さくして、高さ4cmくらいにしました。
プリント台にのりを塗り忘れたので、尻尾をプリントする途中でひっぱられたのか?熱のためか?ちじれてしまいました。
また、子犬の背中に文字でサインを入れたところ、文字の線が細すぎてつぶれてしまいました。ストラップにしようと思い、子犬の頭にリングを付けましたが、これはフィラメントが垂れてしまい、つぶれてしまいました。
3D CAD、3DCGなどの3Dモデラーを使って3Dモデリングし、stlファイルに書き出す
3Dモデリングする知識を習得する必要があります。
stlファイルに書き出すことのできるソフトを選んでください。
などなど、たくさんあります。
画像ファイルから、3Dデータを作成し、stlファイルに書き出す
この方法で3Dデータを作成するイメージは、2Dデータである画像ファイルに、高さ?厚み?をつけて3Dにする、というものです。
Windowsに付属の「ペイント」か、もしくは、「gimp 」と、「Inkscape 」、「OpenSCAD 」を使います。
途中で、「Inkscape 」から「OpenSCAD 」が読み込み可能なファイルへ書き出します。これをするためにあらかじめ、Inkscapeのエックステンションに機能を追加する必要があります。Inkscapeのエックステンションに機能を追加する方法については、こちらのサイトをご覧いただき、あらかじめ機能を追加しておいてください。「Inkscape to OpenSCAD converter v6 」
画像ファイルを用意するか、描画ソフト(ペイントや gimp など)で描画し、画像ファイルとして保存します。
1.で用意、もしくは、保存した画像ファイルを、Inkscape で開きます。
画像をトレースして形状をパスに変換します。そのためにまず、画像全体を選択します。次に、Inkscape の上部のメニューにある[パス]ー[ビットマップをトレース...]を実行します。その際、[モード]タブの[単一スキャン]で[明るさの境界]のしきい値を0.8前後に設定します。
「Inkscape 」から「OpenSCAD 」が読み込み可能なファイル(.scad形式ファイル)へ書き出します。Inkscape の上部のメニューにある[エックステンション]ー[パスから生成]ー[Paths to OpenSCAD...]を実行します。このとき、「Height(mm)」に高さ?厚み?を数値で入力します。
4.で書き出した.scad形式ファイルを、OpenSCAD で開きます。
コンパイルします。OpenSCAD の上部のメニューにある[Design]ー[Compile and Render (CGAL)]を実行します。
もし思ったとおりに表示されなかった場合は、ソースコードを編集するか、3.で設定値を変更してやり直します。
うまくいったら、.stl形式ファイルに書き出します。OpenSCAD の上部のメニューにある[File]ー[Export]ー[Export as STL...]を実行します。
使用した画像ファイルによっては、思うように3Dデータが作成されないことがあります。
Windowsのペイントで画像を描画するとき、ペンタブレットが使えました。手書きのサインを3Dデータにしてみましたが、うまくいきました。ただ、ペイントで選べるペンの太さが最大でも細くて、そのまま3Dプリントするとつぶれる場合があります。
Windowsのペイントやgimp は、ビットマップ系描画ソフトです。
Inkscape はベクター系描画ソフトです。ここからスタートとしても良いです。
OpenSCAD で直接3Dデータを制作してもいいです。(これは、上記に記載した「3D CAD、3DCGなどの3Dモデラーを使って3Dモデリングし、stlファイルに書き出す 」の方法になります。)
つくればくん
やってみました!
「つくればくん」画像ファイルがあります。
これを、Inkscape で開きます。
ビットマップをトレースして形状をパスに変換します。 [モード]タブの[単一スキャン]で[明るさの境界]のしきい値を0.8に設定して、トレースしました。この設定値は、一番細かい目の白い瞳がつぶれない値でした。
Openscad形式ファイルに書き出します。
書き出したファイルをOpenSCAD で開きます。
コンパイルます。あれ、目と口がない!
左ペインに表示されているソースコードを読みます。
ソースコードを読むと、以下のポリゴンが生成されていました。
(ポリゴン1). 顔を表す直方体
(ポリゴン2). 顔の輪郭を除く内側を表す直方体
(ポリゴン3). 口
(ポリゴン4). 右目の各部分
(ポリゴン5). 左目の各部分
(ポリゴン1)引く(ポリゴン2)引く(ポリゴン3)引く(ポリゴン4)引く(ポリゴン5)と計算されていましたので、結果、顔の輪郭だけが残ったようです。
これを、
[(ポリゴン1)引く(ポリゴン2)] 足す(ポリゴン3)足す(ポリゴン4)足す(ポリゴン5)と書き換えたところ、みごと、つくればくんができました!
つくればくんとは別に、Openscad上で土台となるプレート(リング付き)を作り、つくればくんを載せて、3Dプリントしたのが下の写真です。
スマホやデジカメで撮影した写真から、3Dデータを作成し、stlファイルとして保存する
「Autodesk 123D catch 」 を使います。
スマホやデジカメで3Dプリントしたい対象物(人物・ペット・いすなどなんでも)の周囲を360度ぐるっと20枚以上撮影します。
撮影した写真をオンライン上の Autodesk 123D catch ページへアップロードします。
指示に従って進んでいくと、写真から3Dデータができあがります。
できた3Dデータをstlファイルとして保存します。
また、できた3Dデータを編集できますが、別途 Free PC 用の「123D Catch」をダウンロードして編集するようになります。
やってみました!
自宅で、わんこの周りを一周。部屋の真ん中に寝かしつけるのが大変でした。
Autodesk 123D catch へアップロードし、3Dデータに。
(1,1,1)から原点を見た方向。やったぁ~。
真っ正面を見る。ちゃんと顔が見える。
真上から見る。あれ、半分ない・・・。
反対側から見る。べこっと凹んでる!
どうも、撮影対象物全体に均一に光が当たっていないと、影側がべこっと凹むようです・・・。
このあと、何度も挑戦しましたが、うまくいきませんでした。
一応、stlファイルに保存して、どうなっているか見てみました。なんとなく、「わんこ」ということがわかります。
Kinectを3Dスキャナーにして対象物をスキャンし、3Dデータを作成して、stlファイルに書き出す
Kinectを3Dスキャナーとして使います。そのために、Kinectから得られる距離データ・ポイントクラウドから3Dデータを作成するフリーのソフトを使います。下記の一覧がそれです。他にもたくさんあります。
また、3Dデータを3Dプリント可能なメッシュに変換・編集するMeshLab を使います。
Kinectとフリーソフトを使って、3Dプリントしたい対象物(人物・ペット・いすなどなんでも)の周囲を360度ぐるっと3Dスキャンします。
3Dスキャンして得られた3Dデータを書き出し、MeshLab でメッシュを編集後、stlファイルに書き出します。
下記WEBページを参考にしながら、SCENECT を使ってやってみました! Kinectは、「Xbox360 Kinectセンサー」を使いました。
あらかじめ、SCENECT をパソコンにインストールし、Kinectとパソコンを接続します。
SCENECT を起動後、プロジェクトを新規作成し、「Live Tracking」なるものをセッティング(デフォルト値を使用しました。Kinectから得られる距離データの、3Dスキャンデータとして使う上限値を表していると思われる「Max.Range」の値を確認します。これが、Kinectと対象物との距離になると思われます。)して、いざ、3Dスキャン開始!
眠たかったんです・・・。
スキャン中は、SCENECT のプレビュー画面にリアルタイムに3Dデータがレンダリングされます。また、Kinectの軌跡も表示されます。
Kinectを手に、人物の周囲をゆ~っくり360度ぐるっと3Dスキャン・・・!?したいところですが、途中でケーブルにつまづいたり、人物がフレームアウトしたり、くしゃみしたり。なかなか360度回転できませんでした。
が、どうにかこうにか撮り終えたのが下の画像。
顔にひびが入ってる・・・。どこかでKinectを傾けた模様。
右側・・・。
左側。こちらはきれいに撮れています!
後ろ。
真上。頭に穴が開いている・・・。Kinectの軌道が楕円・・・。ひび割れたのはこれが原因?
と・・・、とりあえず、360度ぐるりとまともに3Dスキャンできたのがこれだけでしたので、と・・・、とりあえず、メッシュ編集するために、VRML形式でエクスポート、それを、「MeshLab 」にインポートします。
メッシュ編集前。
メッシュ編集後。中心を貫いていた空洞が、メッシュで塞がれました。
上記に記載した参考WEBページを参考に、今回、MeshLab でメッシュの編集として実行したコマンドは、以下の2点です。
[Filters]ー[Normals, Curvatures and Orientation]ー[Compute normals for points set]を選択し、「Neighbour num」を「15」に設定し、[Apply]ボタンをクリックします。
[Filters]ー[Remeshing, Simplification and Reconstruction]ー[Surface Reconstruction: Poisson]を選択し、「Octree Depth」を「7」に、「Solver Divide」を「8」に設定し、[Apply]ボタンをクリックします。
最後に、stlファイルへ書き出します。どうなっているか見てみました。ちょっとこわい・・・。でもこれで3Dプリントできるはず、です。