GH Basics GH Tutorial Grasshopper Objects

【Grasshopper Tutorial】Moving Face

今回は以下のGif画像の様に球体を生成するFaceを操作していきます。さほど難しくはありませんので是非挑戦してみてください。ちなみにこちらは、BlenderのGeometry Nodesでも似たようなものを作成しています。ご興味あればのぞいていってください。こちらのチュートリアルは動画化しております、動画の方がよい方は以下のリンクからどうぞ!

概要

上画像がプログラムの全体像となっております。各ブロックごとに説明していこうと思います。

ベースとなる球の作成

  1. Sphereコンポーネントで球を生成します。
  2. TriRemeshコンポーネントでなるべく均等なサイズの三角形メッシュで球を分割します。Lengthには0.15を接続します。
  3. Face Boundaryコンポーネントでメッシュのエッジを取得します。
  4. Boundary Surfaceコンポーネントでエッジ内をサーフェイス化します。

各三角形を移動させる

  1. 生成した三角形サーフェイスを移動させていきます。Moveコンポーネントを接続します。
  2. Areaコンポーネントで各三角形の中心点を取得し、Plane Originコンポーネントに接続します。これで法線方向のベクトルが取得できます。
  3. Amplitudeコンポーネントで取得した法線ベクトルの量を再設定します。再設定する値は次の項で説明します。とりあえずNumber Sliderコンポーネントで適当な正の値を接続すると、三角形が球の中心から離れていく方向に動くかと思います。

移動ベクトルを作成①

  1. List Lengthコンポーネントでサーフェイスの数を取得します。
  2. Multiplicationコンポーネントで360×Nの値を取得します。今回はとりあえず360×4にしております。
  3. Repeat Dataコンポーネントで360×Nの値をサーフェイスの数だけ値を生成します。
  4. Radiansコンポーネントで取得した値をラジアンに変換します。
  5. SineコンポーネントでSine波を取得します。これで4波長分の-1~1の値が取得できました。

移動ベクトルを作成②

  1. 先ほど取得したSine波をRemap Numbersコンポーネントで値をリマップしていきます。Sine波は-1~1の値なので、sourseには‐1~1の値を接続しています。Targetには移動距離の範囲を入力します。今回は0~1を入力しています。
  2. リマップした値をMoveコンポーネントに接続されているAmplitudeコンポーネントに接続します。球体が中心から離れる方向に移動したかと思います。

各Sine波の位相をずらす①

  1. 現状では、各三角形サーフェイスに対して、同じSine波で移動させているので、全てのサーフェイスが中心から同じ距離だけ移動していたかと思います。しかし、各々のSine波の位相をずらすことによって、変形の仕方が変わってきます。
  2. Plane OriginコンポーネントからDeconstruct Vectorコンポーネントで法線方向のベクトルをx,y,z成分に分解します。
  3. Entwineコンポーネントで分割した成分をそれぞれブランチに格納します。
  4. Flip Matrixコンポーネントで行列を反転させることで、各x.y.z成分が1つのブランチに格納されます。
  5. Averageコンポーネントで各ブランチに格納されている値の平均値を取得します。出力端子はFlattenしておきます。
  6. Multiplicationコンポーネントで取得した平均値に適当に300を掛けます。
  7. 上の値を角度とし、AddコンポーネントRepeat Dataコンポーネントの出力端子と足してあげます。これで、それぞれのSine波が法線ベクトルからくる値によって位相がずれました。
  8. Repeat Dataコンポーネントの手前にあるMultiplicationコンポーネントに接続されているNumber Sliderコンポーネントを変化させることで、最初のGif画像右側の変形が完成です。

各Sine波の位相をずらす②

  1. 今度はIndex番号を使ってみましょう。Item Indexコンポーネントで各サーフェイスのIndex番号を取得します。
  2. 先ほどの法線ベクトルから求められる値に掛けてみます。
  3. これで、最初のGif画像左側の変形が完成です。

各サーフェイスを位置によってスケールする①

  1. 三角形サーフェイスをスケールしていきます。最内で0.6倍、最外で2.0倍になるようにしていきます。
  2. Sineコンポーネントから取得できる‐1~1の値を、Remap Numbersコンポーネントを使用して0.6~2.0の値にリマップします。これで倍率が取得できました。
  1. Moveコンポーネントの出力端子から得られる、移動済みの三角形サーフェイスに、Areaコンポーネントを接続し中心点を取得します。
  2. Scaleコンポーネントで各三角形サーフェイスを取得した中心点を基点にスケールします。倍率は先ほど作成した0.6~2.0の値を使います。
  3. 球の中心から離れれば離れるほど三角形が拡大されていくようになったかと思います。

厚みを持たせて色付け

  1. 三角形サーフェイスに厚みを持たせていきます。Vectorコンポーネントで以前取得した法線ベクトルを持ってきます。
  2. Amplitudeコンポーネントで法線ベクトルの量を再設定ます。今回は0.05にしました。
  3. Extrudeコンポーネントでスケールしたサーフェイスを再設定した法線方向のベクトルで押し出します。0.05の厚みがついたかと思います。
  4. 最後に、Custom PreviewコンポーネントColour Swatchコンポーネントで色付けして完成です。
  5. アニメーションを作成したい人は、Repeat Dataコンポーネントの手前にある角度を変えていたNumber SliderコンポーネントでAnimationを掛ければ、シーンごとの画像が生成されますので、photoshopや動画編集ソフトで結合すればアニメーションが作成できます。

完成

いかがだったでしょうか。難しかった方は、Panelコンポーネントでデータの中身を確認しながら進めてみてください。

-GH Basics, GH Tutorial, Grasshopper, Objects
-, ,