今回は以下のGif画像の様に、サイコロの目と一致する数字を浮かび上がらせるようなものを作っていこうと思います。特にプラグインなど使用していませんので是非挑戦してみてください。こちらのチュートリアルは動画化しております、動画の方がよい方は以下のリンクからどうぞ!

目次
概要

上画像のがプログラムの全体像です。
各ブロックごとに説明していこうと思います。
サイコロと各数字曲線の作成

- 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文で条件分岐するのもありかと思います。