2023年10月7日土曜日

【Grasshopper_88】Voronoi形状を利用した凹みの表現方法を改良してみた


ブログ開始初期の頃に作ったVoronoiによるふんわりした凹み形状の作り方を改良してみました。画像の左がヴォロノイ形状、右が六角形の縁有り形状です。

当時はPatchコマンドを使ってふんわり感を表現していましたが、サーフェスのエッジ間の結合がうまくいかなかったり、サーフェスのUVを相当細かくしないと結合できないなど色々使い勝手がいまひとつだったので、今回はsubDの仕組みを取り入れてみました。

計算が少々重いのが難点ですが、何か参考になる個所があれば幸いです。

今回の作り方は途中で一度、ポリゴンメッシュに変換しますので、自由曲面上にパターンを作る場合、直接、サーフェス上に配置するよりは平面上に作ってからサーフェスモーフィング機能を使って張り込む方法がおすすめです。

Voronoi凹み形状

・Rhinoで適当なサーフェスを作り、Grasshopperに取り込みます。

・パターン作りは平面上で行うため、XY平面上に投影します。パターン配置範囲は少し狭めるため、isoTrimコンポーネントを使って若干量、縮小します。

・XY平面上に投影して縮小化したサーフェス上にVoronoiカーブを配置します。その後、内側にオフセットさせてクリアランスを確保します。同時に、Voronoi閉曲線の面積と中心点も後で使うので取り出しておきます。

・面積に応じて凹み量を変えるため、Bounds及びRemapコンポーネントを組み合わせて凹み量を求めます。Voronoi閉曲線が狭い程浅くすると自然な感じに見えるためです。

・求めた凹み量に応じて、Voronoi閉曲線の中心点をZマイナス方向に移動させます。

・Voronoi閉曲線をExplodeコンポーネントにつないで辺をバラバラに分解し、V出力から取り出した節点と中心間で直線を引き、隣り合う直線2本とバラバラに分解したエッジの3本ずつ使ってEedge Surfaceコンポーネントにつないでサーフェス化します。三角形の凹み形状が出来上がります。

・三角形サーフェスを個別にSimple Meshコンポーネントにつないでポリゴンメッシュに変換します。UnifyMeshによるメッシュの法線方向の統一、Weaverbird Join Meshes and Weldコンポーネントによるメッシュの結合&ウェルド作業、Weaverbird's Catmull-Clark Subdivisionコンポーネントによる、四角形ポリゴンの細分化による丸み付けを経由し、最後にsubD from MeshコンポーネントにつないでsubD形状に変換します。

・Weaverbird Join Meshes and WeldコンポーネントのW入力はTrueにします。Weld機能をONにするという意味です。

・Weaverbird's Catmull-Clark SubdivisionのLは、細分化する回数を指定します。回数が多いほどより滑らかになりますが、そのぶん、ポリゴンメッシュの数が増大しますので、ほどよい回数に設定します。S入力はエッジの形態を指定します。エッジは元の直線の形を維持させるため、0(Fixed)を指定しています。

・subD from Meshコンポーネントの入力は、上から順にNone、None、Falseです。画像にあるように、角が若干丸みを帯びます。

・各Voronoi形状は隙間が空いているので、それを埋めるためにXY平面上に投影したサーフェスを各Voronoi形状のエッジで分割してすき間のサーフェスのみ取り出します。

・最後に、Surface Morphコンポーネントにつないでモーフィングを実行します。へこみ量はW入力にDomainをつないでコントロールします。

・完成状態はこんな感じです。

六角形の縁有りへこみ形状

・Voronoiへこみ形状と同じデータを使いますが、重ならないようにX方向に位置をずらしています。

・LunchBoxプラグインにあるHexagon Cellsコンポーネントを使って平面に投影したサーフェス上に六角形を配置し、端にある六角形以外の形状を削除するため、辺をバラバラに分解し、数が6か否か判定させて六角形のみ取り出します。

・その後、若干量、内側にオフセットさせます。

・六角形をZマイナス方向に3mm移動させます。そこからさらに、中心点を求め、それをZマイナス方向に6mm移動させます。

・六角形をExplodeコンポーネントにつないで辺をバラバラに分解し、端点と中心点間を直線で結び、Edge Surfaceコンポーネントにつないで三角形サーフェスを作成します。

・subD化します。

・subD化した六角形のエッジをBrep Edges及びJoin Curvesコンポーネントをつないで取り出し、Z方向に適当量の押し出しサーフェスを作成してからXY平面で分割し、側面部分を取り出します。

・上の画像のbrepと書いてある中継端子はBrepを使います。以下の画像の個所にあるコンポーネントです。
これを途中に入れることにより、自動的にsubD形状からポリサーフェス形状に変換され、そのまま形状の加工ができるようになります。

・六角形以外の隙間部分もサーフェスを分割して求めます。

・すべてまとめてモーフィングを実行。

・六角形の縁にフィレットをかけます。

・表面と側面をBrep Joinコンポーネントにつないで一つのOpen Brepに結合してから、Convex Edgesコンポーネントにつないでエッジの検出(今回は山折れエッジのみなのでCv出口から取り出し)、Fillet Edgesコンポーネントに各種つないでフィレット化を行います。

・元々、Rhinoはフィレット機能に関してあまり強力ではないため、Grasshopper上でこの機能はエラーになる場合が多々あります。今回のケースのように、比較的シンプルで整った形の場合以外は素直に手作業でフィレット作業を行うことをお勧めします。

・以上で完成です。

0 件のコメント:

コメントを投稿

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

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