Houdiniで髪の毛のメッシュを作成するノードを作った

はじめに

Houdiniで、キャラクターの髪の毛の房のメッシュを作成するノードを作成しました。 Sweepしているだけで大したことはしていないのですがメモしておきます。

2019 05 25 15 34 02

完成図

次の画像は、このノードで作成したメッシュをBlenderで表示してみたものです。

2019 05 25 15 34 48

このような髪を作れるノードを作成します。

髪の毛のノードの作成

髪の毛のノードはカーブをつなぐことで使います。

2019 05 25 15 36 16

2019 05 25 15 36 24

ノードの全体像は次のとおりです。

2019 05 25 15 37 09

最初にSweepの背骨部分から説明します。

ノードのインプットとして渡されるカーブにresampleノードを接続しています。 resampleノードでは適当な長さのセグメントに分けています。 このLengthもパラメータとして外部に出したほうがよいような。

2019 05 25 15 54 24

2019 05 25 15 55 09

その次にPolyFrameノードを接続します。

2019 05 25 15 56 43

Normalをup、TangentをNとして設定します。

2019 05 25 15 57 12

その次にPointWrangleを接続します。

2019 05 25 15 59 38

PointWrangleノードには次のように記述します。

2019 05 25 15 59 52

@pscale = chramp("pscale", (float) @ptnum / (@numpt - 1), 0);
@pscale *= ch("UniformScale", 1.0);

float rad = radians(ch("Angle", 90));
vector4 q = quaternion(rad, @N);
@up = qrotate(q, @up);

ランプとUniformScaleで房の太さのpscaleを変更しています。 房の方向のNと回転角Angleをもとにupの方向を回転させています。

次にSweepするオブジェクトの方を見ていきます。

Primitive TypeがPolygonのサークルを用意します。

2019 05 25 16 02 03

2019 05 25 16 02 12

2019 05 25 16 02 40

次にGroupノードで6番目の頂点に「uvseam」というグループを割り当てます。

2019 05 25 16 03 21

2019 05 25 16 03 29

2019 05 25 16 03 38

その次にTransformノードをつなげて円を潰します。

2019 05 25 16 04 22

2019 05 25 16 04 45

2019 05 25 16 04 53

さらにTransformノードをつなげてひし形にしました。

2019 05 25 16 05 28

2019 05 25 16 05 35

2019 05 25 16 05 46

Sweepノードに作成した断面と背骨を接続します。

2019 05 25 16 06 21

2019 05 25 16 06 42

2019 05 25 16 06 51

2019 05 25 16 07 00

GroupPromoteノードで頂点にある「uvseam」グループをエッジグループへと変更します。

2019 05 25 16 07 54

2019 05 25 16 08 09

「Include Only Elements Entirely Contained in Original Group」にチェックを入れます。 チェックを入れたときと入れていないときのエッジグループの差は次のとおりです。

2019 05 25 16 09 34

2019 05 25 16 09 44

次に法線をNormalノードで与えます。

2019 05 25 16 10 38

最後にUV Flattenノードを接続し、「uvseam」をシームとしてUV展開をします。

2019 05 25 16 10 56

2019 05 25 16 11 04

2019 05 25 16 11 55

サブネットワークに格納して右クリックのメニューからCreate Digital Assetを選択します。

2019 05 25 15 39 23

WrangleノードのPscaleとUniformscale、Angleをパラメータとして外部に公開します。 デフォルト値としてUniformscaleに1を、Angleに90を与えました。

2019 05 25 15 41 42

これでノードの完成です。

複数の房について、UV LayoutでNo Rotationの設定で並べると、 よい感じに髪の毛の方向が揃って展開されます。

2019 05 25 15 44 31

2019 05 25 15 45 33

2019 05 25 15 46 38

おわりに

Sweepしているだけで大したことはありませんが、 何かしらの参考になれば幸いです。