3DP ジャングル

知っておくべき⁠3Dモデリングからプリンティングまでの流れ

前回は悩みに悩んで3Dプリンタをとうとう購入するところまでを紹介しました。セットアップは思っていた以上に簡単で、まずは同梱されていたbenchyと2色のサメをプリントしてみました。benchyはだいたい25分くらいでプリントできました。2色のサメもいい感じにでてきました。

また、ThingiversePrintables.comのような、モデルを世界中の人と共有できるサービスもあるため、これらからファイルをダウンロードしてプリントすることも可能です。しかし、ありものをプリントしたところで、3DPは特に楽しいとは思わないでしょう。例えばキャラクターのフィギュアをプリントしたところで(それはそれでおもしろいですが)造形のクォリティ自体は型に流し込むようなやり方のほうがはるかにきれいにできあがりますし、早晩飽きてしまうことでしょう。それではこの3Dプリンタ連載も今回で早速終了です。

3Dプリンタを持つ最大の醍醐味は自分だけの用途にあった形・サイズの製品をこの世に作り出せることでしょう。それをするためには、前回の最後で述べたとおり、3Dモデリングができなければいけません。3Dプリンタを有効活用するためにも、まずはモデリングからプリンティングの流れを理解する必要があります。

今回はその流れについて見ていきます。

3Dモデリングからプリントのパイプライン

私が3Dプリンタ購入に二の足を踏んでいたひとつの理由は(きちんと調べていなかったため)モデリングから3DPにいたるまでの工程をよく理解していなかったからでした。どうやってモデリングしてそれがどのようにプリントされるのかがよくわかっていなかったのです。改めて調べてみると、モデリングからプリントのパイプラインはプログラマの私にはとても分かりやすいものでした。

よくあるプログラミングのパイプラインでは、

  1. ソースコードを人間が記述する
  2. コンパイラが機械語にコンパイルする
  3. コンピュータがその命令を実行する

という流れですが、3DPもこれとほぼ同様の流れです。3DPにおいては、

  1. 3Dモデルを人間がデザインする
  2. それを3MFないしSTLという形式に変換する
  3. それをさらにG-codeという機械語にコンパイルする
  4. 3Dプリンタがそれを実行する

という流れになります。

3DPの場合変換ステップがひとつ多いですが、プログラミングとかなり似ていることがわかるかと思います。

それぞれのステップを逆順に見ていきましょう。

プリンティング

3Dプリンターの動作は基本的にG-codeと呼ばれる命令セットを1行ずつ実行していくことで制御されています。コンピュータにおけるアセンブリコードのようなものと考えてもよいかもしれません。アセンブリコードを手書きするプログラマもいるように、理論的にはG-codeを直接書いて3Dプリンタを制御することも可能です(G-code自体はコンパイルの必要性はないので、テキストファイルのままプリンタに渡せます⁠⁠。

例えばG-codeでエクストルーダを特定の位置に動かすには、以下のようなコマンドを実行します。

G0 X100 Y100 Z500

G0「直線的に目的の位置に移動」するためのコマンドで、X100Y100Z500 は それぞれX・Y・Z座標の位置を指定しています。他にも円形に位置を動かしたり、ビルドプレート(エクストルーダから素材が置かれるエリア・台)の温度を設定したりと、3DプリンタのすべてをG-codeで制御することが可能です。

もちろん通常はこのコードを人間が手書きすることは現実的ではありません。例えば私が作った簡単なレゴブロックに互換性のある長いほうの辺が3〜4cmのおもちゃのブロックをプリントするのでさえ4万行近いG-codeが必要となります。この過程は通常ソフトウェアに行ってもらいます。

スライシング

スライシングとは、汎用3Dモデルデータを3Dプリンタが理解可能なG-codeに変換する工程で、3DPではこの役目を担うのがスライサと呼ばれるソフトウェアです。

スライサはモデルデータを解析し、実行環境なども考慮した上で、1層ずつフィラメントを積んでいくためのG-codeを生成します。必要であればサポートと呼ばれる、プリントをたすけるための追加の構造も含めたコードも作成できます。

図1 筆者の使っているスライサ
図1

プログラムにおけるコンパイラが最終的にプログラムが動作する環境ごとに特化したバイナリコードを作成するのと同じく、スライサは対応する3Dプリンタごとに特化されたG-codeを作成します。例えば、プリンタごとにプリントできる最大サイズが違いますし、対応する最高温度もまた違いますので、同じ命令セットに対応していてもそれぞれの3Dプリンタごとに同じG-codeが使えるとは限りません。よって、お使いの3Dプリンタをサポートしているスライサを使うのが重要です。

図2 G-codeのサンプル
図2

モデリング

モデリングはいわゆるお絵描きフェーズです。Blender、Fusion360、OpenSCADなどのツールを使ってモデルの形を定義します。

図3 OpenSCAD
図3
図4 Fusion360
図4

それぞれのソフトウェアには得手不得手がありますので、目的にあったソフトウェアを使いましょう。例えば、いわゆる機械部品のようなものをデザインするには各種制約やパラメトリックな設計が可能なFusion360が向いていますし、いわゆるフィギュアのような形を作るならBlender等の自由度の高いソフトウェアのほうがよいでしょう。

また、ここで重要なことはそれぞれのモデリングソフトウェアはそれぞれ独自の方式でデータを保持しており、お互い互換性がありません。この形のままだと、その後スライサがこれらの独自データ形式を理解しないと処理できなくなってします。これでは困るのでこれらのモデリングソフトウェアで作成したモデルをスライサが理解できる共通の3MFやSTLといった中間形式に変更する必要があります。

STLは長く使われてきたフォーマットで、モデルの形を三角形を敷き詰めた形でデータを保持しています。STLはほぼすべてのスライサが理解できる形式であるのが大きな強みです。3MFはSTLにはない素材や色の指定や回転などの変換を指定できるほか、複数のモデルを一つのファイルに格納できるなどの利点があります。3MFはAutodeskやMicrosoftといった大企業がバックについており、STLに比べればはるかに新参ではあるものの、新しいソフトウェアではほぼ対応されている形式です。

スライサが対応している形であればどちらの形式でも問題ありませんが、とにかく一度この中間形式にしてからスライサにモデルを処理してもらう必要があります。

OpenSCAD —⁠—プログラミングによるモデリング

この流れさえ抑えてしまえば、あとはもうモデルを作り、プリントしていくだけです。この連載ではしばらくOpenSCADと呼ばれるソフトウェアを使ってモデリングについて解説していきます。OpenSCADは覚えることが比較的少ないのと、UIを操作してモデリングするのではなく、プログラミングをすることによって3Dモデルを作成するソフトウェアなため、プログラマにはとっつきやすいのが特徴です。そのため、文章による解説が容易となります。

例えば以下のようなコードをOpenSCADで実行することによって、丸みをおびた箱を造形できます。

difference() {
    minkowski () {
        cube(50);
        sphere(5, $fn=100);
    }
    linear_extrude(55)
        square(50);
}
図5 上記のコードを使ってモデリングしたもの
図5

次回はOpenSCADを使って私が行った初めてのデザイン、そしてそれを通してOpenSCADの使い方と、3DPとソフトウェアを作ることとの違いについて解説していきます。

おすすめ記事

記事・ニュース一覧