ライフゲームを3Dプリンタで出力する


ProcessingAdventCalendar

今年もProcessingAdventCalendar2015※1ATNDで開催してます(https://atnd.org/events/72012)が開催されております。一応主催者側なのですが、たまには記事を1つぐらい書こうかと思い、参加する運びとなりました。

12/27の予定でしたが、諸事情で本日の担当となりました。

今回の成果物

3Dプリンタを手に入れて数カ月がたちました。プログラミングで3Dモデルを作って、それを3Dプリンタで出力する、という目標を持っていたのですが、このたびようやく形になりました。やったねヽ(・-・)ノ

ライフゲームを3Dプリンタで出力
ライフゲームを3Dプリンタで出力

概要

Processing※2メディアアート向けプログラミング言語環境(https://processing.org/)で3Dモデルを生成し、これを3Dプリンタで出力します。お手軽です。

過去にはカッティングプロッタのCraftRobo※3プリンタにカッターが付いたようなもの。紙を好きな形に切ることができます(http://craftrobo.jp/)と連携したこともあります。(ProcessingとCraftROBOで、クリスマスカードを作成する
ディスプレイに表示したり、プリンタで紙に印刷する以外にもいろいろなアウトプットの楽しみがあります。個人でも気軽に手出しができるものが増えてきてうれしいものですね。

今回使用したプリンタはXYZwareのダヴィンチ Jr 1.0※4ダヴィンチ Jr 1.0(https://jp.xyzprinting.com/product/da-Vinci-1.0-Junior)になります。素材はPLA樹脂というプラスチックの素材です。積層式ですし、どうしても細かいところは荒くなってしまいますが、こうやって手軽に遊ぶのには最適です。

時間は1時間程度、コストは単純計算で約30円でした。

技術編

ソースコードは後半に貼ってあります。

ライフゲーム生成

3Dモデルを生成するわけですが、せっかくプログラミングで作るわけですから、ありきたりな形ではつまらないものです。そこでライフゲーム※5ライフゲーム(https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0)を3D空間に描画し、それを基にモデルを生成するという方針にしました。

ライフゲームの作り方はここでは割愛します。

ちなみに各ボックスの間を開けているのは、3Dプリンタと相性が悪かったためです。うまく凹みが認識できないらしく。。
ほんとはくっつけたかったのですが、ここは妥協です。

マウスでモデルを移動したり回転したりして、隅々まで見れるようにしています。

ちなみにですが、3Dプリンタで出力するためには、(当たり前ですが)ポリゴンの内側は密閉されている必要があります。

オブジェクトファイル出力

描画した3Dオブジェクトを3Dファイルに変換するライブラリとして、NervousSystemのOBExport※6NervousSystem(http://n-e-r-v-o-u-s.com/tools/obj/)を使用いたしました。Processing 3.0系であればライブラリのインポートメニューから、「obj」を検索すれば見つかります。

Processingにライブラリ管理が統合されたので、使うのがだいぶ楽になりました。
Processingにライブラリ管理が統合されたので、使うのがだいぶ楽になりました。

使い方は簡単で、インポートして、開始のbeginRecord()と終了のendRecord()を適当な位置に組み込めばOKです。
beginRecord()~endRecord()間で描画したポリゴンが指定したファイルに記録されます。

STL変換

今回使用する3Dプリンタ用のソフトXYZwareは、objファイルを読むことができません。しかしstlファイルを読むことができるため、obj→stl変換を行います。

変換ソフトとしてBlender※7Blender(http://www.blender.org/)を使用します。

メニューから作成したobjファイルをインポートします。
メニューから作成したobjファイルをインポートします。
objファイルを読み込むことができました。
objファイルを読み込むことができました。
このままだと大きいので、Scaleを小さくします。右側のツールバーで変更できます。
このままだと大きいので、Scaleを小さくします。右側のツールバーで変更できます。
stl形式でエクスポートします。
stl形式でエクスポートします。

3Dプリンタ出力

XYZwareで、作成したstlファイルを読み込み、3Dプリンタへ出力します。

印刷できるようになりました。
印刷できるようになりました。

印刷風景

iPhoneのタイムラプス機能で撮影しました。なんでもiPhoneでできる便利な世の中です。

完成

完成ヽ(・-・)ノ ※Processing上は逐次ライフゲームが進むため、出力ファイルと実行画面で模様が違うのはご了承ください。
完成ヽ(・-・)ノ
※Processing上は逐次ライフゲームが進むため、出力ファイルと実行画面で模様が違うのはご了承ください。

ソースコード

感想

もっと高価な3Dプリンタなら綺麗に出力できたり、凹みも問題なくできたりするのでしょうね。
今後もコンピュータならではのモデルを生成して創っていきたいものです。

皆様も素敵なProcessingライフをどうぞ。

 

 


脚注   [ + ]

1. ATNDで開催してます(https://atnd.org/events/72012)
2. メディアアート向けプログラミング言語環境(https://processing.org/)
3. プリンタにカッターが付いたようなもの。紙を好きな形に切ることができます(http://craftrobo.jp/)
4. ダヴィンチ Jr 1.0(https://jp.xyzprinting.com/product/da-Vinci-1.0-Junior)
5. ライフゲーム(https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0)
6. NervousSystem(http://n-e-r-v-o-u-s.com/tools/obj/)
7. Blender(http://www.blender.org/)

コメントを残す