151
101

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenSCADで始めるプログラマブルな3Dモデリング

151
Last updated at Posted at 2015-12-19

初投皿になりたす。はじめたしお。 iwtn です。
今幎の10月からリブセンスにJOINしたした。
メンタヌずしおお䞖話になりたした、そしお珟時点でも䞀緒に仕事をしおいる @yut_h1979 からいくらかハヌドルを䞊げられた気がしたすが、今回は珟時点でQiitaにタグのないようなマむナなプログラミング蚀語に぀いお簡単に玹介したいず思いたす。
恐瞮ですが、仕事ずはたったく関係のない話題です。

OpenSCADずは

簡単に蚀っおしたえば、3Dモデリング、モノの圢を䜜るためのプログラミング蚀語です。

3Dモデリングを行う他の゜フトりェアずいえば、OSSではBlenderが有名です。
倧抵はGUIでマりスずキヌボヌドのショヌトカットを䜿っお、3Dモデルをグリグリ操䜜しながら圢を䜜っおいきたす。

それに察しおOpenSCADは、プログラミングの基本ずなる動き、順次・分岐・反埩ず、基本的な図圢、球・倚面䜓・錐䜓などを組み合わせおモデリングを行っおいきたす。
結果的に以䞋のような圢を**コヌドだけで**䜜れたす。
スクリヌンショット 2015-12-20 7.45.25.png
OpenSCADは、芞術的なモノではなく、どちらかず蚀えば工業的な補品、普段䜿う道具のモデリングに向いおいたす。

このように文章で曞かれおも䜕を蚀っおいるのかわかりにくいず思いたす。
では、コヌドず䞀緒にどうやっお3Dモデリングをしおいくのか芋おいきたしょう。

むンストヌル

OpenSCADは、Windows, MacOSX, Linuxず幅広い環境で䜿えたす。
公匏ペヌゞのダりンロヌド画面にアクセスしお、それぞれの環境にあったファむルをダりンロヌドしたしょう。
MacOSXであれば、ダりンロヌドしたdmgファむルを開き、アプリケヌションフォルダにドラッグアンドドロップするだけです。

画面ず基本的な図圢、球・倚面䜓・錐䜓

スクリヌンショット 2015-12-20 6.32.34.png

画面は倧きくコヌドを曞く巊偎ず3Dモデルが衚瀺される右偎に分かれたす。
画面の巊偎に出おいるコヌドが以䞋のコヌドになりたす。
このコヌドで䜜られる3Dオブゞェクトは、順に画像では巊から䞉角柱、円錐、球、立方䜓、盎方䜓ずなりたす。

translate([-40, 0, 0])
cylinder(h=20, r1=8, r2=8, $fn=3);

translate([-20, 0, 0])
cylinder(h=20, r1=10, r2=0);

translate([0, 0, 10])
sphere(10);

translate([20, 0, 0])
cube(10);

translate([40, 0, 0])
cube([8, 15, 20]);

translateは、3Dオブ゚ゞェクトが生成される堎所を移動させおいる呜什です。
OpenSCADは3Dモデリングのための蚀語なので、圓然のように空間的なベクトルを扱いたす。このコヌドでは最埌の行にある[8, 15, 20]がXYZ軞での長さを瀺すベクトルを衚珟する倀になりたす。

3Dモデルの衚瀺は、画面右偎の衚瀺郚分をドラッグアンドドロップやスクロヌルするこずで操䜜できたす。たた、䞋郚にあるメニュヌでも、同様の操䜜を行えたす。ぐるぐる回転させすぎお、どういう状態がわからなくなったら、メニュヌの巊から番目にある「Reset View」で初期状態に衚瀺蚭定を戻せたす。

順次・分岐・反埩

OpenSCADはプログラミング蚀語なので、倉数に倀を栌玍したり、繰り返しや分岐の凊理ができたす。

スクリヌンショット 2015-12-20 6.16.20.png
// x軞の間隔
x_margin = 20;

for (i = [-10:10]) {
    translate([x_margin * i, 0, 0]) {
        if (i % 2 == 0) {
            cube([10, 50, 10], center=true);
        } else {
            cube([10, 10, 50], center=true);
        }
    }
}

繰り返しの際の[-10:10]がちょっず特城的かもしれたせん。これは範囲を瀺す倀です。具䜓的には -10,-9,-8,...8,9,10 を衚しおいたす。
[-10:3:10]のように぀の倀を指定した堎合は、真ん䞭の数字はステップを衚し、具䜓的には -10,-7,-4,...4,7,10 を衚したす。
スクリヌンショット 2015-12-20 6.54.37.png

図圢の組み合わせ

単玔な図圢だけでは、珟実に必芁な耇雑なモノのモデリングはできたせん。
そこでOpenSCADでは、単玔な図圢同士を空間的に足したり匕いたりするこずで耇雑な圢を䜜っおいきたす。
スクリヌンショット 2015-12-20 6.16.13.png

translate([-40, 0, 0])
union() {
    cube(20, center=true);
    sphere(14, center=true);
}

translate([0, 0, 0])
difference() {
    cube(20, center=true);
    sphere(14, center=true);
}

translate([40, 0, 0])
intersection() {
    cube(20, center=true);
    sphere(14, center=true);
}

最初の図圢は、立方䜓ず球䜓が単玔に合わさっおいたす。図圢同士を空間的に論理挔算のORした結果、ずでもいいたしょうか。
次の真ん䞭の図圢は、たず立方䜓がありそこから球䜓の圢を抜き取っおいたす。これを論理挔算で瀺すのであれば立方䜓 AND NOT 球䜓ですね。
最埌の図圢は、立䜓同士の共通する郚分のみにしおいたす。論理挔算では立方䜓 AND 球䜓ずでもいえるでしょう。角がずれお柔らかい圢になりたした。

もちろん、䞀般的な3Dモデルのデヌタのように、頂点ずそれらを結んだ面を合わせお衚珟するこずもOpenSCADでは可胜ですが、基本的には、単玔な図圢同士を繰り返しや分岐しお生成し、組み合わせるこずで耇雑な圢状を持぀ものを䜜っおいきたす。
身の回りの補品の圢状をこういった方法で衚珟するこずを考えおみるず良い頭の䜓操になるず思いたす。

マグカップを䜜っおみる

䟋えばコップは、円柱から半埄の少し小さい円柱を僅かに高さを䞊げお匕き抜けば䜜れる、ずかですね。
それに取っ手を぀ければマグカップになりたす。
スクリヌンショット 2015-12-20 7.30.36.png

module ring(r1, r2, h) {
    difference() {
        cylinder(r = r1, h = h);
        translate([ 0, 0, -1 ]) cylinder(r = r2, h = h+2);
    }
}

module magcup(height, outer, tickness) {
    inner = outer - tickness;
    handle = height / 4;

    difference(){
        union() {
            cylinder(h=height, r1=outer, r2=outer, center=true);
            rotate([90,0,0]) {
                translate([outer, 0, -(tickness / 2)]) {
                    ring(handle, handle - tickness, tickness);
                }
            }
        };
        translate([0, 0, tickness]) {
            cylinder(h=height, r1=inner, r2=inner, center=true);
        }
    }
}

translate([100, 0, 0])
magcup(100, 40, 5);

translate([-100, 0, 0])
magcup(150, 60, 5);

ここではモゞュヌルずいう機胜を䜿っお、同じような図圢を生成する際に凊理をたずめおいたす。これで様々なサむズのマグカップを手軜に生成できたす。
取っ手郚分を䜜っおいるringモゞュヌルは、ナヌザヌマニュアルの䞀郚からお借りしたした。

先に取っ手を぀けおおいおから内偎を取り陀かないず、マグカップの内偎に取っ手が残っおしたうずいうバグも発生したす。
このように図圢同士を組み合わせる順番は倧事です。
スクリヌンショット 2015-12-20 7.26.30.png

module ring(r1, r2, h) {
    difference() {
        cylinder(r = r1, h = h);
        translate([ 0, 0, -1 ]) cylinder(r = r2, h = h+2);
    }
}

module magcup(height, outer, tickness) {
    inner = outer - tickness;
    handle = height / 4;

    union() {
        difference(){
            cylinder(h=height, r1=outer, r2=outer, center=true);
            
            translate([0, 0, tickness]) {
                cylinder(h=height, r1=inner, r2=inner, center=true);
            }
        };
        rotate([90,0,0]) {
            translate([outer, 0, -(tickness / 2)]) {
                ring(handle, handle - tickness, tickness);
            }
        }
    }
}

magcup(100, 40, 5);

その他にもOpenSCADには倚圩な機胜がありたすが、ここでは玹介しきれたせん。
興味のある方はナヌザヌマニュアルを参照いただければず思いたす。

STLファむルぞの曞き出し

画面巊偎の䞊郚にメニュヌが有りたす。
そのメニュヌの右の方に「Render」ず「Export as STL」ずいうボタンが有りたす。
これらを順次抌すず、3Dプリンタの出力サヌビスで䜿えるSTL圢匏でファむルに保存できたす。
バグを修正し、満足のいくマグカップができたら、どこかのサヌビスで出力しおみるのも面癜いでしょう。

コヌドなのでバヌゞョン管理もできたす。
誰かがモデリングしたマグカップをフォヌクしお、自分奜みにカスタマむズしおもいいかもしれたせん

なぜOpenSCADなのか

3Dプリンタも䞀時期の盛り䞊がりからだいぶ䞋火になったように芋えたす。
個人的な芋解ずしおは、3Dプリンタは既にモデリングが完了しおいる同じ圢のモノをプリントするずいう䜿い方より、より個々のリク゚ストに沿ったモノを䜜成するのに向いおいるのではないか、ず考えおいたす。

䟋えば怅子です。座りっぱなしになりやすい職業たさにプログラマですねでは、普段䜿う怅子は倧倉重芁です。そのために結構良いお倀段の怅子を䜿っおいる方も倚いず思いたす。匊瀟でもアヌロンチェアを愛甚しおいるプログラマは倚数いたす。
ただ、人間工孊に基づいおいるずはいえ、既成品でサむズも数皮類しかありたせん。たた、䜓の様々な状態に合わせお䜜られおいるものではありたせん。
そういった時に、身長、足から膝たで、膝から腰たで、骚盀の広さ、机の高さや肘など、様々なパラメヌタを考慮した、オヌダヌメむドなプロダクトを䜜る䞊で、プログラマブルなモデリングができるOpenSCADずいう蚀語に䟡倀が芋出されおくるのでは・・・

先ほどのマグカップも人の手の倧きさに合わせお䜜るこずが可胜です。お子様甚に取っ手が぀必芁であれば、Z軞を䞭心にしお180°反察偎にもう䞀぀取っ手を远加するだけです。

たずめ

プログラマブルな3DモデリングができるOpenSCADは劂䜕でしたでしょうか
未来はどうなるかわかりたせんが、自身の実珟したい䞖界ずいうものを積極的に目指しおいけるのが゚ンゞニアの良いずころです。
「よりプログラマブルな䞖界」ずいうのが自分にずっおの぀の指針です。
今幎もあず週間もありたせんが、来幎も未来を芋据えお技術を䌞ばしおいきたいず思っおいたす。

参考

ç¶šç·š

OpenSCADで䜜る日本円硬貚遞別噚

151
101
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
151
101

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?