今回はGrasshopperの基礎、「Randomコンポーネント」について書いていこうと思います。球体を分割したサーフェイスをランダムに移動させる例題を使って説明していきます。初級者向けに書いた記事なので、Grasshopperさわりたての方、是非チャレンジしてみてください。動画の方がわかりやすいって方は以下のリンクからどうぞ!
目次
概要

- 球体を作成し、球の表面を指定した数で分割
- 分割した球表面のサーフェイスを動かす方向を求める
- サーフェイスの動かす距離をランダムに生成する
- サーフェイスを移動させる
- 各サーフェイスに指定した色をランダムに割り当てる
- ジオメトリに色付けをする
といった流れになります。
球体を作成し、球の表面を指定した数で分割

- 「Sphereコンポーネント」を用いて球体を生成します。「NumberSlideコンポーネント」を用いて入力端子Rに球の半径を入力します。今回は半径100を指定しました。
- 「DivideDomain2コンポーネント」を使用してサーフェイスの分割数を指定します。入力端子U・Vにそれぞれ値を入力します。今回は50×50で2500個のサーフェイスに分割します。
- 「Isotrimコンポーネント」で実際に球の表面を分割します。入力端子Sに「Sphereコンポーネント」の出力端子Sを、入力端子Dに「DivideDomain2コンポーネント」の出力端子Sを入力します。

上画像のように分割された球体になっていればOKです。
分割した球表面のサーフェイスを動かす方向を求める

分割した各サーフェイスを動かすベクトルを求めていきます。今回は球の中心から分割した各サーフェイスの中心を結ぶ方向のベクトルを算出し、球の中心から離れていくように動かしていきます。
- 「Volumeコンポーネント」を使用して球の中心点を求めます。入力端子Gに「Sphereコンポーネント」の出力端子Sをつなぎます。
- 「Areaコンポーネント」を使用して分割した各サーフェイスの中心点を求めます。入力端子Gに「Isotrimコンポーネント」の出力端子Sをつなぎます。
- 球の中心点と各サーフェイスの中心点を「Vector2Ptコンポーネント」につなぎ、球の中心から各サーフェイスに向かうベクトルを算出します。
サーフェイスの動かす距離をランダムに生成する

- 「Amplitudeコンポーネント」を使用して、先ほど求めたベクトルの長さを再設定してあげます。「Amplitudeコンポーネント」の入力端子Vに「Vector2Ptコンポーネント」の出力端子Vをつなぎます。入力端子Aに再設定するベクトルの長さを入力しますが、この値をランダムに生成します。
- 「List Lengthコンポーネント」を使用し分割したサーフェイス数を算出します。入力端子Lに「Isotrimコンポーネント」の出力端子Sをつなぎ、Listの長さを取得することで求めることができます。今回は50×50=2500が取得できました。
- 「Randomコンポーネント」を使用しランダムな値を生成します。入力端子R(Range)には範囲を指定し、その範囲内の値をランダムに出力します。「Construct Domainコンポーネント」を使用して範囲を指定します。今回は「0~10」の範囲を指定しました。
- 「Randomコンポーネント」の入力端子Nには、先ほど指定した範囲のランダムな値をいくつ出力するか指定できます。さきほど「List Lengthコンポーネント」で算出した2500をつなぎます。これで「0~10」の範囲でランダムな値を2500出力するプログラムが組めました。
- 「Randomコンポーネント」の入力端子S (Seed)には、2500個のランダムなパターンを何通り生成するかを入力できます。今回は適当に10パターン生成してもらいます。この数字を変えることで出力されるランダムな値を変更できます。
- 「Randomコンポーネント」で出力された値を「Integerコンポーネント」で整数化します。「0~10」の範囲で2500個のランダムな値を生成できました。
- 「Multiplicationコンポーネント」を使用し、「0~10」の値を定数倍していきます。今回は適当に「7倍」しました。「0~70」の範囲で2500個のランダムな値取得できました。
- 「Amplitudeコンポーネント」の入力端子Aに「Multiplicationコンポーネント」の出力端子Rを接続することで、球の中心点から各サーフェイスをつなぐベクトルを「0~70」の範囲でランダムに再設定できました。
サーフェイスを移動させる

- 「Moveコンポーネント」を使用して、各サーフェイスを移動させます。入力端子Gに「Isotrimコンポーネント」の出力端子Sをつなぎます。
- 「Moveコンポーネント」の入力端子Tに「Amplitudeコンポーネント」の出力端子Vをつなぎます。

「Moveコンポーネント」以外をPreviewOffして上画像のようになっていればOKです!
次にこれらの各サーフェイスに色を付けていきます。
各サーフェイスに指定した色をランダムに割り当てる

- 「Colour Swatchコンポーネント」を使用し好きな色を何色か用意します。今回は5色指定しました。
- 「Mergeコンポーネント」を使用して、先ほど生成した5色をリスト化します。入力端子にそれぞれの色を接続します。
- 「List Lengthコンポーネント」を使用して、「Mergeコンポーネント」で作成したカラーリストの長さを算出します。今回は5色なので「5」が出力されます。
- 「Subtractionコンポーネント」を使用して、「List Lengthコンポーネント」で取得したListの長さから「1」を引きます。
- 「Randomコンポーネント」を使用して、設定した5色のリストのindexをランダムに出力します。入力端子Rには「Subtractionコンポーネント」の出力結果(上の画像では「4」)を接続することで、「Randomコンポーネント」の出力結果を「0~4」の範囲で取得できるように設定しました。
- 「Randomコンポーネント」の入力端子Nには、分割したサーフェイスの数量を入力します。「Isotrimコンポーネント」に接続した「List Lengthコンポーネント」の出力端子Lを接続します。
- 「Randomコンポーネント」の出力端子から「0~4」の範囲で、ランダムな数値が2500個取得できました。「Integerコンポーネント」を接続して、整数化します。
- 「List Itemコンポーネント」を使用して、作成した5色をランダムに2500個格納したリストを作成します。入力端子Lに「Mergeコンポーネント」の出力端子Rを接続します。
- 「List Itemコンポーネント」の入力端子iに、「Integerコンポーネント」の出力端子を接続します。これで5色をランダムに並べた2500個の値が格納されているリストの作成ができました。
ジオメトリに色付けをする

- 「Custom Previewコンポーネント」を使用し、色付けしていきます。入力端子Gに「Moveコンポーネント」の出力端子G(移動したサーフェイス)を入力し、入力端子Mには「List Itemコンポーネント」の出力端子(先ほど作成した色をランダムに配置したリスト)を接続します。
- 移動前の球体にも色付けしておきます。「Custom Previewコンポーネント」をもう1つ用意し「Isotrimコンポーンネント」の出力端子を、入力端子Gに接続します。入力端子Mには「Colour Swatchコンポーネント」を使用し好きな色を設定します。今回は白を設定しました。

「Custom Previewコンポーネント」以外をPreviewOffにし、上画像の様になっていればOKです!
今回は「Randomコンポーネント」を理解するためのチュートリアルでした。頻繁に使うことはないかもしれませんが、必ずどこかで遭遇するコンポーネントかと思います。是非使いこなせるようになっておきましょう!