はじめに
本記事では以下の2部構成で、陰関数モデリング(Implicit Modeling)の説明・実演をしていきます。
- 陰関数モデリングに関する説明、TPMS(Triply Periodic Minimal Surface、三重周期極小曲面)によるモデリング
- 形状を引数とした陰関数によるモデリング
モデリングには主にRhinoceros-GrasshopperのプラグインJellyfishを使用しています。
第1章では陰関数モデリングの説明と、TPMSによる様々なモデリングを行っていきます。
陰関数モデリングとは?
y = f(x)
のように変数の一方について解かれた形式の関数は陽関数と呼ばれます。一方、F(x, y) = 0
のように解けた形式で書かれていない関数は陰関数と呼ばれます。陰関数モデリングは陰関数による表現で形状をモデリングする手法です。
例えば円をモデリングするときは、以下のように陰関数を定義します。
F(x,y)=x^2+y^2-R^2
この陰関数をもとにした等式または不等式で領域を定義してモデリングを行います。
例えば上記陰関数においてR=5
として、F(x,y)=0
の領域に形状を生成するとxy
平面に以下のような円が生成されます。(可視化の都合上、円に厚さを持たせています)
F(x,y)\leq 0
とすれば内部が充填された円となります。
F(x,y,z)=x^2+y^2+z^2-R^2< 0
とすれば球となります。
陰関数モデリングの利点として、ブーリアン演算(形状同士の足し算や引き算)も陰関数で表すことができ、演算が失敗しにくい点があります。
例えば、陰関数F_1<0,F_2<0
により定義される2つの形状G_1,G_2
があったときに、陰関数F=\min(F_1,F_2)<0
で表される形状はG_1
とG_2
を足したもの、陰関数F=\max(F_1,-F_2)<0
で表される形状はG_1
からG_2
を引いたものものとなります。
陰関数を用いたモデリング
波状の板
以下のように三角関数の和で陰関数を定義すれば、波状の板となります。
F(x,y,z)=|\cos (k_xx+\phi_x)+\cos (k_yy+\phi_y) +k_zz|-t<0
パラメータk_x,k_y,k_z,\phi_x,\phi_y
を連続的に変化させれば、形状が変化していく様子が見て取れます。
TPMS
z
方向にも三角関数で変化する陰関数とすれば、TPMSの一種であるSchwarz Pに厚みを持たせた構造となります
\text{Schwarz P}:F(x,y,z)=|\cos x+\cos y+\cos z +s|-t<0
他にもよく陰関数モデリングの例としてGyroidやSchwarz Dがあげられますが、それぞれ厚みを持たせた陰関数表記と形状は以下のようになります。
\text{Gyroid}:F(x,y,z)=|\sin x\cos y+\sin y\cos z+\sin z\cos x +s|-t<0
\text{Schwarz D}:F(x,y,z)=|\sin x\sin y\sin z+\sin x\cos y\cos z+\cos x\sin y\cos z+\cos x\cos y\sin z +s|-t<0
アイキャッチの画像はGyroidに厚みを持たせ、Nature ArchitectsのロゴNに割り当てたものです。
同様にSchwarz P, Dも容易に割り当てることができます。
TPMSの陰関数を拡張したモデリング
TPMSの陰関数を拡張していくつかモデリングをしていきます。
変化のスケールを変える
Gyroidの陰関数に、x,y,z
方向の変化のスケールを決めるパラメータk_x,k_y,k_z
を導入し、k_x,k_y,k_z
に異なる値を設定すれば各方向の周期を変えることができます。
F(x,y,z)=|\sin k_xx\cos k_yy+\sin k_yy\cos k_zz+\sin k_zz\cos k_xx +s|-t<0
厚みを連続的に変える
また、厚みのオフセットパラメータs
を変えると、厚みをつける位置を変えることができます。
ここでパラメータs
を空間座標によって変わる関数にすると、厚みをつける位置を連続的に変えることができます。
F(x,y,z)=|\sin k_xx\cos k_yy+\sin k_yy\cos k_zz+\sin k_zz\cos k_xx +s(x,y,z)|-t<0
同様に厚みを決めるパラメータt
を関数とすれば、厚みを変化させることができます。
円筒座標・極座標でGyroidをつくる
座標系を円筒座標・三次元極座標に変えてGyroidの陰関数を定義すれば、円筒状・球状にGyroidを割り当てることもできます。
F(r,\theta,z)=|\sin k_r r\cos n_{\theta}\theta+\sin n_{\theta}\theta\cos k_zz+\sin k_zz\cos k_rr +s|-t<0
F(r,\theta,\phi)=|\sin k_r r\cos n_{\theta}\theta+\sin n_{\theta}\theta\cos n_{\phi}\phi+\sin n_{\phi}\phi\cos k_rr +s|-t<0
異なるTPMSを補間する
異なるTPMSの陰関数を足し合わせて新しい陰関数を作ることで、中間形状を作ることもできます。
\text{Gyroid}:F_G(x,y,z)=\sin k_xx\cos k_yy+\sin k_yy\cos k_zz+\sin k_zz\cos k_xx
\\
\text{Schwarz D}:F_D(x,y,z)=\sin k'_xx\sin k'_yy\sin k'_zz+\sin k'_xx\cos k'_yy\cos k'_zz+\cos k'_xx\sin k'_yy\cos k'_zz+\cos k'_xx\cos k'_zy\sin k'_zz
\\
F(x,y,z)=|aF_G(x,y,z)+(1-a)F_D(x,y,z)+s|-t<0
混合パラメータa
を空間座標によって変わる関数にすれば、GyroidからSchwarz Dに連続的に変化させることができます。
最後に
本章では陰関数モデリングの説明と、TPMSによるモデリングの実演をしてきました。
次章では、形状を引数とした陰関数によるモデリングについて解説します。