3Dモデルをマウスでこねるのをやめてコードで書く
※本記事にはアフィリエイトリンクを含む場合があります。内容は広告の有無に影響されません。
結論
3Dモデルをコードで書くと寸法をミリ単位で断言でき、パラメータを1つ変えるだけで寸法違いを量産でき、設計そのものを git で差分管理できる。
なぜコードで書くのか
3Dプリンタを導入して最初に詰まるのは、たいていモデリングです。Blender や Fusion を開いても、マウスで面を引っ張って角を丸めて、という操作はプログラミングに慣れた頭にはむしろ難しい。
そこで方針を変えて、マウスをやめてコードで設計することにしました。理由は3つです。
- 「幅80mm・傾き65°」と数値で断言できる(目測でズレない)
- パラメータを1つ変えるだけで、寸法違いを何個でも量産できる
- 設計がテキストなので、git で差分管理できる。壊しても戻せる
造形ではなくプログラミングとして3Dモデルを書ける、というのがコード CAD の本質です。
作例① OpenSCAD で充電スロット付きスタンド
OpenSCAD は、直方体や円柱を difference()(くり抜き)や hull()(包む)で組み合わせて形にする、プログラマ向けの CAD です。
工夫したのは2点です。
充電スロット — ベース底面から前リップを貫通させて、USB-C ケーブルを通したまま置けるようにしました。
サポート材ゼロ設計 — 背もたれの傾斜を垂直から25°(傾き65°)に抑え、オーバーハングの45°ルールを大きく下回るようにして、サポートなしできれいに出るようにしました。
そして phone_width を書き換えるだけで、対象が変わっても即対応できます。市販品を「サイズが合うか」で選ぶより、実測して数値を入れるほうが早いという状態になります。
作例② Python で数式から STL を吐く
こちらは振り切った例です。Python の標準ライブラリ(math と struct)だけで、CAD ソフトを一切使わずに STL をゼロから書き出しました。
やっているのは、星型の断面を高さ方向に少しずつ回転させながら積み上げ、内壁・外壁・底・口のフチを三角形で張っていくだけです。上にいくほど半径をすぼめるテーパーを入れて、これもサポート不要にしました。
TURNS(ねじれ回数)や N_POINTS(星の山数)を変えると、まったく違う形が一瞬で出ます。形が数式なので、パラメータがそのままデザインになります。
使い分け
| 対象 | 選ぶもの |
|---|---|
| スタンド・ケース・治具などの機構部品 | OpenSCAD(ブロックの足し引きと相性がよい) |
| 曲面・アルゴリズミックな造形 | Python(数式で形が決まるものはコードが最強) |
ざっくり「四角い実用品=OpenSCAD/曲面=コード」で外しません。
詰まった点
STL の法線の向き — 三角形には表裏があり、向きが裏返ると印刷時にモデルが壊れます。Python で手書きするなら、各三角形の法線を外向きに揃える処理を自分で書く必要がありました。ここが地味にいちばんの山です。
45°ルールの詰め — サポートなしは正しい方針ですが、「傾きは足りているか」を設計時に毎回計算しなければなりません。妥協すると垂れます。
単位ズレ — パラメトリックは実測が命です。目分量で入れると数mmズレます。ノギスは必須級でした。
向く場合とそうでない場合
向く — プログラミングができる、マウスでの造形が苦手、同じ形の寸法違いを量産したい。
向かない — 有機的な曲面を手で彫りたい場合。それは Blender や粘土的なソフトのほうが向きます。コードで人体は作りたくない、というのが正直なところです。
よくある質問
Q1OpenSCAD と Python、どちらを使えばいいですか?
スタンドやケースのような機構部品は OpenSCAD が向きます。ブロックを足し引きする発想と相性がよいためです。花瓶のような曲面やアルゴリズミックな造形は、数式で形が決まるので Python 側が強くなります。四角い実用品は OpenSCAD、曲面は コード、で選べば外しません。
Q2サポート材なしで刷るにはどうしますか?
設計時にオーバーハングの角度を確認します。45度ルールを大きく下回るよう傾斜を抑えれば、サポートなしできれいに出ます。ただし毎回計算が必要で、妥協すると垂れます。
Q3Python で STL を直接書くときの注意点は?
三角形の法線の向きです。三角形には表裏があり、向きが裏返ると印刷時にモデルが壊れます。手書きするなら、各三角形の法線を外向きに揃える処理を自分で書く必要があります。