今回はベクトル場を使用して、上画像の様なオブジェクトを生成していこうと思います。ついでに、以下の様なアニメーションも作っていきます。是非参考にしてください。こちらのチュートリアルは動画化しております、動画の方がよい方は以下のリンクからどうぞ!

目次
概要

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

- Hexagonalコンポーネントで六角形グリッドを作成します。今回は六角形の半径を10mm、X方向Y方向5×5で25個の六角形を生成しています。
ベクトル場生成

- ベクトル場を作成していきます。List Itemコンポーネントで先ほど作成した六角形グリッドの中から1つベクトル場を発生させる点を選びます。今回はインデックス番号が7番目の要素の中心から発生させます。
- Point Chargeコンポーネントで指定した点に向かって引き寄せる力を発生させます。入力端子Cに-1入力端子Dには0を接続します。入力端子Bは今回使用しません
- Spin Forceコンポーネントで指定した点を中心に回転する力を生成します。入力端子Sには1.00、入力端子Rは6、入力端子Dは0を入力します。入力端子Bは今回は使用しません。
- Merge Forceコンポーネントで作成したベクトル場を結合します。
ベクトル場によって動かす点を作成

- 最初に作成した六角形グリッドをMoveコンポーネントでZ方向に100mm移動します。
- Rotateコンポーネントで移動させた六角形グリッドを回転させます。入力端子A上で右クリックを押しDegreeに設定し、適当に-42度でを接続します。
- Rotateする際の回転の中心点を決めていきます。List Itemコンポーネントを使用し、入力端子LをFlattenします。六角形グリッドから適当にインデックス番号15番目を指定し、Areaコンポーネントで中心点を取得します。XZPlaneコンポーネントで取得した点におけるXZ平面を作成しRotateコンポーネントに接続します。
- Populate Geometoryコンポーネントで回転させたグリッド上に各六角形状に点を2つ発生させます。これらの点をベクトル場で移動させていきます。
点を移動させた際の軌跡を作成

- Field Lineコンポーネントに作成したベクトル場を先ほど発生させた点を入力し、点を移動させた際の軌跡を生成します。入力端子NにはStep数を入力しますが、デフォルトで1000が入力されておりそのままで問題ありません。それっぽい曲線が描けました。
軌跡を中心としたサーフェイス作成

- Perp Framesコンポーネントで軌跡上を10分割する11点を中心とし、軌跡と直行する平面を作成します。
- Circleコンポーネントで作成した点を中心とする円を作成します。
- 入力する半径を工夫します。Rangeコンポーネントで0~1のドメインを10分割するようなリストを作成します。
- Graph Mapperコンポーネントで作成したリストの値を操作します。Graph TypeをParabolaとし上に凸の曲線になるようにします。先ほどの0~1を等分割したリストの値を今回は最初が0に近い値~中心で0.47ぐらい、最後の値を0に近い値となるようにしています。
- Multiplicationコンポーネントで作成したリストに定数を掛けていきます。今回は1.0を掛けているので特にリストの値に変更はありませんが、生成するジオメトリの太さを調整したい場合に値を変更してください。
- Maximumコンポーネントで作成したリストと0.01を比較し大きい方を出力します。半径が負の値になると都合悪いのでこのような処理を加えています。
- Circleコンポーネントの半径に接続します。
- Loftコンポーネントで生成した各円の間にサーフェイスを張ります。
サーフェイスをグループ分け

- 今回生成したサーフェイスは50サーフェイスとなります。これらのサーフェイスにそれぞれ3色の色を割り当てるためにグループ分けしていきます。Jitterコンポーネントに生成したサーフェイスを接続し、入力端子をFlattenしておきます。これでサーフェイスのリストをランダムに並べ替えました。
- Partition Listコンポーネントで3ブランチに分けていきます。等分割してもいいですが、色ごとに割り当てるサーフェイスの数量を変えたいので、19要素で区切ります。これで3ブランチにそれぞれ値が19個, 19個, 12個格納されたました。
- Explode Treeコンポーネントで各ブランチを取得します。
- Surfaceコンポーネントにそれぞれ接続します。
マテリアルの割り当て

- 3グループに分けたサーフェイスにマテリアルを割り当てていきます。Rhinocerosであらかじめ3つのマテリアルを作成しておきます。今回は上画像の赤枠で囲った3つのマテリアル(金属:ホワイト、金属:ゴールド、金属:チタン色)を使用します。
- プラグインHumanのMaterial TableコンポーネントでRhinocerosで作成したマテリアルを取得します。(※Humanはこちらからインストールできます。)
- List Itemコンポーネントで取得したマテリアルから赤枠で囲った3つを取得します。
- Custom Previewコンポーネントにそれぞれ接続し、取得した3つのマテリアルを割り当てて完成です。
おまけ: アニメーション作成①

- 冒頭のGIFのようなアニメーションを作成していきます。Field LineコンポーネントにNumber Sliderを接続し、NumberSliderのアニメーションを昨日で作成してもいいのですが、今回はRhinoceros上でプレビューを見たいので別の方法で作成します。
- Flip CurveコンポーネントでField Lineコンポーネントから取得できる軌跡の始点と終点を逆転させます。
- Evaluate Curveコンポーネントに接続し、入力端子をReparametraize / Graftします。入力端子tに0~1.0までの値を入力すれば、軌跡上の始点を0,終点を1.0とした時に該当する位置を取得できます。
おまけ: アニメーション作成②

- Evaluate Curveコンポーネントに入力するtの値を工夫します。Data Recorderコンポーネントを用意し、Triggerコンポーネントを接続します。Data Recorderコンポーネントには適当にPanelコンポーネントで0を入力しておきます。Triggerコンポーネントは右クリックでIntervalを設定します、今回は10msとしています。
- List LengthコンポーネントをData Recorderコンポーネントに接続します。10msごとに1ずつ増加する値を取得できます。
- SeriseコンポーネントのCountにList Lengthコンポーネントを接続します。Seriseコンポーネントはスタートを0、Stepを0.01とします。
- MinimumコンポーネントでSeriseコンポーネントから取得できる値と1.0を比較し小さい方の値を返すようにします。1.0以上の値は不要なためです。
- Delete Consecutiveコンポーネントで隣り合う値が同じとき値を消去します。これで1.0以上の値は1つ以上取得されなくなりました。
- Evaluate Curveコンポーネントに接続したら上画像の様なプレビューができます。
おまけ: アニメーション作成③

- Evaluate Curveコンポーネントの出力端子にInterpolateコンポーネントを接続すれば、先ほどのアニメーションが曲線化されます。この曲線をPerp Framesコンポーネントに接続します。
- これでCustom Previewコンポーネントを表示してData Recorderコンポーネントを起動させればプレビュー完成です。ただし、PCによってはかなり動作が重くなりますのでご注意ください。
完成



以上になります。アニメーションに関してはあくまでおまけです。Number SliderコンポーネントのAnimate機能を使用した方がいいかもしれませんが、こんなやり方もあるんだと参考程度にしていただければと思います。