GH Basics GH Tips Grasshopper

【Grasshopper Tips】 How to scale gradually using sine wave

今回はsin波を使用して徐々にスケールする方法について書いていきたいと思います。使いこなすと割と便利かなと思いますので、是非参考にしてください。動画化もしていますので、動画の方がよい方は以下のリンクからどうぞ!

概要

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

ベースとなる球を四角形で分割

  1. Mesh Sphereコンポーネントで半径100、u,v方向の要素数がそれぞれ50の球体メッシュを作成します。
  2. Face Boundariesコンポーネントでメッシュの境界線を取得します。
  3. Boundary Surfaceコンポーネントで取得した境界からサーフェイスを作成します。

グラデーション方向となる直線を作成

  1. 冒頭のGIF画像の様に斜め方向にスケールしていこうと思うので、その基準となる直線を作成します。
  2. Lineコンポーネントで球の上下の頂点を結ぶ直線を作成します。
  3. Rotateコンポーネントで作成した直線を回転させます。今回は、XZ平面を基準とし45度回転させています。

グラデーション方向の基準線と各四角形サーフェイスの内積を算出

  1. Is Planeコンポーネントで各四角形サーフェイスに沿った平面(及び法線ベクトル)を取得します。
  2. Dot Productコンポーネントでグラデーションの基準方向線と各四角形の法線ベクトルとの内積を取得します。

sin波を使用して四角形サーフェイスをスケール

  1. 先ほど取得した内積のリストを角度にリマップします。Remap NumbersコンポーネントBoundsコンポーネントを使用して0~Piの範囲でリマップします。
  2. Sineコンポーネントにリマップした値を接続し、Sin波を取得します。
  3. 取得したSin波は‐1~1の値となっているので、それを更に角度の値にリマップします。今回は0.3倍~0.85倍としました。
  4. Scaleコンポーネントに接続し、スケールします。上画像の様に、グラデーション基準線の端部付近では縮小倍率が0.3倍、中心部付近では0.85倍されており、グラデーション上にスケールされていることがわかります。
  5. 角度にRemapする範囲を、変更することで波の周波数が代わりグラデーションの繰り返し回数を制御することができます。

色付け

  1. Is Planeコンポーネントから法線ベクトルを取得し、Unit Vectorコンポーネントで単位ベクトルに変換します。
  2. Deconstruct Vectorコンポーネントでベクトル成分を分解します。
  3. 分解したX・Y・Z各成分をRemap Numbersコンポーネントで0~1にリマップします。
  4. Colour RGB(f)コンポーネントにそれぞれ接続します。
  5. Custom Previewコンポーネントに接続すれば、上画像の様に虹色になるかと思います。
  6. 若干立体感を持たせるために、内部に半径90の球体を作成して、若干白みがかった透明の色を割り当てて完成です。

完成

以上になります。sin波や内積・外積などは、モデリングする際に結構遭遇するかと思います。是非応用してみてください。

-GH Basics, GH Tips, Grasshopper
-,