プロシージャルなクモの巣の生成①
いくつかのチュートリアルを参考にしたプロシージャルな蜘蛛の巣生成の習作

習作です。


本記事の内容は以下のチュートリアル群を参考に作成しました。
Project GROT | Procedural Flesh (再生リスト)
https://www.youtube.com/watch?v=Y5j_CBGdIHg&list=PLXNFA1EysfYnYXTCFn58Hu_fxRXxQiC0t
環境
HoudiniFX 20.5.613
UnrealEngine 5.5.4
所感
元のメッシュ、蜘蛛糸のメッシュ、maskedで抜かれたマテリアルのメッシュの3要素で構成。
サムネイルの草であれば糸が15000ポリゴン、maskedで抜いているメッシュが3000ポリゴン程度の合計18000ポリゴン程度増えています。
ポリゴン数などのリソース量に対してかなり控えめな見た目なので、仮に実用を目指すなら見た目まだまだは詰めるべきでしょう。

maskedで抜いているので透明度で抜いている部分はシェーダー複雑度は高くないものの、糸をメッシュで作成しているのでメッシュ量的には多め。
メッシュサイズは気軽に使えるものでは無いものの、見た目を調整すれば意味のあるビジュアルであれば使い道はあるかも。
糸部分で目立たないものを削除したり、そもそも面部分のメッシュだけでよいビジュアルが作れるならばより現実的か。
(参考にしたProjectGrotもポリゴン数はあまり意識しないメッシュ生成だったので、そういうプロジェクトであればアリかなーという印象。)

メッシュ内側の糸
長くなったので本記事では糸部分の生成までを記載しています。
ベースとなるpointの作成
mesureからcurvatureを取得しmaskに変換し、これを糸の接続点のソースとして利用する。

LabsPhisicalAmbientOcculusionとのブレンドやattrib remapなどでmaskの値を調整

scatterを接続し「Density Attribute」にmaskを設定するとmaskが高い場所に偏ったpointを生成できる。

maskの値はscatter作成後のpointに引き継がれるので、maskが微小な範囲で作成された、生成にあまり使いたくない場所のpointをvexで削除

メインとなるpolylineの作成
enumrateで「GroupType」を「point」、「Attribute」を「name」、「Type」を「String」に設定して頂点番号をstring形式のpointアトリビュートとして保存。
文字列形式の独立したアトリビュートを持っているとConnectAdjacentPiecesノードでpoint間で近いその文字列アトリビュートの値が異なるpoint同士を接続できる。

resampleでpoint数を増やし、ソースとしたメッシュを第2接続につないだgroupノードでメッシュ内に存在するpointをグループ化。
resampleノード時に後で使うので「CurveUAttribute」も有効にしておく

group expandの「FloodFillToConnectedGeometry」オプションでpolyline全体にグループを拡張子、メッシュ内に交差してしまっているpolylineを削除する

Primitive単位でrandomデリートで糸の量をコントロールできるようにする。
これでベースの糸が完成

サブとなるpolylineの作成
メインとして準備したpolylineをfuseで接続して分岐した糸の始点にする。
OutPositionsを「LatestPointNumber」に変更すると元の糸でpointがあった位置のみにfuseで結合されたpointを生成する。

ベースとなるpolyline同様、connect adjust piecesで polylineを生成し、

ベース同様、メッシュと交差しているpolylineをgroupノードとgroup expandで削除する。

これでメインとなるpolylineからの枝分かれを表現するためのpolylineができた。
この後メインのpolylineとサブのpolylineをマージするが、その前にdeform用のアトリビュートを作成する。
デフォーム用のアトリビュートを作成
メインとなるpolylineに戻り、resampleで作成したcurveuアトリビュートを反転し、強度を変更できるようにする。

サブとなるpolywireはAttributeTransferでmainの位置に合わせた値を転送する。
この後の工程でcurveuででフォームの影響度を制御するが、この時の変形がメインとなるpolylineと同じ寮になるようにするために行っている。

メインのpolylineとサブのpolylineをfuseで接続点をマージする。

デフォーム
curveuを利用してカーブの中央に近いほどY軸下側にたわむような変形を作成する

余談:Grotで共有してくれている、Solverで作成する糸が絡まるようなデフォームも試してみましたが今回は使いませんでした。
こちらもpolylineに対する面白い変形なので興味があれば見てみるとよいと思います。

こちらの動画でその変形が紹介されています。
Project GROT Procedural Flesh | 02 | Edge Bundling
https://www.youtube.com/watch?v=i6A1TJoBPPY&list=PLXNFA1EysfYnYXTCFn58Hu_fxRXxQiC0t&index=3
メッシュ化
VEXでpscaleを設定し、curveuの値に応じて太さを調整できるようにする

Sweapでメッシュ化する。

これでメインとなる糸部分のメッシュ
長くなってしまったので今回はここまで
プロシージャルモデリングをしているといつも悩ましい、「ポリゴン数は多くても許されるのか問題」。
100%遭遇すると言っても過言では無いですね…
とはいえ、ポリゴン数過多をプロシージャルに作る分にはスケーリングはしやすい(多くする、少なくする両面において)ので個人的には好きです。

fish_ball
プロシージャル魚類