Houdiniメモ


調べた事をメモ。リンク等。
雑にまとめているので、いいかげんなところもあります。

**◯KineFXメモ**
https://qiita.com/masuki/items/4d6c49e6dcb65936150b

# 直線から余分なポイントを削除
![facet.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/355cf878-46de-77a5-cbbd-f84863c43678.jpeg)
**Facet SOP**
「Remove Inline Points」をチェック。

# 重なった面を削除
ぴったり重なってしまっているポリゴンを消します。

**Clean SOP**
Consolidate pointとFix Overlapsにチェック。Delete Overlap Pairsをオフ。

Delete Overlap Pairsがオンの場合は、重なっているポリゴンがすべて消える。

# ポリゴンを統合する（外周のポイントは残す）
![divide.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/8a7ade41-0668-60bc-64bd-e283afba22c3.jpeg)
**Divide SOP**
Remove Shared Edgesにチェック。

# ポリゴン（平面）外周のcurveを作る
![extract_borders.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/73d4e208-ce8a-6b14-75bd-ce420b68c46b.jpeg)
**Labs Extract Borders SOP**

# オブジェクトの表面に沿ってカーブを描く
![draw.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/b9fa9523-d53c-2c0f-f7b5-b32f46f1ec6e.jpeg)
**Draw Curve SOP**
ProjectionタブのProjectionを「Geometry」にする。

# ランダム選択
![random.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/441112a5-85c1-d113-a5fb-0eea7d672389.jpeg)
**Labs Random Selection SOP**

# ランダム分割
![lot.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/31c98990-0ac5-ec4c-e5f4-6ec8819a2653.jpeg)
**Labs Lot Suvdivision SOP**

縦横ランダムに分割する。

# 外周のエッジをグループ化
![group_edge2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/1fb5a8bc-c4ba-668f-4f80-a5a4fb48a6db.jpeg)
**Group SOP**
Group Typeを「Edges」に。
Base GroupのEnableのチェックを外す。

Include by EdgesのEnableをチェック。
Min Edge Angleにチェック。

Group Typeを「Primitive」にすると図の右のようになる。

# ＄HIP ＄JOBの場所
![hip.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/e2299380-d567-740a-01df-323007e68d3d.jpeg)
＄HIPは今開いているファイルのある場所
＄JOBはprojectを使用している場合、そのprojectの場所


# 複数ポリゴンを、1つのポリゴンに統合する
![repair.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/8df6db13-434b-6461-8d0a-29cc86f1fb3d.jpeg)
**Labs Repair SOP**

 参考：「Labs Repair / Quadrangulate / Remove Inside Facesノードについて」
https://houdinifx.jp/blog/labs-repair-quadrangulate-remove-inside-faces%e3%83%8e%e3%83%bc%e3%83%89%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/

# Resampleで角が丸くなってしまうのを直す
![resample.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/e6c622bb-bc1c-0e19-136c-4fc2eb9ca151.jpeg)
パラメータの**Resample by Polygon Edgeをチェック。**

# 分離したカーブを一つにまとめる
![polypath.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/390e6f25-1d2f-d2f6-72ce-092c2f415894.jpeg)
**Polypath SOP**
ポイントは繋がっているのにカーブがバラバラになっている(primitiveが分離している）場合がありますが、
それを一つにまとめます。（重なっているポイントはfuseで統合しておきます）

# パラメータから直接バウンディングボックスやattributeを指定する
![referrence.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/2280cc60-af55-56f5-e629-0d7246b4d5ad.jpeg)
パラメータ右クリック→Reference→SceneData
〇〇SOPの段階のxの最小値最大値とかそういうのを指定できる。他にもいろいろ使えるので便利。

# attributeの数値を直接グループに指定する
![group_attribute.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/e974a5c0-233f-8fb3-a550-620a612733d0.jpeg)
グループ欄に「@rand=1」というように入力。
「@rand = 0」のようにスペースを開けるのはNGなので注意。

# パラメータをピン止めする
![pin.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/3190e654-5394-924d-fa29-bfd9ee556727.jpeg)
ピン止めしておけば、常にこのパラメータを表示させておけます。


# オブジェクトの重心、もしくは中心点にポイントを作成
**Extract Centroid SOP**
RunOverを「Detail」にする。
Outputを「Attribute」にするとポイントを作らず、centroidという名前のattribute(detail)が作られる。

# つながっているプリミティブごと重ならないように整列
![align.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/7e1d772c-18d1-86b7-5c0d-540115d5f2b4.jpeg)

**Labs Align and Distribute SOP**
nameアトリビュートで分ければ、複数プリミティブでまとまったオブジェクトごとに整列することも可能。


# ランダムにオブジェクトをコピー(H.18)

Copy to Pointsを使ったランダムコピー。


参考 : 
「Houdini:Copy to Points 2.0」
http://nomoreretake.net/2020/02/13/houdinicopy-to-points-2-0/

(H18.5からはAttribute from piecesを使うと良いです）
もうcopystampは使う必要ないかな。使いにくかったし。

# UVLayoutを使ってオブジェクトを敷き詰める
![UVLayout.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/4bf7feda-057b-ed6a-6b54-109ccb40a9c6.jpeg)
参考: https://vimeo.com/296292351

UVLayoutの**UV Attributeの「uv」を「P」に変える。**その横の「XY Projection」を変えることで向きを指定。

デフォだと1x1の大きさの正方形に収まるように調整される。


**○別の形状にオブジェクトを並べる**

別の形状を第2インプットに繋ぎ、「Targets」 の「Pack Into」を「Islands From Second Input」に設定。
その下のUV Attributeを「P」に変え、その横の「XY Projection」を変えることで向きを指定。

追加記事：「UVLayoutを使ってオブジェクトを敷き詰める」
https://qiita.com/masuki/items/0069aa201ce25d366fbb

# よく使うファイルの場所を保存
![file_add2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/386d7e94-9af1-7eac-24ff-c9801584314c.jpeg)
ファイル選択画面の下の「+」を押すと今開いているファイルの場所を保存します。

# HoudiniでAO
![ao3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/d60655a1-ab0e-49b7-0fdc-f1f0a21f7a94.jpeg)
**Labs calculate occlusion**（実際はMask by feature）
お手軽にビューポートにAOを表示できて便利なんですが
**肝心のレンダリングに反映されません。**（バグ？）


**対処法**
Outputの「Combined Mask」のチェックをオフにした上で
「Ambient Occlusion」にチェックを入れる。attributeの名前は自由に。
その下にwrangleを繋ぎ「@Cd=@ao;」と入力（@aoの名前は任意）

# 謎の球体がレンダリングされる現象
![ball.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/108e1605-2e1b-1664-4902-d98f1e5e3219.jpeg)
mantraでレンダリングすると時々このような謎の球体がレンダリングされて困る事があります。
これは浮遊したポイントが残っているのが原因で、
**Clean SOP**でポイントを削除できます。(Remove Unused Pointsにチェック）


# Dirt Skirt
**Labs Dirt Skirt SOP**とは？
![dirt_skirt.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/56914327-1aef-53b6-c13a-0eadfbd9e7bb.jpeg)
オブジェクトと地面の境界に溶接部分のようなオブジェクトを作ります。

# 選択を保存、グループにする。（グループリスト）
![list.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/f442ba66-a824-188c-3226-89b6d5a48770.jpeg)
ノード表示枠で**Shift+Z** 。ノードをグループ化し、まとめて選択、表示ができる。
登録はノードを選択してドラッグすればよい。右クリックで追加、削除等

例えばスカートのボーンをすべて選択して、まとめてオンオフとかそういう時に使う。

## Ngonをグループ化(VEX)

primvertexcount(0, @primnum) > 4

primvertexcountはプリミティブ内の頂点の数を返す。

例）wrangleノード(RunOverはPrimitives)に

if ( primvertexcount(0, @primnum) > 4){ @group_ngon = 1; }
と書く。

5角形以上の面が「ngon」というgroupになる。

参考：
https://www.sidefx.com/forum/topic/52362/

## Vellum
https://www.sidefx.com/ja/tutorials/vellum-cloth-tips-tricks/

https://www.youtube.com/watch?v=qAraO2E-v84


## Detangle
Detangleは麺とかパイプ作る時、重なってしまうのを避けるために使ったりする。

後半にdetangleの記事。
https://qiita.com/jyouryuusui/items/2269879e46f9915517ad

## ForEach(loop)
![foreach.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/172f374f-817e-a0b2-6cf0-fdc6472b8d24.jpeg)
**For-Loop with Feedback**　同一オブジェクトに同じ処理を繰り返す
**For-Each Primitive**　プリミティブごとに処理（1ポリごとに処理）
**For-Each Point**　ポイントごとに処理

**For-Each Connected Piece** 接続されているプリミティブごと（つながっているポリゴンごと）に処理する
**For-Each Named Primitive** Nameアトリビュートで設定された名前ごとに処理
**For-Each Number** よくわからない

※nameアトリビュートはnameSOPで設定できる。

# Wire Deformの使い方
参考：「Rigging Series 2」1:12:30あたりから
https://youtu.be/vinCWv20Ib4?t=4365

# 変形アニメーションを〇〇フレームで固定する（SOP内)

**Time Shift SOP**

初期設定ではエクスプレッションが設定されているので、
「Frame」のパラメータを右クリックし、「Delete Channels」で解除。
固定したいフレーム数を入れる。

BlendShapeと組み合わせることで、どんな変形アニメでもループさせることができる。

# オブジェクト階層でobjectmergeに相当するもの
**Fetch**

キャラクターを動かす際、他のキャラの入っているHDAなりsubset内のオブジェクトをペアレントしたい時に使う。

**・ペアレントがうまくいかない場合**

**ペアレントする前に「Use Parent Transform of Fetched Object」にチェックを入れ、**
その後ペアレントをする。後からチェックを入れると、オブジェクトがとんでもない所へ飛んだりする。

# オブジェクト表面のポイントにペアレント(H.18)
**Constrainsシェルフの「Points」を使う**
![points.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669759/b34deb40-f574-b426-d90d-bfe818b93da0.jpeg)
1.表面にくっつけるオブジェクト（Nullとか)を選択してEnter
2.ペアレントされるオブジェクト（体とか）を選択してEnter
3.オブジェクトのポイントを選択してEnter

※リグに絡めると重くなる場合があるので注意。

# ボーンからパスを作る
**BoneCaptureLine SOP**

Capture Geometryでbiharmonicを使うと生成されるSOP群の一つ。単体でも使える。

「Extra Regions」にボーンの名前をつっこむとラインが作られる。
記述例「　../../bone1 ../../bone2 ../../bone3　」
UseBoneLinkにチェックを入れる。