Topo build Node[Mardini2024]

これはMardini2024のDay2　Topo build Nodeの動画を視聴してまとめたものです。

[動画](https://www.youtube.com/watch?v=63anPE14fGc)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9fef2c3f-e97f-8d30-5f52-438ab5a6d147.png)


[公式のサンプルファイル](https://media.sidefx.com/uploads/contests/mardini2024/moeen_videos/mardini_examples_day2_topobuild.zip)


[Day1 Spiral Node](https://qiita.com/jyouryuusui/items/34ee65507b2b76398fb2) | Day2 Topo build Node | [Day3 Scatter And Align](https://qiita.com/jyouryuusui/items/623f04aa353260b591d1)


# 要約

Topobuildノードを使用すると、既存のジオメトリを参照しながら、新しいトポロジーを構築できます。

- Topobuildノードは、ジオメトリレベルのSOPノードで、リトポロジーやカスタムジオメトリの作成に使用する
- 2つのバージョンがある: 「Toobuild」は参照ジオメトリを必要とし、「Poly Draw」は自由に描画できる
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c5340510-680a-561d-60cf-c0dfe7d47899.png)
    - どちらも同じTopobuildノードでノードの名前が異なるだけ
- 「Toobuild」では、参照ジオメトリ上でポイントとエッジを配置し、トポロジーを構築する
- スムーズモードとブラシモードを使用して、トポロジーを調整できる
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/b3f5acae-e529-68b7-86df-50c9f47169b0.png)
- 「Poly Draw」では、ビューポート内で自由にジオメトリを描画できる
- ClipノードとMirrorノード、Subdivideノードと組み合わせて、スムーズな表面で対称的なジオメトリを作成できる　
- スキンモードを使用して、クロスセクションからジオメトリを作成できる
- 既存のメッシュの問題を修正するためにも使用できる

## TIPS

各モードの詳細は、ヘルプを参照ください
https://www.sidefx.com/ja/docs/houdini/nodes/sop/topobuild.html

各モードの切り替えは、Shift + 1〜6

### Build 
ポイントの作成やポイント・エッジの選択ができる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d09acec1-7103-65b1-b5ac-4675c26d8e82.png)

- Shift + backspace
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c2a00e16-3fc3-80b1-d22c-72496a18af19.png)
    - こういう不意に作成してしまったUnusedPointを削除できる
- Gキーを押しながらドラッグさせるとエッジ配置時に、エッジを回転できる
- Shift+X　選択したエッジやポイントを集約して一つのポイントにする
- Shift+クリックでエッジループを選択し、Shift+Cで円形に変換できる
- Shift+E、選択したエッジやポリゴンを等間隔にする
- Shift+S、選択したエッジを直線にする
- Shift+K、２つのエッジを選択した状態で、Shift+Kを押すことでポリゴンをブリッジさせる
- F　あまり大きな場所はPolyFillできないが、小さい領域ならエッジを選択した状態からFillできる

他のモードでも同様
- I　Iを押している間は、第2インプットの参照状態が外れてポイント・エッジ・ポリゴンの移動ができる
- H　選択したポリゴンを非表示状態にできる（消えたわけではない）
- Shift+H　非表示にしたポリゴンを表示する


### Edge Slide 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e17dd0ce-34f3-8f1b-da6d-1676a3e46968.png)

エッジをスライドできる

### Split

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/8fe5062c-d457-a6c4-e96f-82a35244cfd9.png)

エッジ分割できる

- Shift+クリックでエッジループの挿入
- 中スクロールでエッジの分割数の増減

### Brush

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d497f561-6bb9-e541-0145-b1e9bd55844e.png)

ブラシでポイントを移動させることができる


- Shift+中スクロールもしくはドラッグでブラシサイズ変更　

### Smooth
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/df6f32bd-1b4e-b56b-b146-2795fac0046b.png)
ブラシでポイントをリラックスさせることができる。

第2インプットの参照がある状態でSmoothAllボタンを押すと、全体がスムースされて便利

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/89b4c958-1048-b37f-0fd4-6ef9779a8b81.png)


### Skin

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ec53707c-6c33-3c3b-2b55-75f5a26a3a8a.png)

スキンを作成する

- クリック→ドラッグすることで、クロスセクションを描画可能、
- Ctrl+クリック+ドラッグ　でクロスセクションのスキニング　Spanの数を増やして分割数を決めます

# サンプルファイル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ab7157ef-49ec-d6ee-dfb4-19f33114c2d2.png)

サンプル内には、トミーのモデル（TopoBuild参照用）、スライスされたモデルのRETOPOLOGY、ペイント部のメッシュ構造を再構成させるSPHERE_RECONSTRUCTION、抽象的なオブジェクトの押出であるABSTRACT_EXTRUSION、トミーのリトポ作業用のTOMMY_GEO_retopoが含まれています。

## RETOPOLOGY

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/75da7af4-737e-e3a8-13cb-d7f2fffc970d.png)

第2インプットにトミーモデルを参照し、ClipノードとMirrorノードでX軸対称にし、Subdivideノードと組み合わせて、スムーズな表面に。スムーズになった分オリジナルモデルよりも鼻が低くなったので、2度目のTopobuildでSmoothAllを行い、元のモデルに近い形状へ戻しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c149593a-6e15-73c8-fc96-545b7e4e7ebb.png)

第2インプットにトミーモデルを参照し、
スキンモードでクロスセクションを作成、trl+クリック+ドラッグ　でクロスセクションのスキニングを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/43941ab6-eecb-678b-13e2-f492a147c0cf.png)

## SPHERE_RECONSTRUCTION

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/3917b94e-e26a-5d06-7205-fd019af2eb96.png)

- Sphreを作成
- ポリゴンを選択し、Delete。（blastノード
- Topobuildで新しいトポロジーでFillを行う。
- Subdivideでポリゴンをならす
- 球体ではなく、なんか歪んだ球体らしきものになってしまうので、真球のSphereを第2インプットで参照しSmoothAllを行う
- polypathでメッシュからPathに
- PolyPathのCdを白色に。Blastしたポリゴンを黒色にColorで頂点カラーを付与。AttributeTransferでトポロジが違う場所を特定する
- Wrangelを追加。黒色の場合すこし大きくさせる処理をいれる
```
@pscale = fit01(length(v@Cd),0.1,1);
```
- Sweepノードを追加 SurfaceType:RoundTubeでポリワイヤーを表現
- Wrangle（Ramp情報付与）で色味つけ
```
v@Cd = vector(chramp("clr",length(v@Cd)));
```
- 最後にSubdivideして完成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ccdf46fc-2d64-964a-b650-2ded63a9aaa4.png)


## ABSTRACT_EXTRUSION

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/14d6748a-93c3-602e-e7e3-f68661bd3d98.png)


- Topobuildでメッシュを作成
- Wrangleを追加、Extrudeする量をランダムで指定する（Multパラメータ付与
```
@extrude = fit01(rand(@primnum),0.1,1)*chf("mult");
```
- For-Each Primitivesでループ作成
- ループ内でPolyExtrudeとPolyBevelでメッシュごとに押し出し面取り
    - ExtrudeのDistanceにはWrangleで指定した　prim(0,0,"extrude",0)　を設定
    - Insertは0.042
- Colorノードの追加、ColorTypeは「Ramp From Attribute」を指定することで、@extrudeの値に応じたグラデーションカラーを指定できる

## まとめ

以上の手順で、Topobuildノードを使ってリトポロジーやカスタムジオメトリの作成ができます。参照ジオメトリを使用したり、自由に描画したりと、様々な方法でトポロジーを構築できます。