投稿日:2021-11-13
#Grasshopper
#GH Modeling
#Basic
今回は Grasshopper の基礎、「Random コンポーネント」について書いていこうと思います。球体を分割したサーフェイスをランダムに移動させる例題を使って説明していきます。初級者向けに書いた記事なので、Grasshopper さわりたての方、是非チャレンジしてみてください。動画の方がわかりやすいって方は以下のリンクからどうぞ!
1.球体を作成し、球の表面を指定した数で分割
2.分割した球表面のサーフェイスを動かす方向を求める
3.サーフェイスの動かす距離をランダムに生成する
4.サーフェイスを移動させる
5.各サーフェイスに指定した色をランダムに割り当てる 6.ジオメトリに色付けをする
といった流れになります。
1.「Sphere コンポーネント」を用いて球体を生成します。「NumberSlide コンポーネント」を用いて入力端子 R に球の半径を入力します。今回は半径 100 を指定しました。
2.「DivideDomain2 コンポーネント」を使用してサーフェイスの分割数を指定します。入力端子 U・V にそれぞれ値を入力します。今回は 50×50 で 2500 個のサーフェイスに分割します。
3.「Isotrim コンポーネント」で実際に球の表面を分割します。入力端子 S に「Sphere コンポーネント」の出力端子 S を、入力端子 D に「DivideDomain2 コンポーネント」の出力端子 S を入力します。
上画像のように分割された球体になっていれば OK です。
分割した各サーフェイスを動かすベクトルを求めていきます。今回は球の中心から分割した各サーフェイスの中心を結ぶ方向のベクトルを算出し、球の中心から離れていくように動かしていきます。
1.「Volume コンポーネント」を使用して球の中心点を求めます。入力端子 G に「Sphere コンポーネント」の出力端子 S をつなぎます。
2.「Area コンポーネント」を使用して分割した各サーフェイスの中心点を求めます。入力端子 G に「Isotrim コンポーネント」の出力端子 S をつなぎます。
3.球の中心点と各サーフェイスの中心点を「Vector2Pt コンポーネント」につなぎ、球の中心から各サーフェイスに向かうベクトルを算出します。
1.「Amplitude コンポーネント」を使用して、先ほど求めたベクトルの長さを再設定してあげます。「Amplitude コンポーネント」の入力端子 V に「Vector2Pt コンポーネント」の出力端子 V をつなぎます。入力端子 A に再設定するベクトルの長さを入力しますが、この値をランダムに生成します。
2.「List Length コンポーネント」を使用し分割したサーフェイス数を算出します。入力端子 L に「Isotrim コンポーネント」の出力端子 S をつなぎ、List の長さを取得することで求めることができます。今回は 50×50 = 2500 が取得できました。
3.「Random コンポーネント」を使用しランダムな値を生成します。入力端子 R(Range)には範囲を指定し、その範囲内の値をランダムに出力します。「Construct Domain コンポーネント」を使用して範囲を指定します。今回は「0 ~ 10」の範囲を指定しました。
4.「Random コンポーネント」の入力端子 N には、先ほど指定した範囲のランダムな値をいくつ出力するか指定できます。さきほど「List Length コンポーネント」で算出した 2500 をつなぎます。これで「0 ~ 10」の範囲でランダムな値を 2500 出力するプログラムが組めました。
5.「Random コンポーネント」の入力端子 S (Seed)には、2500 個のランダムなパターンを何通り生成するかを入力できます。今回は適当に 10 パターン生成してもらいます。この数字を変えることで出力されるランダムな値を変更できます。
6.「Random コンポーネント」で出力された値を「Integer コンポーネント」で整数化します。「0~ 10」の範囲で 2500 個のランダムな値を生成できました。
7.「Multiplication コンポーネント」を使用し、「0 ~ 10」の値を定数倍していきます。今回は適当に「7 倍」しました。「0 ~ 70」の範囲で 2500 個のランダムな値取得できました。
8.「Amplitude コンポーネント」の入力端子 A に「Multiplication コンポーネント」の出力端子 R を接続することで、球の中心点から各サーフェイスをつなぐベクトルを「0 ~ 70」の範囲でランダムに再設定できました。
1.「Move コンポーネント」を使用して、各サーフェイスを移動させます。入力端子 G に「Isotrim コンポーネント」の出力端子 S をつなぎます。
2.「Move コンポーネント」の入力端子 T に「Amplitude コンポーネント」の出力端子 V をつなぎます。
「Move コンポーネント」以外を PreviewOff して上画像のようになっていれば OK です!
次にこれらの各サーフェイスに色を付けていきます。
1.「Colour Swatch コンポーネント」を使用し好きな色を何色か用意します。今回は 5 色指定しました。
2.「Merge コンポーネント」を使用して、先ほど生成した 5 色をリスト化します。入力端子にそれぞれの色を接続します。
3.「List Length コンポーネント」を使用して、「Merge コンポーネント」で作成したカラーリストの長さを算出します。今回は 5 色なので「5」が出力されます。
4.「Subtraction コンポーネント」を使用して、「List Length コンポーネント」で取得した List の長さから「1」を引きます。
5.「Random コンポーネント」を使用して、設定した 5 色のリストの index をランダムに出力します。入力端子 R には「Subtraction コンポーネント」の出力結果(上の画像では「4」)を接続することで、「Random コンポーネント」の出力結果を「0 ~ 4」の範囲で取得できるように設定しました。
6.「Random コンポーネント」の入力端子 N には、分割したサーフェイスの数量を入力します。「Isotrim コンポーネント」に接続した「List Length コンポーネント」の出力端子 L を接続します。
7.「Random コンポーネント」の出力端子から「0 ~ 4」の範囲で、ランダムな数値が 2500 個取得できました。「Integer コンポーネント」を接続して、整数化します。
8.「List Item コンポーネント」を使用して、作成した 5 色をランダムに 2500 個格納したリストを作成します。入力端子 L に「Merge コンポーネント」の出力端子 R を接続します。
9.「List Item コンポーネント」の入力端子 i に、「Integer コンポーネント」の出力端子を接続します。これで 5 色をランダムに並べた 2500 個の値が格納されているリストの作成ができました。
1.「Custom Preview コンポーネント」を使用し、色付けしていきます。入力端子 G に「Move コンポーネント」の出力端子 G(移動したサーフェイス)を入力し、入力端子 M には「List Item コンポーネント」の出力端子(先ほど作成した色をランダムに配置したリスト)を接続します。
2.移動前の球体にも色付けしておきます。「Custom Preview コンポーネント」をもう1つ用意し「Isotrim コンポーンネント」の出力端子を、入力端子 G に接続します。入力端子 M には「Colour Swatch コンポーネント」を使用し好きな色を設定します。今回は白を設定しました。
「Custom Preview コンポーネント」以外を PreviewOff にし、上画像の様になっていれば OK です!
今回は「Random コンポーネント」を理解するためのチュートリアルでした。頻繁に使うことはないかもしれませんが、必ずどこかで遭遇するコンポーネントかと思います。是非使いこなせるようになっておきましょう!