Grasshopper ジュエリー向けプラグイン Peacock

前回の記事、『Grasshopper 鎚目のオブジェクトを作る』ではループ処理をする Grasshopper のプラグイン『Anemone』を使いました。

今回は幾つかあるジュエリー用のプラグインの中から『Peacock』を取り上げてみたいと思います。

ジュエリー向けプラグイン Peacock

前回と同様、プラグインを使用するには food4rhino.com にて会員登録する必要があります。Peacock は下記リンクよりダウンロード出来ます。

https://www.food4rhino.com/app/peacock

プラグインPeacock

Rhinoceros6 に対応した最新版は Peacock – Teen 2020-Feb-15 となります。

Peacock は Rhinoceros 及び Grasshopper のジュエリー向けプラグインとしては珍しく無料で利用できて、その上、実用的な機能も揃っています。開発者の Daniel Gonzalez Abalde には感謝です。

今回はPeacockの中から、ジェムやカッター・爪などを自動配置する、Gems のコンポーネントグループを中心に扱っていきます。

Gems コンポーネントグループ

Gems のコンポーネントグループは以下のコンポーネントで構成されています。

Gemsのコンポーネントグループ

大きく分けると以下のような役割となります。

  • 単体のジェムを作るコンポーネント
  • 複数のジェムを配置するコンポーネント
  • 石座・爪を配置するコンポーネント
  • カッターを配置するコンポーネント
Gemsのパネル

Grasshopper のツールパネルでもコンポーネントの役割ごとにセパレーターで区切りがされています。

Peacock を使ってエタニティリングを作る

Rhinoceros と Grasshopper 間を行き来しながらでもモデリングできますが、あえて Grasshopper 内で完結できるようにエタニティリングを作るコンポーネントを組んでみました。以下、コンポーネントの全体図です。

エタニティリングを作るコンポーネント

断面曲線の設定

リングの断面となる曲線を作ります。Peacock には Profiles というコンポーネントグループがあり、パラメトリックデザインできる断面曲線が数パターン用意されています。Rhinoceros で曲線を描く方法もありますが、せっかくなので Grasshopper で断面曲線を作成してみます。

今回は Profiles のコンポーネントグループの中からProfile Trackコンポーネントを使いました。

断面曲線の設定をするコンポーネント

全体の幅・高さ、一段上がった部分の幅・高さ・角の丸みをパラメーター編集できます。

断面曲線の設定をする様子

このまま断面曲線として利用しても構いませんが、リングの内側を丸くしておきたいので、新たにコンポーネントを組んでいきます。

リング内側に丸みをつける

Profile Trackコンポーネントで出力された曲線をExplodeコンポーネントで分解します。

リング内側に関わる線をShift ListReverse ListSplit Listコンポーネントを使って選り分けて、Joinコンポーネントで結合します。

Filletコンポーネントで角を丸くします。

リング内側に丸みをつけるコンポーネント

シームの位置を調整

断面曲線のシームの位置を調整します。リングのモデリングをする場合はシームの位置をリングの裏側にすることが多いので今回も取り入れています。必須ではありません。

Filletコンポーネントで角を丸くした曲線を二分割したいので、Divide Curveコンポーネントで入力N端子に2を入力して二分割するためのtパラメータ値を得ます。そのtパラメータ値を使ってShatterコンポーネントで曲線を分割します。

Shatterコンポーネントで分割した2つの曲線がリストの最初と最後になるように、Reverse ListShift Listコンポーネントで調整し、Joinコンポーネントで一つの曲線に結合します。

シーム調整にはSeamコンポーネントがあるのでそちらでも構いません。

シームの位置を調整するコンポーネント

断面曲線からリングを作成

Peacock のRing Profileコンポーネントを使って断面曲線からリングを作成します。

入力Reg端子はリングサイズを地域別で設定するためのもので、1 =ヨーロッパサイズ、2 =英国サイズ、3 =アメリカサイズ、4 =日本のサイズというように数字を入力します。

入力Size端子はリングサイズ、入力Wid端子はトップ・ボトムの幅、入力Thk端子はトップ・ボトムの厚みをそれぞれ数字で入力します。

断面曲線からリングを作るコンポーネント

パラメーター編集で形状が変わっていることが確認できます。

断面曲線からリングを作る様子

ジェムを配置するための2曲線を作る

ジェムを配置するためのGems by 2 curvesコンポーネントは、ガイドになる2つの曲線が必要となります。そのためRing Profileコンポーネントで作ったリングからジェムを配置するために2つの曲線を抽出します。

まず、リングをDeconstruct Brepコンポーネントで構成要素に分解して、出力F端子から個別になったサーフェスを出力します。

List Itemコンポーネントを使ってジェムを配置するサーフェスを取り出し、Brep Edgesコンポーネントで必要なエッジ曲線を抽出します。(Deconstruct Brepコンポーネントの出力E端子からエッジ曲線を取り出し、List Itemコンポーネントで必要なエッジ曲線を抽出しても同じです。)

Dispatchコンポーネントで2つの出力に分けてGems by 2 curvesコンポーネントに接続します。(Dispatchコンポーネントの代わりに、List Itemコンポーネントに Insert Parameter (画面拡大して現れる+マークをクリック)で出力端子を追加して2つに分けても同じです。)

ジェムを配置するための2曲線を作るコンポーネント

2曲線からジェムを配置

Gems by 2 curvesコンポーネントを使ってジェムを配置します。

入力CrvACrvB端子には先に作った2曲線を接続します。

入力Shape端子はジェムの形状を選択します。0 = Brilliant、1 = Baguette、2 = Coffin、3 = Cushion、4 = Emerald、5 = Flanders、6 = Octagonal、7 = Heart、8 = Pear、9 = Oval、10 = Marquise、11 = Hexagonal、12 = Princess、13 = Radiant、14 = Triangle、15 = Trillionとなっています。これだけ多くの種類のジェムを利用するだけでもPeacockを使う価値はあると思います。

入力Sep端子にはジェム同士の間隔を、t0t1端子にはジェムを配置する開始・終了位置を0~0.5の範囲で、Ang端子にはジェムを回転させる場合はラジアン角度(0°~360°)で、Flip端子はジェムの上下が反転するようなら True/False で調整します。

2曲線からジェムを配置するコンポーネント

今回はジェムの形状はラウンドのまま変更しません。ジェムの間隔と開始終了位置を編集した様子です。

2曲線からジェムを配置する様子

Gems by 2 curvesコンポーネントでは出力G端子からジェムは Mesh として、出力C端子からジェムのガードル輪郭線は Curve として、出力P端子からは各ジェムの作業平面はPlaneとして出力されます。

ジェム用カッターを配置

Cutterコンポーネントでジェム用カッターを配置します。

入力Gem端子にはジェム、入力Girdle端子にはガードル輪郭線をGems by 2 curvesコンポーネント出力端子から接続します。

入力TopDBotD端子はジェム用カッターのトップ・ボトム部分の径を調整します。ジェムの径に対して0~1.0の倍率で入力します。入力TopHBotH端子はトップ・ボトム部分の長さです。下図のように入力端子で変更するものは限られるかと思います。

カッターを配置するコンポーネント

爪を配置

Prongs along gems railコンポーネントで爪を配置します。

入力Girdles端子にはガードル輪郭線を、入力Planes端子には作業平面をGems by 2 curvesコンポーネント出力端子から接続します。

入力Width端子は爪の太さ、入力Height端子は爪の長さを入力します。入力Ratio端子は爪の先端の丸みを~1.0の数値で入力します。ちなみに1.0は丸み無しの円柱形になり、数値が小さくなるにつれて尖り具合が強くなるので、0.75~0.95くらいが爪として適当かと思います。入力Depth端子はジェムへの爪の掛かり具合で、初期値0の状態でジェムに爪が掛かっていないようなら少しずつ大きくしていきます。入力Down端子は爪の配置する深さです。配置したジェムのテーブル面くらいに合わせるのが良いかと思います。

入力Ends端子は配置ジェムの両端に爪を配置するかどうか、入力Close端子はフルエタニティリングのように一周つながっているデザインかどうかを True/False で調整します。今回は入力Ends端子を False、入力Close端子を True に設定します。

爪を配置するコンポーネント

リングに溝を付ける

Cutters In Line 0コンポーネントで溝用カッターを配置します。

入力Gems端子にはジェムを、入力Planes端子には作業平面をGems by 2 curvesコンポーネント出力端子から接続します。

入力WidthThk端子に溝の幅・深さを入力します。入力Close端子は溝を一周つなげるかどうかを True/False で設定します。

リングと溝用カッターをSolid Differenceコンポーネントでブール演算します。下図は少し余計な接続をしてしまっています。Ring Profileコンポーネントの出力R端子と溝用カッターを出力するC0端子とでブール演算すれば良いです。

リングに溝を付けるコンポーネント

出力オブジェクト

リング・ジェム・爪・ジェム用カッターが完成しました。

コンポーネントから出力されたエタニティリング

Rhinoceros に Bake してブール演算で仕上げる

ジェムはメッシュオブジェクトですが、それ以外はサーフェス・ポリサーフェスなのでブール演算で一つのオブジェクトにまとめていきます。

Grasshopper でも出来ますが、Rhinoceros 同様にブール演算に失敗する場合があるので、ここでは Rhinoceros で個別に調整しながらBooleanUnionBooleanDifferenceコマンドで一つにまとめていきます。

エタニティリングの完成形です。

完成したエタニティリング

Rhinoceros のジュエリー向けプラグインの中には同じようなパラメトリックデザイン機能を備えているものもあります。今回、取り上げた Peacock の場合はコンポーネントを自分で構築する必要はありますが、無料で使える点は素晴らしいと思います。

今回は取り上げませんでしたが、Peacock には Workbench と名前のついたコンポーネントグループがありますが、こちらは Grasshopper の標準コンポーネントを、さらに使い勝手良く改変させたものが多く、ジュエリー分野以外でも活用できそうなコンポーネントグループとなっています。

Topic

Rhinoceros と Grasshopper のブール演算の違い

Rhinoceros のバージョンアップのたびにブール演算の精度は向上していると思っています。しかし、完璧なものではありません。今回も Rhinoceros・Grasshopper 両方の場合でもリングからジェム用カッターを差し引くブール演算はところどころで失敗します。

Rhinocerosでのブール演算結果
Rhinoceros のブール演算
Grasshopperでのブール演算結果
Grasshopper のブール演算

今回の場合は Rhinoceros でブール演算した結果の方が良いように思えます。しかし、差し引くオブジェクトが複数の場合、Rhinocerosのブール演算はどれか一つでも演算に失敗するとコマンド全部がキャンセルされます。

Grasshopper の場合はブール演算に失敗したものがあっても キャンセル されることなく、ブール演算出来たものは反映されます。Rhinoceros だと、どのオブジェクトに問題があるのかを割り出す作業に時間を取られますので、先に Grasshopper でブール演算させてから、Rhinoceros に Bake するやり方もありかと思います。

Rhinoceros でブール演算に失敗した時の対処法としては下記のようなやり方があります。

  • IntersectIntersectTwoSetsコマンド(ヒストリ有効)でブール演算するオブジェクト同士の交差線を作成
  • 交差線が途切れていたり開いた曲線になっていないかをチェック
  • 交差線が閉じた曲線なら、交差線を使ってSplitTrimで個々に処理していき、最後にJoinでひとつにする
  • 交差線に問題がある場合はオブジェクトをMoveScaleRotateなどで変更を加えて、ヒストリで更新された交差線をチェック
  • 交差線が閉じた曲線に更新されていれば再びブール演算、もしくはSplitTrimで処理してJoinでひとつにする

ブール演算はとても手間がかかる場合があります。それを回避するにはブール演算するオブジェクトをできるだけシンプルな構造にするのも有効です。可能ならポリサーフスではなくシングルサーフェスで作る、制御点は多くならないようにするなど、オブジェクトの構造を見直すことでブール演算がすんなり上手くいくことは多いです。