2023年9月2日土曜日

【Grasshopper_86】某動画投稿サイトに投稿されていた、sub-D形状の変形方法を再現してみました


今月は、2年ほど前にYoutubeに投稿されていた、subD形状を変形させる仕組みを簡易再現する方法を紹介します。

元ネタのYoutube動画のリンクを貼っておきます。

Grasshopperのノード自体は公開されていないため、詳細な部分までは再現できていませんが、基本的な考え方は同じかなと思います。

必要なプラグインは、LunchBoxとWeaverbirdです。


Step.1 XZ平面上に六角形を配置する

・XZ平面上に四角形を作り、その中にLunchBoxプラグインに入っているHexagon Cellsコンポーネントを使って六角形を敷き詰めます。

・縦方向の個数(今回のケースではV方向の数)は奇数個のほうが形が綺麗になります。

・tパラメーターは-1から0.5ぐらいの範囲で動かします。

Step.2 純粋な六角形を取り出す

・外周部の半欠け六角形を省くため、Explodeコンポーネントにつないで辺を分解し、6本かどうかを判定し、Cull Patternコンポーネントにつないで純粋な六角形のみ選別します。

Step.3 六角形を縦列ごとに階層分けする

・後の工程のことを考えて、一つの階層になっている六角形を、縦列ごとに階層分けをします。

・手順
①Areaコンポーネントにつないですべての六角形の中心点を求める
②求めた中心点の、X座標値を取り出し、その数値で六角形の順番をソートする
③X座標値は整数値のみ使いたいので小数点の左と右で分離して左側(整数部分)のみ取り出す
④Create SetsとEqualsコンポーネントを組み合わせて階層分けするためのTrueとFalseに変換する
⑤Cull Patternコンポーネントにつないで階層分けを実行する

Step.4 Z方向で順番を揃える

・Step.3の状態だと、Z方向に順番が揃っていないため、先ほどと同じくAreaとDeconstructコンポーネントを使って六角形の中心点のZ座標値を取り出し、ソートします。

・List Itemコンポーネントにつないで、一番下の六角形が選択されたらOKです。

・ひとまず、六角形の前半部分は完了です。Hex_Crv_Aと名前をつけて、次に進みます。

・ここまでの状態で、Hexagon Cellsコンポーネントのtパラメーターをマイナス側にすると、上の画像のように隣り合う六角形が干渉してしまうので、これを解消する仕組みを次の手順から作っていきます。

Step.5 左右の三角部分のカット

・まずは左右の小さな三角形部分を除去するため、六角形を辺に分解し、三角部分に相当する4本をそれぞれ交点を求めてカットし、再び結合します。上の図の緑色の状態です。

Step.6 上下の相関部分のカット

・次に、上の画像のように上下隣同志の相関部分をカットして、くの字の左右ペアを作っていきます。

・作業のしやすさを考えて、六角形の一番上と一番下の行はCull indexコンポーネントの0と-1指定で外しています。

・隣同志の六角形はShift Listコンポーネントの1と-1で指定し、それぞれ相関をとってカットすると上の画像のようになります。(Shift ListコンポーネントのwはいずれもFalseです)

Step.7 六角形にまとめる

・最後に上の端点間、下の端点間をLineでつなぎ、結合して六角形の閉曲線にします。この六角形をHex_Crv_Bという名前にします。

・階層を合わせるため、最後にShift Pathコンポーネントにつないでいます。

・黄色のパネルに表示されている階層になればOKです。

Step.8 切り替えスイッチを作る

・Step.4で作成したHex_Crv_Aの方も、数と階層を合わせるため、Cull Indexコンポーネントの0と-1指定で一番上と一番下の六角形を削除し、Shift PathコンポーネントにつないでHex_Crv_Bと条件をそろえてからStream Filterコンポーネントにつなぎます。

・Stream Filterコンポーネントは、簡単にいうと切り替えスイッチの役割を果たします。0か1(もしくはTrueかFalse)をG入力につなぐと、それに応じて0と1の入力データが切り替わります。電車の線路のポイント切り替えみたいな感じですね。

・今回は、Hexagon Cellsコンポーネントのt入力値がプラスかマイナスでHex_Crv_AとHex_Crv_Bを切り替えるので、t入力をLarger Thanコンポーネントにつないで0以上か否かを判定し、TrueもしくはFalseの値で切り替えるようにしました。

Step.9 奥側の六角形を作る

・六角形の内側部分をScale NUコンポーネントにつないで作り、Y方向に移動させます。

Step.10 subD化して完成させる

・一番最後の工程です。ここが一番の肝になります。

・まずはStep.8で作成した、切り替え後の六角形とStep.9で作成した、スケールダウンさせた六角形の間にLoftコンポーネントにつないでNurbsサーフェス化します。六角形はポリカーブになっているので、Explodeコンポーネントにつないで辺に分解してからLoftにつなぐときれいに折れた状態のサーフェスになります。Loft Optionはストレートを選んでいますが、他の設定でもほぼ同じです。

・その後ろで、Simple Meshコンポーネントにつないでメッシュに変換します。なるべく単純なメッシュにすると形がきれいになりますので、Simple Mesh以外は使わないほうがいいです。

・その後ろに、バラバラ状態のメッシュを結合してウェルド作業をさせるため、WeaverBirdプラグインに含まれているJoin Meshes and Weldコンポーネントにつなぎます。W入力はTrueに設定します。

・その後ろで、SubD from MeshコンポーネントにつないでsubDサーフェスに変換します。I入力はTrueです。これにより、SubD特有のヌメヌメした形になります。

・最後に、Mesh from SubDにつないでメッシュに戻します。D入力はメッシュの密度に関するパラメーターで、お好みで設定します。最後のメッシュ化は特に必須ではありませんが、トップ画像のように網目の構成カーブを表示させたいときはメッシュ化が必要ですね。

以上で完成です。アニメーションまでは作っていないので画像のみとなりますが、スライダーで設定したパラメータをいじると形がぐりぐり変化します。

・横10、縦15、t値0.01、Scale-X0.73、Scale-Y0.41、Z移動量22

・横10、縦15、t値0.472、Scale-X0.73、Scale-Y0.24、Z移動量22

・横10、縦15、t値0.039、Scale-X0.24、Scale-Y0.24、Z移動量22

・横10、縦15、t値-1.000、Scale-X0.35、Scale-Y0.24、Z移動量40

0 件のコメント:

コメントを投稿

【Grasshopper_98】SporphとSurface Morphingの特徴、違いなどについて

今年もまたGWに突入しましたね。コロナ明けに円安、インバウンド特需のおかげで東京から郊外に出かけると例年以上に混雑に巻き込まれそうなので、昨年と同様、連休中は家に籠ってブログを更新します。今回のテーマは、Surface MorphingとSporphの違いについてまとめてみました。