PolyScriptで小物トレーを作る
それではPolyScriptで実際にモノを作っていきましょう。
PolyScriptってなに?という方はまずこちらを参照してください。
まずは**live.objhub.org**を開いてください。ブラウザだけでPolyScriptを試せるPlaygroundです。左ペインにコードを書くと、右ペインで3Dモデルがリアルタイムにプレビューされます。インストール不要なので、読みながら一緒に手を動かしてみてください。
tootalltoby - 3Dモデリングの筋トレ
さて、3Dモデリングは書けば書くほど上手くなります。でも「何を作ろうかな」と考えるところで手が止まりがちですよね。
そこでおすすめなのが**tootalltoby**です。
tootalltobyは、3Dモデリングの課題を提供してくれるサイトです。毎日新しいお題が出て、それを自分の好きなCADツールで再現する - いわば3Dモデリングの筋トレのようなものです。単純な形状から複雑なものまで段階的に用意されているので、初心者でも無理なく取り組めます。
このブログでは、tootalltobyの最初の例題から順番にPolyScriptで解いていきます。PolyScriptがどこまで実用的な形状を表現できるのか、一緒に確かめていきましょう。
今日のお題: Simple Tray
tootalltobyの最初の例題は小物トレーです。デスクの上に置いて、SDカードや消しゴムや小さなネジを入れておくあれです。シンプルだけど実用的で、3Dプリンタで印刷すればすぐに使えます。

完成コード
先に完成形をお見せします。たった1行です。
box 55 30 7 | edges =Z | fillet 8 | faces top | shell 1.6
「え、これだけ?」と思いましたか? これだけです。5つの操作をパイプでつなぐだけで、ちゃんとしたトレーができあがります。
では、1ステップずつ見ていきましょう。
Step 1: 箱を作る
box 55 30 7
box は直方体を作るプリミティブです。引数は 幅 奥行き 高さ の順番で、ここでは55mm x 30mm x 7mmの箱を作っています。原点を中心に配置されます。
SDカードや小さなパーツを入れるのにちょうどいいサイズ感です。この段階では角張った直方体にすぎません。
Step 2: 縦エッジを選択する
box 55 30 7 | edges =Z
ここからPolyScriptらしさが出てきます。edges =Z は「Z軸に平行なエッジを選択する」という意味です。
直方体には12本のエッジがありますが、そのうちZ軸に平行な4本 - つまり四隅の縦エッジだけを選び出します。
セレクタの記号を少し説明すると:
-
=Zは「Z軸に平行」(parallel) -
>Zは「Z方向の最大」(上面) -
<Zは「Z方向の最小」(底面)
= が平行、> が最大方向、< が最小方向、と覚えておけば大丈夫です。
Step 3: フィレットで角を丸める
box 55 30 7 | edges =Z | fillet 8
fillet 8 は、選択されたエッジに半径8mmのフィレット(角丸)をかけます。
Step 2で縦エッジだけを選んであるので、上下の水平エッジはそのままに、四隅だけが丸くなります。トレーらしい柔らかいフォルムになりますね。
フィレットはCADモデリングで最もよく使う操作のひとつです。R(半径)の値を変えるだけで印象がガラッと変わるので、いろいろ試してみてください。ただし、フィレット半径がエッジの長さの半分を超えるとエラーになるので注意です。
Step 4: 上面を選択する
box 55 30 7 | edges =Z | fillet 8 | faces top
faces top は最上面を選択します。これは faces >Z と書いても同じ意味です。直感的に読めるように名前エイリアスが用意されています。
この面選択が、次の shell 操作で「どの面を取り除くか」を決めるカギになります。
Step 5: シェルで中空にする
box 55 30 7 | edges =Z | fillet 8 | faces top | shell 1.6
最後の shell 1.6 で、選択された上面を取り除きつつ、肉厚1.6mmの中空体にします。
shell は「貝殻」のように外側だけを残す操作です。面を選択してから shell を呼ぶと、その面が開口部になります。上面を選んでいるので、上が開いたトレーの完成です。
肉厚の1.6mmは、FDM方式の3Dプリンタで一般的な0.4mmノズルの4倍(4ウォール分)にあたります。薄すぎると強度が足りず、厚すぎるとフィラメントの無駄遣いになるので、この辺りがバランスの良い値です。
コードの全体像をもう一度
box 55 30 7 | edges =Z | fillet 8 | faces top | shell 1.6
左から右に読むだけで、何をしているか分かります。
- box 55 30 7 - 55x30x7mmの箱を作る
- edges =Z - Z軸に平行な4本の縦エッジを選ぶ
- fillet 8 - 選んだエッジをR8で丸める
- faces top - 上面を選ぶ
- shell 1.6 - 肉厚1.6mmで中空にする(上面が開口)
tootalltobyで回答
tootalltobyで問題を開始するとタイマーが開始されます。
なんだかちょっと落ち着かないのでタイマーは無視してのんびりやっていきましょう:)
tootalltobyでは回答をグラム(g)で提出します。CADで得られるのは体積(cm³)なので、素材の密度を掛けて重さに変換する必要があります。tootalltobyの標準素材はABSで、密度はだいたい1g/cm³です。
最初これを知らなくて、ABSの密度を調べるのが大変でした。
liveのステータスバーにはモデルの体積がcm³で表示されるので1を掛けた体積=重量になります。完成したら、live.objhub.orgのステータスバーの体積を確認してみてください。
今後の計画
次回は、もう少し複雑なモデルに挑戦してみようと思います。穴を開けたり、パーツを組み合わせたり、PolyScriptの真価が発揮される場面をお見せできればと思います。
最後まで読んでいただきありがとうございました。質問やフィードバックがあればぜひコメントしてください。一緒に作っていきましょう。
Discussion