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

習作です。
○ 前回の記事:プロシージャルなクモの巣の生成①
https://www.procedural.jp/articles/n2sxu4cmn/
本記事の内容は以下のチュートリアル群を参考に作成しました。
○ Project GROT | Procedural Flesh (再生リスト)
https://www.youtube.com/watch?v=Y5j_CBGdIHg&list=PLXNFA1EysfYnYXTCFn58Hu_fxRXxQiC0t
○ Entagma | Houdini: Tearing A Spider Web Using Vellum Grains
https://youtu.be/lej5uheoMdQ?si=j8NN6rfboWZcg0N0
環境
HoudiniFX 20.5.613
UnrealEngine 5.5.4
メッシュ外側の糸
第2入力から外側にコリジョンメッシュを設定した場合、そこにも蜘蛛の巣が掛かるようにする。
第2入力として周りの蜘蛛糸を張りたいメッシュを入力し、

mask from geometryノードを作成し、第1入力を蜘蛛糸を追加したい周りのメッシュ、第2入力をソースとなるメッシュを入力につないだSphereを接続する。
これで元メッシュに近い球場の範囲に指定のアトリビュートを設定することができる。
SphereのScaleを調整すれば範囲の大きさも調整できる。

前回の蜘蛛糸の接続点のソースとして利用していたcurvatureから作成したmaskにmargeしてこれを蜘蛛糸の始点にできるようにする。
Switchで周囲のCollider用メッシュの有無も切り替えられるようにした。

テクスチャで表現するためのポリゴン面を作成
蜘蛛糸の内側に張られた面を構成していく
前回作成した蜘蛛糸のメッシュ化する一つ前からfuseに入力する。
OutputPositionsは「LeastPointNumber」などの既存point位置に接着する設定を使用し、SnapDistanceを少し大きめの値にする。

joinを接続して「Wrap Last To First」、「Only Connected」を有効化し、polyfillで面を作成する。
FillModeはが後のLabsAutoUVで比較的エラーが少なそうだった「Single Polygon」で作成
Only Connectedが有効なのですでに接続された頂点のみでループができるので、fuseで接続されてループになったpolylineの内側に対してフェースが作成される

edge cuspでプリミティブごとに分割し、delete small partsで小さい面を削除
delete small partsはpolylineも消せる。

再度fuseしてメッシュごとにfor eachでUVを作成

両面を持つメッシュにするためにreverseしたメッシュをmargeしてメッシュの作成完了

テクスチャを作成
ベイク用の蜘蛛の巣メッシュを作成する
Entagmaの蜘蛛の巣のシミュレーションを参考に蜘蛛の巣テクスチャ用のメッシュを作成していく
lineを作成し、

copy and transformで円形を作る。
この時、後にCOPでテクスチャ化したいので形状が大体、XZ平面の - 1~1範囲に収まるくらいの大きさにする。

Spiralを作成し、lineの範囲より少し小さめにする。
各々をpointでグループ化しておいてmargeする

resampleとfuseを使って、lineとspiralの交差点が結合するくらいのサイズで結合する。
(画像だとresampleが Maximum Segment Lengthで細分化し、Lengthが0.01、FuseのSnapDistanceも0.01にしている。)

groupノードでSpiral部分全体が入る程度のBoundingSphere範囲に含まれる点をグループ化する。
(Spiralの外の部分をVellum用にPinConstraintするため)

Cloth TypeでVellumをセットアップ
Pin To Animationで先ほどグループ化したSpiralより外側のpointをPinPointsに設定し、RestLengthを1より少なめにする。
これでシミュレーション時に線が縮むような動きをする。

Gravityを0にしてシミュレーションし、糸が張ったような形状にする。
timeshiftを使って手頃な形状なタイミングで固定

labs dissolve flat edgesを接続して直線に近いpolylineのpointを削除
(※なお、今回の工程では削減の必要性は無かったですが)

polywireでメッシュ化

ゴミや水滴を表現するためにpolywireからscatterでpointを生成。
attribute randomize でpscaleを設定してSphereをコピー。

密度など調整し、polywireとコピーしたSphereをマージしてCOPへ

COPでマスク化
Copに入り、SOP Importで先ほど作成したメッシュをCOPに入力

軸方向や形状の範囲を設定できるようにRasterizeSetupを接続
(範囲に合わせた変形をしてくれるのですごい形になる)

RasterizeGeometryを接続し、位置をRGBに変換

ChannelSplitでBlueチャンネルをNullに接続し、Nullの表示を保存する。
これを蜘蛛の巣の面用のマスクとして利用したい。

CopPreviewノードでOpacityに接続するとHoudiniのシーンビュー上で簡易なプレビューもできる

メッシュ出力
UnrealEngine用のFBXに加工する。
UEにFBX経由で入力するメッシュは三角化が必要なのでDivideで三角形メッシュに分割し、

AttribDeleteで不要なアトリビュートを削除し、マテリアルスロットの準備を行う。
元メッシュ用、糸のポリゴン用、面のポリゴン用それぞれのPrincipleShaderを作成して割り当てる。
FBX経由でUnrealEngineに入力した場合、これで各々のメッシュが異なるマテリアルスロットをもった状態で入力されてくれる。

サイズなどを合わせて出力し、UnrealEngineへ
UE用マテリアル
今回はマテリアルは最低限のプレビュー用のものだけ準備をした。
面による糸の糸についたゴミや水滴などはマスクを増やして色付けなどするともっと見た目は良くなるかも。
糸のポリゴン用のマテリアル。 単色のみ

面による糸のマテリアル。
COPで作成したテクスチャでMaskedによるOpacityで切り抜いている

ソースメッシュ用のマテリアルはベースカラーのみ
(余談:MeshyAIで作成したメッシュなのですが、3か月ほど前に生成したものでBaseColorのみのモデルでテストしています。最近だとPBR用テクスチャも生成できるようです)


画像が多くなってしまいました。
次回以降、似たような記事の場合はもう少し分割してみます。
当記事はまだHoudini20.5です。

fish_ball
プロシージャル魚類