Spiral Node [Mardini2024]

これはMardini2024のDay1　SpiralNodeの動画を視聴してまとめたものです。

[動画](https://www.youtube.com/watch?v=p8HBW4q4tas)
![スクリーンショット 2024-03-16 13.43.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e9692c3e-43d8-c7a0-cf24-9e96d1be6565.png)

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

Day1 Spiral Node | [Day2 Topo build Node](https://qiita.com/jyouryuusui/items/595734aa9b5026cf1d08)

# 要約

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e3de2007-efed-0fdc-e87a-b8f3e06630dd.png)

- **Spiralノード**は、Geometryレベルのノードで、螺旋状のカーブを生成する
- **Helixノード**は、螺旋状のヘリックス構造を作成する 
    - ヘリックス構造：らせん状に巻きついたタンパク質の二次構造の共通モチーフの1つ
    - SOPのノードとしては同じSpiralノードでHeightにデフォルトで1が入っているものです
- Spiralノードでは、**Height Ramp**を有効にして、カーブに沿った高さを調整できる
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/30c1cd95-5d9a-0aef-b5f3-d322767d2f67.png)

- Spiralノードの**Spiral Count**を増やすと、複数の螺旋が作成される
- Sweepノードと組み合わせることで、螺旋状のチューブを作成できる
    - SweepのSurface ShapeがデフォルトのSecond Input Cross Sectionsだと機能しないので、Round Tubeに変更します
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d7ee7b5c-1cc2-a03d-eafc-e355a2890d4e.png)
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/b0163af4-0ab7-070b-4d22-4213879c4fb6.png)
- Helixノードは、DNAのような構造を作成するのに適している
- Polyframeノードと組み合わせることで、カーブに沿った方向を取得できる
    - PolyFrameノードのNormalNameをオフに、Tangent NameをtangentuからNに変更します
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9c475194-5524-e567-2e43-e7003e9e7d90.png)

- 取得した方向(@v)を使って、シミュレーションに活用できます
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/94f4a864-2011-d38a-1ec0-057944e534d1.png)


# サンプルファイル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d18b86a2-7bc1-4648-873f-573a50b84fe8.png)

DNAのらせん構造作成と、煙生成のサンプルが含まれています。

## HELIX_DNA
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/bbad6d30-448f-14f6-67fe-b7170a652cbc.png)

- SpiralノードまたはHelixノードを作成 
    - Heightを1、Turnを1.69に
    - Spiral Countを2に増やして、複数のヘリックスを作成
    - Increase per Turnを0に
- For-Each Connected Pieceでループを追加
    - ループ内にWrangleを追加
    ```
    @id = @ptnum;
    ```
    - Connectivity TypeはPrimitive
- Addノードを追加
    - Polygonsタブ内ののBy Groupタブ、Add By Attributeで「id」を指定
- Sweepノードを追加
    - Surface ShapeをRound Tubeに変更
    - Radiusを0.004に

## SPIRAL_SMOKE
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/733ccb99-46f7-3756-95bc-76bacc610e32.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/2f9f6de3-b644-15d9-f5ed-599f83aae1ff.png)

- Sprialノードを追加
    - RadiusScaleを3に
- polyframeを作成、TangentをNに
- scatterノード（Count:36000）・restノード・PointJitterノード（Scale:0.4、UpdateNormalをオフ）を追加し、スパイラル付近にいくつかの点を散在させます
- Wrangelを追加
    - スパイラル位置に近いほど高い値を見つける処理を追加
```
float mult = fit(distance(v@P, v@rest),0,0.4,1,0);
v@v = -v@N*mult;
```
- VolumeRasterizeAttributesノードを追加
    - Attributeはvを追加
    - Filter
        - VoxelSizeは0.1から0.02
        - ParticleScaleは1から0.2
- 参照しやすいようにNullノードを追加。名前をvelとする

---
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e4d54a86-7ebd-35ea-9e68-badba72f0496.png)

- billowy smoke のプリセットにより、煙シミュレーションを素早くセットアップできます 
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/4931402b-a700-4a91-4a22-13a1ebd05efa.png)
- デフォルトでは、ソース元のsmoke_baseがTorusなので、すこし平べったいSphereに差し替え
- Pyro SourceノードからDensityのみ残して、TemperatureのAttributeを削除
- デフォルトでは、Attribute Adjust Vector でvelocityが付与されています。今回はvelocityを螺旋状態に変えたいので、attribadjustvector_velocityノードを削除します。
- 上流のTemperatureとvelocityを削除したので、Volume Rasterize Attributesの参照するAttributeからDensityのみ残して、temperatureと vを削除
- PyroSolverノード
    - Setup
        - VoxelSizeは0.1から0.05に
    - Sourceing
        - temperatureを削除
    - Fields
        - Density
            - DisspationをDissipation：0.1
            - ControlFieldをtemperatureからdensityに
            - ControlRangeを0〜1から0〜10に
            - Rampを好みに
            - Flameをオフ
    - Shape
        - Buoyancy オン
        - Wind Speedを0.1に
- PyroSolverノード内
    - VolumeSourceを作成し、SOP Pathに先ほどのNull（vel）を参照
    - OperationsにVectorのFieldを追加
        - SourceVolumeをv
        - TargetFieldをvel
        - Source Scaleを0.2
    - OUTPUT#2のsources_outputに接続
- PyroBakeVolumeノード（pyrolook_billowy_smoke）で煙の色を上書き
    - Smoke
        - DensityScaleを5から30に

以上の手順で、HoudiniでSpiralノードとHelixノードを使った螺旋状のジオメトリを作成し、様々な効果を生成できます。これらのノードは、アニメーションやシミュレーションなどにも活用できます。