2022年8月15日月曜日

【Grasshopper_68】Voronoi図形の大きさを変化させる方法


お手軽に不規則な幾何学模様を作る手段としてヴォロノイ図形というものが認知されていますが、大きさをもう少し変化させたいなと思っても、なかなかやり方が思いつかない時がありました。

そこで、ネットで調べたり、自分なりに作ってみたやり方を4種類ほどまとめてみましたので、何か参考になるところがあればチャレンジしてみてください。



1例目は、ヴォロノイ図形を配置する枠内で、中央から外枠に向かうにつれて大きさを細かくする方法です。

Step.1 指定の枠内にランダムな点を配置する

・まず初めに、XY平面上に横200、縦100の枠を作り、その中にランダムな点を400個配置します。

Step.2 ループ処理の内部を組む

・以降のノードツリーは上の図のように組んでいきます。

・計算を何度も繰り返す、いわゆるループ処理といわれる機能を使っています。ここでは、Anemoneというプラグインを使っています。点線で結ばれている、左右両端にあるノードがそれです。計算スタートがButtonノード、計算回数はナンバースライダーで指定します。

・大まかな計算の流れとしては、Step.1で求めたランダムな点にまずはヴォロノイ形状を作り、次にその中心点と外枠までの最短点との間の距離を求め、その数値に応じて点を移動させます。再びそこにヴォロノイ図形を作り、以下、同じ作業をループさせて行くというものです。

・途中の計算工程は以下のような方式です。
1.ヴォロノイ中心と外枠までの最短距離をその最大値で割ることにより、すべての距離の数値を0~1の間の小数に変換します。「外枠に近い→0に近い、枠中心部に近い→1に近い」となります。

2.つぎに、割った数値を1から引き算します。「外枠に近い→1に近い、枠中心部に近い→0に近い」となります。

3.最短距離を掛け合わせます。「外枠に近い→数値の減少が緩やかに、枠中心部に近い→数値の減少が激しく」となります。枠中央部に近いほど、点をあまり動かさないというイメージです。

4.係数を掛け算する。この数値で強弱を調整します。

Step.3 3Dデータ加工する

・Anemoneループの途中にある、Voronoiコンポーネントから曲線を取り出し、適当に加工したら完成です。

<ヴォロノイ図形を一定幅で厚みをつける場合>

・ヴォロノイ曲線を作ると、場所によっては上のRhino画面のように、極めて距離の短い辺が生成される箇所が出てきます。この曲線をオフセットさせようとすると、形が壊れて正しい曲線が作成されません。よって、Scaleを使うことをおすすめします。

ただし、Scaleを使うとすべてのヴォロノイ図形の幅を同じサイズに統一することが基本的にはできません。そこで、スケールの倍率を以下の図のように計算します。

基本的な考え方は以下の簡単な図を参考にしていただければと思います。

----------------------------------------------------------------------------------------------

2例目は、ヴォロノイ図形を配置する枠内で、特定の部分を中心に大きくする方法です。

Step.1 指定の枠内にランダムな点を配置する

・こちらも同じく、200x100の枠内に、ランダムな点を配置します。特定の点を2個所指定するため、MD SliderとEvaluate Surfコンポーネントを使って点を指定します。

Step.2 点を間引く処理を組む

・残りのつなぎ方は上の図のような感じです。

・Step.1で配置したランダムな点に対し、MD Sliderで指定した2つの点に最も近い点及びその2点間の距離を求めます。

・途中の計算工程は以下のような方式です。
1.距離の大きさ順に、Step.1で求めたランダムな点のリストを並び替えます。つまり、MD Sliderで指定した点に近い方から順番に並びます。

・Sort ListコンポーネントのA出口のreverse設定をONにしてリストを反転します。リスト内では距離が遠い点を先頭に順番に並びます。

・Jitterコンポーネントにつないで、並び替えたリスト内をシャッフルします。これを挟むことで、少し不規則な印象が出ます。

・Sub Listコンポーネントを使って、リスト内の、先頭から指定したインデックス番号までの間を取り出します。指定した点から遠い位置にある点を取り出しますので、結果的に指定した点の近傍の点が無くなる→ヴォロノイ図形の大きさが大きくなる、という仕組みです。

Step.3 3Dデータ加工する

・後はお好みで加工したら完成です。

----------------------------------------------------------------------------------------------

3例目は、ヴォロノイ図形を配置する枠内で、特定の曲線の近傍部分を細かく分割する方法です。1例目と同様、ループ処理を使うためAnemoneプラグインを事前に導入しておきます。

Step.1 指定の枠内にランダムな点を配置する

・これまでと同様、200x100の枠内にランダムな点を配置します。

Step.2 Rhino上で適当な曲線を用意する

・適当な曲線を作成し、Grasshopperに取り込みます。

Step.3 ループ処理の内部を組む

・残りのノードツリーは上の図のような感じになります。

・途中の計算工程は以下のような方式です。
1.Step.1で求めたランダムな点をつかってヴォロノイ形状を作成し、Step.2で作成した曲線を取り込んでTrim Regionsコンポーネントによって分割する。

2.分割したヴォロノイ形状は閉じられていない形になっているので、Connect Curvsコンポーネントを使って空いている箇所を線で結び、完全に閉じたポリカーブにする。

3.Step.2で作成した曲線までの最短距離を求め、その数値に応じて点を移動させる。
※ここでの考え方は1例目とほぼ同じなのでそちらを参照ください。

4.移動した点を使って再度ヴォロノイ形状を作り、以下、ループとなります。

Step.4 3Dデータ加工する

・後はお好みで加工したら完成です。

----------------------------------------------------------------------------------------------

最後は、ある特定の部分だけ細かくする方法です。

Step.1 指定の枠内にランダムな点を配置する

・同じく、200x100の枠内にランダムな点を配置しますが、今回は追加で、適当な個所にサーフェスを用意し、そのサーフェス上にランダムな点を追加で配置します。

Step.2 ヴォロノイ図形を描いてデータ加工する

・Step.1で作成した点を使ってヴォロノイ図形を作成し、適当に加工したら完成です。

0 件のコメント:

コメントを投稿

【Grasshopper_98】SporphとSurface Morphingの特徴、違いなどについて

今年もまたGWに突入しましたね。コロナ明けに円安、インバウンド特需のおかげで東京から郊外に出かけると例年以上に混雑に巻き込まれそうなので、昨年と同様、連休中は家に籠ってブログを更新します。今回のテーマは、Surface MorphingとSporphの違いについてまとめてみました。