今回は Grasshopper を使用して球体を生成する Face を操作していきます。さほど難しくはありませんので是非挑戦してみてください。Blender の Geometry Nodes でも似たようなものを作成しています。ご興味あればのぞいていってください。こちらのチュートリアルは動画化しております、動画の方がよい方,また実際の動きを確認したい方は以下のリンクからどうぞ!
概要
上画像がプログラムの全体像となっております。各ブロックごとに説明していこうと思います。
ベースとなる球の作成
- Sphere コンポーネントで球を生成します。
- TriRemesh コンポーネントでなるべく均等なサイズの三角形メッシュで球を分割します。Length には 0.15 を接続します。
- Face Boundary コンポーネントでメッシュのエッジを取得します。
- Boundary Surface コンポーネントでエッジ内をサーフェイス化します。
各三角形を移動させる
- 生成した三角形サーフェイスを移動させていきます。Move コンポーネントを接続します。
- Area コンポーネントで各三角形の中心点を取得し、Plane Origin コンポーネントに接続します。これで法線方向のベクトルが取得できます。
- Amplitude コンポーネントで取得した法線ベクトルの量を再設定します。再設定する値は次の項で説明します。とりあえず Number Slider コンポーネントで適当な正の値を接続すると、三角形が球の中心から離れていく方向に動くかと思います。
移動ベクトルを作成 ①
- List Length コンポーネントでサーフェイスの数を取得します。
- Multiplication コンポーネントで 360×N の値を取得します。今回はとりあえず 360×4 にしております。
- Repeat Data コンポーネントで 360×N の値をサーフェイスの数だけ値を生成します。
- Radians コンポーネントで取得した値をラジアンに変換します。
- Sine コンポーネントで Sine 波を取得します。これで 4 波長分の-1 ~ 1 の値が取得できました。
移動ベクトルを作成 ②
- 先ほど取得した Sine 波を Remap Numbers コンポーネントで値をリマップしていきます。Sine 波は-1 ~ 1 の値なので、sourse には‐1 ~ 1 の値を接続しています。Target には移動距離の範囲を入力します。今回は 0 ~ 1 を入力しています。
- リマップした値を Move コンポーネントに接続されている Amplitude コンポーネントに接続します。球体が中心から離れる方向に移動したかと思います。
各 Sine 波の位相をずらす ①
- 現状では、各三角形サーフェイスに対して、同じ Sine 波で移動させているので、全てのサーフェイスが中心から同じ距離だけ移動していたかと思います。しかし、各々の Sine 波の位相をずらすことによって、変形の仕方が変わってきます。
- Plane Origin コンポーネントから Deconstruct Vector コンポーネントで法線方向のベクトルを x,y,z 成分に分解します。
- Entwine コンポーネントで分割した成分をそれぞれブランチに格納します。
- Flip Matrix コンポーネントで行列を反転させることで、各 x.y.z 成分が 1 つのブランチに格納されます。
- Average コンポーネントで各ブランチに格納されている値の平均値を取得します。出力端子は Flatten しておきます。
- Multiplication コンポーネントで取得した平均値に適当に 300 を掛けます。
- 上の値を角度とし、Add コンポーネントで Repeat Data コンポーネントの出力端子と足してあげます。これで、それぞれの Sine 波が法線ベクトルからくる値によって位相がずれました。
- Repeat Data コンポーネントの手前にある Multiplication コンポーネントに接続されている Number Slider コンポーネントを変化させることで、最初の Gif 画像右側の変形が完成です。
各 Sine 波の位相をずらす ②
- 今度は Index 番号を使ってみましょう。Item Index コンポーネントで各サーフェイスの Index 番号を取得します。
- 先ほどの法線ベクトルから求められる値に掛けてみます。
- これで、最初の Gif 画像左側の変形が完成です。
各サーフェイスを位置によってスケールする ①
- 三角形サーフェイスをスケールしていきます。最内で 0.6 倍、最外で 2.0 倍になるようにしていきます。
- Sine コンポーネントから取得できる‐1 ~ 1 の値を、Remap Numbers コンポーネントを使用して 0.6 ~ 2.0 の値にリマップします。これで倍率が取得できました。
- Move コンポーネントの出力端子から得られる、移動済みの三角形サーフェイスに、Area コンポーネントを接続し中心点を取得します。
- Scale コンポーネントで各三角形サーフェイスを取得した中心点を基点にスケールします。倍率は先ほど作成した 0.6 ~ 2.0 の値を使います。
- 球の中心から離れれば離れるほど三角形が拡大されていくようになったかと思います。
厚みを持たせて色付け
- 三角形サーフェイスに厚みを持たせていきます。Vector コンポーネントで以前取得した法線ベクトルを持ってきます。
- Amplitude コンポーネントで法線ベクトルの量を再設定ます。今回は 0.05 にしました。
- Extrude コンポーネントでスケールしたサーフェイスを再設定した法線方向のベクトルで押し出します。0.05 の厚みがついたかと思います。
- 最後に、Custom Preview コンポーネントと Colour Swatch コンポーネントで色付けして完成です。
- アニメーションを作成したい人は、Repeat Data コンポーネントの手前にある角度を変えていた Number Slider コンポーネントで Animation を掛ければ、シーンごとの画像が生成されますので、photoshop や動画編集ソフトで結合すればアニメーションが作成できます。
完成
いかがだったでしょうか。難しかった方は、Panel コンポーネントでデータの中身を確認しながら進めてみてください。