3DP ジャングル

OpenSCADを使ったモデル作成入門(1) ~初めてのモデリングから3Dプリントまで

Computer Aided Design(CAD)ソフトウェアとはその名の通り、コンピュータにデザイン・モデリングを補助してもらうためのソフトウェアです。

Fusion360、Blender、TinkerCADなど様々なソフトウェアがありますが、本連載のこれから数回ではOpenSCADを使い、その後もっと強力なソフトウェアに移行して解説していきます。

OpenSCADは専用のプログラミング言語で記述し、その結果をプログラムが解析したのち3Dモデルとしてレンダリングしてくれるツールです。OpenSCADはFusion360などの本格的なCADソフトウェアと比べると機能的には見劣りしますが、3Dモデリングに慣れていないプログラマにはとっつきやすいはずです。ブロックを組み合わせる感覚でモデリングが可能ですし、コードによって記述が可能なためコピペしながら試すことが可能です。

OpenSCADの入手と設定

OpenSCADはopenscad.orgからダウンロードして入手してください。

OpenSCADを起動してNewボタンを押し、新しいファイルを作成するとエディタとレンダリング画面が大きく表示されます。このエディタ上でOpenSCADのコードを記述してもいいのですが、正直エディタとしては物足りないため、好みのテキストエディタでファイルを編集することをお勧めします。

図1 OpenSCADの起動画面
図1

別のエディタを使う場合は、まずOpenSCADのエディタはEditorの右上にある×印をクリックして、閉じてしまいます。その後OpenSCADのDesign>Automatic Reload and Previewが有効になっていることを確認しましょう。

次に別のエディタを起動し、そちらでファイルを作成・保存します(ファイルの中身は空でも構いません。一度保存することによって、OpenSCADからそのファイルが見えるようにします⁠⁠。ファイルの拡張子は「.scad」を使うのが一般的ですが、違う拡張子でもテキストファイルなら動作します。

作成したファイルをOpenSCADで開いたのち、自分のエディタのでファイル内容を編集して保存すれば、OpenSCADがファイルの変更を検知し、自動的にプレビューが表示されるはずです。今後この記事では自動的にプレビューが表示される前提で解説をしますが、OpenSCADのエディタを使っている場合はファイル保存をするか、プレビューボタンを押さないとプレビューが作成されないことに注意してください。

図2 OpenSCADでのファイルのプレビュー表示
図2

OpenSCADの基本

まずは最もシンプルな操作として、立方体を描画してみましょう。OpenSCADで立方体を描画するにはcube関数を使います。

cube(50);

上記の場合、一辺が50mmの立方体を描画します。この際、立方体は始点からそれぞれX, Y, Zの正の方向に向かって描画されます。

図3 基本的な立方体
図3

OpenSCADでは変数に辺の長さなどの値を代入して再利用可能です。以下のようにすれば立方体と、立方体の辺の長さと同じ直径の球を描画できます。

size=50;
cube(size);
sphere(d=size);
図4 立方体と同じサイズの球を描画
図4

これだと立方体と球が重なってしまいますので、立方体をZ方向にsize分だけ移動させましょう。その場合は以下のようにtranslate関数を使います。

size=50;
translate([0, 0, size]) {
  cube(size);
}
sphere(d=size);
図5 描画位置をずらすこともできる
図5

OpenSCADの関数には、立方体のようなオブジェクトを作成したり変数に値を代入するアクション関数、そしてアクションによって作成されたオブジェクトを操作するオペレータ関数の2種類が存在します。前述の例ではcubesphereがアクション、translateがオペレータ関数です。オペレータ関数は中括弧の中に複数のオブジェクトを指定して、それらすべてにたいして同じ操作ができます。これらを含めた各コマンドに関してはOpenSCAD公式のチートシートを参考にするとよいでしょう。

以下の例ではこれまでの例の上に、円柱を作成するcylinder、オブジェクトを回転させるrotate、そして表示色を変更するcolorを使ってダンベルのモデルを作成し、そのダンベル全体を赤色で表示させます。この色についてはあくまでプレビュー中の識別に使うためだけのもので、3Dプリント時の色には関係ないことに注意してください。

radius=30;
color("Red", 1) {
    sphere(radius);
    translate([115, 0, 0])
        sphere(radius);
    rotate([0, 90, 0])
        cylinder(h=115, r=radius/2);
}
図6 描画された赤いダンベル
図6

複数のオブジェクトを交差

またintersectionを使えば複数のオブジェクトが重なった部分のみを有効にしたり、逆にdifferenceを使えば最初のオブジェクトからその後のオブジェクトの形を省いた形を作ることもできます。

以下のコードではそれぞれdifferenceで立方体の中央に穴を開けたモデル、そしてintersectionでサイコロのような立方体の角が削れたモデルが作成できます。

r=15;
difference() {
  cube(r*2);
  translate([r, r, 0])
    cylinder(h=r*2, d=r);
}
図7 立方体の中央に円柱の穴を開けたもの
図7
r=15;
intersection() {
  cube(r*2);
  translate([r, r, r])
    sphere(r/sin(atan(1/sqrt(2)))-r/10);
}
図8 立方体の角を削る表現もできる
図8

これらのintersectiondifferenceのような処理を記述した場合、プレビューでは正しく結果が表示されないことがあります。その場合はRenderボタンを押してレンダリングを行う必要があります。また、プレビュー段階で部分的にレンダリングを行うこともできます。詳しくは前述のチートシートからrender関数を確認してください。

OpenSCADから3Dプリント

ここまでの知識である程度のモデルが作成できます。次はモデルをプリントするつもりでモデリングしてみましょう。

もし皆さんが初めて3Dプリントするなら、まずは複雑な形は避けてなるたけ簡単な形にしましょう。3Dプリンタは垂直方向に層を重ねていくため、上方向から見た際にある程度複雑な形をしていても問題はないものの、横方向から見たときに複雑な形をしているとプリントが思った結果にならないことがあります。

今回はまず簡単に、丸い穴が空いた立方体と、そこに入る円柱を作成してみます。

clearance=0.5;
r=15;

difference() {
  cube(r*2);
  translate([r, r, 0])
    cylinder(h=r*2, d=r);
}

translate([-r, -r, 0])
  cylinder(h=r*2, d=r-clearance*2);

このモデルでは、円柱と立方体の間に0.5mmのクリアランス(モデル同士が触れないスペース)を作ってありますが、後程プリントしてみてうまく円柱が立方体に入らない場合はこの値をもう少し大きくしてみてください。

図9 今回プリントするモデル
図9

これをプリントするにはこのモデルを前回解説したようにSTLや3MFのようなファイルとしてエクスポートし、スライサでGコードに変換するわけです。ただしOpenSCADではその前にもうひとつステップがあります。そそれは、モデルができたらまずRenderボタンを押して、モデルのレンダリングをさせることです。この際モデルの形に無理があったりするとエラーになることもあります。そしてレンダリングが済んだら、STLエクスポートボタンを押してSTLファイルを作成します。

このレンダリングを忘れると、最新のモデルではなく一つ前にレンダリングした際の古いモデルでSTLファイルが作成されることがありますので、注意してください。

STLファイルができたら、スライサにモデルを呼び出しGコードを作成します。スライシングのためのソフトウェアも様々ありますが、基本的にはお持ちの3Dプリンタが勧めるものをまず使いましょう。例えばPrusa SlicerUltimaker Curaなどはほとんどどのプリンタでも対応可能ですが、ものによってはそれなりのカスタマイズが必要です。もし私の持っているプリンタでPrusa Slicerを使おうとすると、ファイルをネットワーク転送する機能を使うのにサードパーティー製のツールを使わざるを得ませんので、そちらの調査もしなければいけません。しかしメーカー提供の純正のスライサを使えば、多少Prusa Slicerに機能が劣っていても最初から3Dプリンタすべての機能を利用可能です。

スライスの設定はデフォルトのままでとりあえず最初はプリントしましょう。以下は今回私が使ったPrusa Slicerのスライス結果です。

図10 Prusa Slicerでのスライス結果
10

今回のモデルはどんな設定でもそれなりに簡単にプリント可能なはずです。プリントができるとこのように、立方体の中心を円柱がするすると動けるような形になっています。

図11 実際にプリントされた立方体と円柱
図11
図12 立方体の穴に、円柱がするすると入る
図12

このような簡単な形をプリントしてみるだけでも色々と学びがあります。例えば、プリント開始地点(モデルがプリントベッドと接地している部分)を観察すると、微妙にモデルの底が広くなっているのに気づくかもしれません。これはElephant's Foot(象の足)と呼ばれ、フィラメントが指定の位置で固まり切らず、まだ流動性がある間に重力や後から積み重ねられるフィラメントの重さによって横に広がってしまっていることから起こる現象です。底が広がるその形が象の足のように見えるのでそのような名前で呼ばれています。

図13 3Dプリントにはつきものの「象の足」
図13

円柱部分が立方体とは別の位置にあるのもこのためです。象の足があると、0.5mm程度のクリアランスでは結合してはいけない立方体と円柱が結合してしまい、抜けなくなってしまいます。筆者のようにプログラミング畑から来ていると、このようなデザイン時には論理的に無理のない形であってもいざプリントすると物理的な特性による制限によって結果が影響されてしまうことに新鮮な驚きを得られるはずです。この連載のあとのほうではそれらに対する対処法や考え方についても触れていきたいと思います。

図14 左の二つは円柱を中に入れてプリント。中央の立方体は裏返した状態。底面が結合してしまっている
図14

ともあれ、これでプリントまでの流れは一通り完了です! ここまでの情報だけでも色々な造形が可能ですので、是非皆さんも色々遊んでみてください。次回は押し出しを使ったモデリングについて解説していきます。

おすすめ記事

記事・ニュース一覧