【集中講座】– 衝突×物理演算 – Kangarooを活用して穴や凹凸を均等配置

今回は、Kangarooを活用してブレスレットをモデリングしてみようと思います。

球や円をぶつけ合うことで、穴や凹凸を曲面上に均等に配置・充填することができます。
この方法は、CirclePacking(サークルパッキング)などと呼ばれます。

1.曲線の準備

まず、Rhinoで閉じた曲線を描きます。
外形が大体6cm~10cmくらいになると良いと思います。

2.3次元にコピー・変形

ガムボールを使って、Z軸方向に2~3個コピーし、Loft用の曲線を用意します。
回転・スケール、制御点操作などを使って少し変形すると膨らんだり、ねじれた形にできます。

3.GrasshopperでLoft

Grasshopperを開きます。
[Curve]コンポーネントを配置し、右クリック>Set Multiple Curvesで曲線をSetします。[Loft]コンポーネントに接続するとサーフェスが作成されます。

4.ランダムに点を配置

作成したサーフェス上に[Populate Geometry]で点を配置します。N端子に点の個数を入力します。

5.Kangarooゴールオブジェクト設定

[OnMesh]で、点をサーフェス上に拘束する条件を定義します。

[SphereCollide]で点同士の衝突を定義します(Rが衝突半径)。

6.Kangarooソルバーに接続

ゴールオブジェクトを[Solver]に接続します。
衝突半径を調整すると点が押し合い、間隔が均等になります。
あまり半径を大きくしすぎるとサーフェスから点が飛び出すので加減が大事です。

ここでは割愛しますが、サーフェスから飛び出した点やエッジに掛かった点は除外するという後処理を入れる工夫も良いでしょう。

▼動画

[Grab]をゴールオブジェクトに接続すると画面上でマウスドラッグで点を動かせるようになります。
気に入らない配置などがあれば部分的に手動調整できます。

▼動画

7.点の出力

[Solver]のV端子から点が出力されます。

あとは、球を作成してトリムすれば穴が作れたり、球をプール演算すれば凹凸形状にもできるので、これだけでもいろいろと応用できます。

▼Rhinoで加工した例

(左)衝突半径より小さめの球で[BooleanDifference]
(中)衝突半径より大きめの球で[BooleanUnion]
(右)衝突半径より小さめの球で[Trim]し穴を作成

さいごに

単純なサーフェスであれば、点やオブジェクトの配置はアイソカーブに沿って配置したり、幾何学的に解くこともできますが、この衝突を活用した方法だと、トリムサーフェス・ポリサーフェス・メッシュ問わず使えて、UVの歪みにも影響されないので適用範囲は広いです。

是非お試しください!