今回はサイコロの目と連動して数字を浮かび上がらせていきます。動作の様子は Youtube で確認いただければと思います。特にプラグインなど使用していませんので是非挑戦してみてください。こちらのチュートリアルは動画化しております、動画の方がよい方は以下のリンクからどうぞ!
概要
上画像のがプログラムの全体像です。
各ブロックごとに説明していこうと思います。
サイコロと各数字曲線の作成
- Rhinoceros でサイコロと数字の曲線を準備します。
- サイコロは1辺 10mm の立方体で作成し、中心を(0,0,0)とします。白・黒・赤の部分をそれぞれレイヤ分けしておきます。
- 数字曲線は TextObject を用いて作成します。高さを 20mm としました。位置は Grasshopper で移動させますので、どこでもいいですが向きはそろえておいてください。
サイコロを Grasshopper にセット
- Brep コンポーネントを 3 つ用意し、サイコロの赤・黒・白部分をそれぞれセットします。
- Mesh コンポーネントを接続し、メッシュ化しておきます。しなくてもいいのですが、Brep だと動作が重いので Mesh 化しました。
- Entwine コンポーネントでまとめておきます。
- Flatten Tree コンポーネントで Flatten しておきます。
- Rotate コンポーネントで回転させていきますが、角度と回転平面のリストは次以降の項で作成していきます。
回転平面作成
- 回転平面を作成していきます。今回はサイコロを原点(0,0,0)を中心としているので、Construct Point コンポーネントで原点を作成します。
- Stream Filter コンポーネントを準備し、1 ~ 6 の目を出すためにどの平面で回転させるか条件分岐していきます。「0⇒ 1の目、1⇒2 の目、・・・・・5⇒6 の目」の時としています。
- 初期状態で 1 の目が上を向いています。この状態に対してどのように回転させていくか検討していきます。私の作成したモデルの場合、1 の目は XZ 平面を中心に 360 度、2 の目は XZ 平面を中心に 270 度、3 の目は YZ 平面で 270 度、4 の目は YZ 平面で -270 度、5 の目は XZ 平面で-270 度、6 の目は YZ 平面で 180 度回転させると、それぞれの目が上にきます。0 ~ 5 までの端子にそれぞれの平面をつなぎます。
- 入力端子 G については後ほど作成します。
回転角のリストを作成
- Stream Filter コンポーネントを用いて各目を出すための角度のリストを作成します。前項で説明した角度をそれぞれの端子に接続しています。
- Multiplication コンポーネントを用いて、角度に 0⇒1⇒0 となるような数字を掛けていきます。こうすることで最初 1 の目から特定の目まで回転し、また 1 の目に戻るような動きを作ることができます。かけていく数字は次項で作成します。
角度に掛ける数字と Stream Filter の Gate を作成
- Number Slider コンポーネントを用意し、0.00 ~ 6.00 まで変化できるように設定します。
- 0.00 ~ 1.00 までを 1 の目、1.01 ~ 2.00 までが 2 の目・・・5.01 ~ 6.00 までが 6 の目となるように設定していきます。
- Round コンポーネントに Number Slider コンポーネントを接続します。Ceiling 端子から切り上げられた数字が取得します。
- Remap Numbers コンポーネントを用意し、Number Slider コンポーネントの数字を、「0.00 の時 0,、0.50 の時 1、1.00 の時 0」・「1.00 の時 0、1.50 の時 1、2.00 の時 0」・・・となるように操作していきます。
- Construct Domain コンポーネントを用意し、Ceiling から取得できる値とその値から1を引いた値をドメインとし、Souce に接続します。
- Target には Pi コンポーネントを接続します。こうすることで「0.00 の時 0,、0.50 の時 π/2、1.00 の時 π」・「1.00 の時 0、1.50 の時 π/2、2.00 の時 π」・・・と値がリマップされます。
- リマップされた値に Sine コンポーネントを接続することで、0⇒1⇒0 となるような値を取得できます。これを先ほどの Multiplication コンポーネントに接続し角度と掛けます。
- Ceiling の値から 1 を引いた値が各 Stream Filter コンポーネントの Gate の値になります。例えば Number Slider コンポーネントが 0.10 の時、Ceiling の値は 1 になり、その値から 1 を引くので 0 になります。
- Rotate コンポーネントに角度のリストと平面のリストを接続します。角度のリストは Degree で接続しています。
サイコロに色付け
- 回転させたサイコロを UnflattenTree コンポーネントで最初にまとめた時の Entwine コンポーネントから Tree 構造を継承します。
- Mesh Color コンポーネントに接続します。
- Colour Swatch コンポーネントで赤・黒・白を用意し、Entwine コンポーネントでまとめ、Mesh Color コンポーネントに接続します。色付け完了です。
数字の作成
- Curve コンポーネントに Rhinoceros で作成した各数字をセットします。
- Entwine コンポーネントでまとめます。
- Boundary Surface コンポーネントで各数字にサーフェイスを張ります。
- Explode Tree コンポーネントで各数字のサーフェイスを取得し、Stream Filter コンポーネントに接続します。Gate には他の Stream Filter に接続したものと同じ数字を接続します。これでサイコロの目によって、数字が変化していくようになりました。
数字の移動
- 各数字をサイコロの前に移動させます。Area コンポーネントで各数字サーフェイスの中心点を取得します。
- Vector 2Pt コンポーネントで移動させたい位置の座標と各サーフェイスの中心点を結ぶベクトルを作成します。私の場合は。(27,0,0)に移動させます。
- Move コンポーネントで各サーフェイスを移動させます。
数字上に球を配置
- Populate Geometry コンポーネントで数字のサーフェイス状に点を配置します。今回は 100 点生成しました。
- Mesh Sphere コンポーネントで生成した点を中心に Mesh Sphere を作成します。
- 半径は Random コンポーネントで 0.7 ~ 1.3 の範囲でランダムに生成します。
生成した球を縮小
- Scale コンポーネントで生成した球を縮小していきます。Volume コンポーネントで球の中心点を取得し接続します。
- Scale する倍率に関しては次項で説明していこうと思います。
縮小倍率を作成
- 前回作成した 0⇒1⇒0 を倍率としてかけていきます。前回作成した Round コンポーネント~ Sine コンポーネントまでをコピーして持ってきます。
- サイコロが初期位置の 1 の目の時に球を 0 倍にし、該当する目がに回転するにつれて 1 倍になり、1 の目に戻るにつれて縮小し 0 倍になるようになりました。
数字を色付け
- Partation List コンポーネントで 100 個の球を 4 つのブランチに分けます。適当に 30・30・30・10 個に分けました。
- Colour Swatch コンポーネントでと Entwine コンポーネントで色のリストを作成します。
- Mesh Color コンポーネントに接続し色付け完了です。
- Rhinoceros で数字とサイコロの下にグレーの平面を引き見やすくして完成です。
完成
Number Slider コンポーネントを変化させると、最初の Gif 画像の様にサイコロの目と数字が連動して変化していくかと思います。アニメーションを作成したい方は Number Slider コンポーネントの Animate 機能を使えば作成できます。今回は Stream Filter で条件分岐しましたが、Python や C#が書けるのであれば、if 文で条件分岐するのもありかと思います。