Pyro Burst Source [Mardini2024]

これはMardini2024のDay15 Pyro Burst Sourceの動画を視聴してまとめたものです。

[動画](https://www.youtube.com/watch?v=CRr1JYBicg0&t=15s)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/8769ba6e-93ff-58de-be6a-7c7b296c8134.png)

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

[Day14 Cloud Shape Generate](https://qiita.com/jyouryuusui/items/e47eedbf5ab6aa155fb8) | Day15 Pyro Burst Source　|　[Day16 Ocean Spectrum](https://qiita.com/jyouryuusui/items/a2a823aaf5b07c8011ef)

Pyro Burst Sourceノードを使用すると、爆発、マズルフラッシュ、衝撃波、ブラストリングなどの効果を生成できます。

[Pyro Burst Sourceのヘルプ](https://www.sidefx.com/ja/docs/houdini/nodes/sop/pyroburstsource.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/26729a75-94ed-15d0-ca79-daf9db12ded3.png)


# 要約

- Pyro Burst Sourceノードは、爆発のシミュレーションに使用される
- 爆発の種類(爆発、マズルフラッシュ、衝撃波、ブラストリング)を選択できる
- 形状、サイズ、方向、広がり角度などのパラメータを調整できる
- 爆発のアニメーションを制御するパラメータ(開始フレーム、持続時間、拡張率など)がある
- 密度、温度、燃焼の各コンポーネントを個別に制御できる
- Attributeを使用して、爆発のパラメータをランダム化できる
- Volume Rasterize Attributesノードを使用して、パーティクルをボリュームに変換できる
- Pyro Solverノードを使用して、爆発のシミュレーションを実行できる
- Pyro Lookノードを使用して、爆発の見た目を調整できる
- Pop Networkと組み合わせて、デブリの爆発もシミュレートできる

# サンプルファイル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/68ec9e78-3892-f790-2b49-5356e5b1786c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/39f6496d-d070-79f9-1700-0319227e276d.png)

左のDEBRIS_EXPLOTIONがPOPネットワーク接続時の土が吹き飛ぶようなシミュレーション例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/4672a1d0-9c29-5668-ba5c-1bdfc69997a6.png)

右のPYRO_EXPLOSIONがPyro Look適用した通常のエクスプロージョン例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/bda35bc4-8494-b8e0-ce5a-7ece228dcb95.png)


## Pyro Burst Sourceノードの基本

Pyro Burst SourceノードはSOPレベルのジオメトリノードです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5daaa99b-8e12-984b-10e4-689d2319a964.png)

Pyro Burst Sourceを作成すると爆発が再生されます。ビューポートに何も表示されない場合は最初のフレームに戻してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e7e707ff-64de-dae9-dde0-082a171d1fd2.png)

再生させると数フレームの間に、パーティクルが外側に向かって爆発し、ある一定のフレーム後に消えていきます。
（１〜５フレームで爆発、６フレームで消えます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c620d06c-5c71-d25a-a7e2-69697ed4ba9c.png)

次は爆発のタイプを見ていきます。

## バーストタイプ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/72c20469-f76d-24c2-797d-a252bbe0fdbb.png)

Burst Typeを見ると、デフォルトではExplosion(爆発)になっています。

■ Explosion(爆発)：地上または空中の爆発

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/8189db1b-3356-bf99-1f95-1b5c08b1196d.png)

■ Muzzle Flash(マズルフラッシュ)：狭い爆発

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/f68bd748-8263-5692-db3c-ace522ff8d97.png)

■ Shokwave(ショックウェーブ)：地面に広がる爆発

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/fd0476f6-7e21-3eb0-f7fc-6a32927469e6.png)

■ Blast Rings(ブラストリング)：大規模な爆発で見られる輪っか

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d0f2e836-f163-aa95-a9df-4a4a0a88a805.png)

核爆発で見られるようなリングです。メインの爆発の二次的な要素としてこれを使うことができます。

## 形状とサイズの設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/7c1e289d-e823-d805-20df-f777e8b2b0ca.png)

バーストタイプをExplosionに戻し、次は設定を見てみましょう。

■ Shape Offset：シード値。爆発のバリエーションを生み出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/68e755c9-d364-c6cd-d7f2-75a5906a2d72.png)



■ Initial Size：爆発の開始点でのサイズ。それ以降のサイズは倍数になります。小さな爆発から大きな爆発まで、サイズを調整できます。

■ Direction：爆発の方向。任意の方向を設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5355f97a-62f2-25b0-a267-5af690aa79e4.png)

■ Spread Angle：マズルフラッシュ時にSpread Angleを小さくすると、より狭い円錐形になります。反対に大きくすると、空中爆発のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e405c3bf-c022-c633-9017-d6e018f0326f.png)


■ Roundness：形状の変化量定義。大きくすると、全体が同じ形状になっていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/77789697-515c-a339-318b-7793cbb9bb60.png)

■ Number of Trailings：トレイリングの数。値を小さくするとトレイルの数が少なくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/0249f115-3b9c-758c-d3b3-5a11d797196d.png)

■ Trailing Separation：トレイリングの間隔。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/11b4d000-cc3f-ba4a-ec3c-d0a500c318a7.png)

■ Trailing Length：各リーディングポイントの後ろにあるトレイルの長さ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/a2b7d445-2012-be5a-f0fe-a307b575e5ed.png)

■ Trailing Thickness：各円錐がどれだけ狭いか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/1a2b168f-5293-3be4-ae90-22df6b051772.png)


# バーストアニメーションの設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/dca28c1f-407f-b2e5-fe36-1dbdeb3f0530.png)

■ Start Frame

Burst AnimationタブのTimingでは、爆発がいつ起こるかのタイミングを制御します。Start Frameが1で、Frame Durationが5になっているのがわかります。フレーム1から始まり、5フレームの間、爆発が存在します。例えばStart Frameを20フレームに変更すると、爆発はフレーム20から始まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ab373670-dc05-2b9b-ceb3-d532e3f43c41.png)

■ Frame Duration

Frame Durationを増やすことで、この爆発をより多くのフレームにわたって生じさせます。ただし一般的には、Frame Durationをかなり低く保つことのほうが多いです。

■ Overall Expansion（Outward Expansion）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/2cd32f03-a28b-a3e2-e583-5103599503ad.png)

爆発が発生している期間中にどれだけ拡張するかのパラメータです。開始時のサイズには変化がありませんが、最終フレーム時はこの設定した値の分広がります。 Initial Size の乗数として作用します。

■ Directional Expansion

Burst Shapeタブで指定したDirection方向に膨張します。この値は、 Initial Size と Outward Expansion の乗数として作用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d3c32334-fe46-79a0-3e18-f1c5730c66b6.png)

■ Directional Translation

値を大きくすると、爆発が時間とともに上に移動します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/3b89fbe2-d1dc-2a12-c14a-f50cc89c95b2.png)


## バーストコンポーネントとPyroソース

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/f7a02609-f8f3-dd17-3796-21595a7fe169.png)


Burst Componentsタブに切り替えます。
ここでは、3つのPyro Sourcesがあります。Density（密度）、Temperature（温度）、Burn（燃焼）です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/db030858-eb9d-bb91-dc2f-49d0e8cb7962.png)


これらはすべてPyro Solverに供給され、それぞれがソルバー内で異なる操作を実行します。これらは、Solverに必要な異なるフィールドです。これらの各ソースは、異なる色のパーティクルで表されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/2396cac6-536c-ee4a-64a4-156720ea27a5.png)

- Densityは灰色または白のパーティクル
- Temperatureは青のパーティクル
- Burnは黄色のパーティクル

で表されます。
この他に、Divergence：オレンジ、Alpha：紫などがあります。

それぞれ時間の経過とともに値を持ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/927d2439-9809-d344-7a89-fb34076fd277.png)

Enable Noiseでノイズを有効にして、均一なDensity値を持たないようにすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d9b37782-2124-8046-5294-bc396b3e5b6a.png)


Scale Along Trailingを有効にすると、時間に応じてすべての値をスケーリングすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/25f5e909-cb3e-595c-354d-6b18efd5df82.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ceae46cd-7cb4-8f1f-99de-4804061b2c27.png)


先端部分を見てみると黒くなっており、ほとんど何もない状態であることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/593bf0ad-5982-eaf9-61f5-93213992e417.png)

Trailing Rampを反転させて、内側のポイントと先端の状態を反転させることもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/a40f2459-edc9-b034-ad93-cd7d1d043ec1.png)

この図では中心に低い値、端点に向かって高い値になっています。

## Output Attributeの設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/b902eb77-6737-80d1-a937-618d42751e2e.png)


Output Attributeタブに移動します。ここでは、パーティクルスケールなどを制御します。
ラスタライズしてボリューム変換する時に重要となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/f69eec6b-688e-8d2d-0cf0-3312d452d993.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/245ebe08-77b8-4bf9-7a6b-2e69e0ebe2c2.png)

すでにpscale（パーティクルスケール）が設定されているので表示してみましょう。
ビューポートでDを押し、DisplayOptionのGeometryタブからParticleの表示オプションを変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/59d7bed3-20e2-4a86-ee90-975338309350.png)

Display particles asが、PointsだったところをLit Spheresに設定するとビューポート上でパーティクルの大きさが確認できます。爆発がどのような形状になるかイメージしやすくなったと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/99aaf0fc-c27f-a0b8-e91e-6426b556e3fc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/bc7a671b-aba5-59e3-a89e-434cf46b78d1.png)

Velocityを確認する場合、Display Point Trailsを有効にしてVelocityを表示し、Add Velocity Noiseを追加することもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/2e52aa78-f817-39d5-0322-80e3ccc95a18.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/492c2822-86b0-f420-6757-b2ea8062deca.png)


## Pyro Burst Source + Volume Rasterize Attributes

結局このPyro Burst Sourceは、どうやって使うのでしょうか。そこでVolume Rasterize Attributesを利用したクイックセットアップが便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c0daad2a-a5f5-9103-699b-a8bff5fa250c.png)

普通にVolume Rasterized Attributesノードを呼び出すと、Pyro用の設定は何もされていないため、変換したいAttributeは手動で入力する必要があります。Density、Temperature、Burn、Velocityなどです。面倒ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ac7d1cdb-f682-25c9-90eb-70e562469aed.png)

いったんVolume Rasterized Attributesノードを削除してPyro Burst Sourceノードだけの状態に戻します。
ここで、Quick Setupsドロップメニューから、Source Volumeを選択すると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/09d356a2-da72-cacc-09ed-aa2a19bcb8be.png)

Volume Resterizze Attributesノードの作成から、各種Density、Temperature、Burn、Velocityの設定が自動で行われ、簡単にボリュームに変換することができます。便利すぎます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d51c4550-09d8-a90c-c333-f279ad0b3ec7.png)


パラメータの色を見ると分かる通り、このノードからPyro Burst Sourceに参照されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/546bfe03-b686-064d-b242-875c99e12eff.png)

例えばPyro Burst SourceノードでBurnを削除すると、即時にこのノードに対し削除された情報が反映されます。

ラスタライズ後、次はPyro Solverです。手動で設定は面倒ですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/39da8ba7-2c15-89dd-c290-fd7935bdcda6.png)


ここでもう一度Quick Setupsを使って、Pyro Simulationを呼び出して終了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/358f03bb-08d9-affb-eac9-1ba93b71e4fd.png)


これにより、独自のVolume Rasterized Attributesが追加され、爆発が作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c968abcf-bf33-829d-9178-e1de19acf117.png)


より高解像度にするには、Pyro SolverのSetupタブにあるVoxel Sizeを0.05に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5ceda865-d8cd-eafe-5d8e-7d114c986e31.png)

必要に応じて、上流のノードからVoxel Sizeを取得することもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/95af9fff-a5a9-23e8-a0d7-837935f42bbf.png)

Volume Rasterize Attributesノード内にあるVoxel Sizeは、上流のTrailing Separationから取得されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/096d7052-062b-8dfe-1955-bd1ac875b1d2.png)

これでSource Volumeは、Voxel Sizeと同じ解像度になります。

## Pyro Lookの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ee120a60-2421-bc49-fe96-5d6c5a4520dd.png)

結局Pyro Burst Sourceの各種ソースがどのような形状でどうなっているのか、よくわからない場合があるかもしれません。
そんなときはPyro Solverで、Quick SetupsドロップメニューからCreate Pyro Lookを呼び出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/dad8bd63-c3ad-0e0c-af80-7030675bea61.png)

これでPyro Lookノードが追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/31cc3a4b-9043-c8a4-b31e-c4c9d0bfddd2.png)

デフォルトではSmokeのみ可視化されているので、FireタブからFireを有効にして、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/4f5d1a19-ce8b-5ebb-0750-70c5ac40d6cb.png)

Smoke Densityを上げます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9d5889f0-99da-ae7a-f167-d1201d99e1ca.png)

これで、爆発の実際の見た目がわかります。

再生してみるとPyro Burst Sourceノードで設定した先端部分のリーディングトレイルが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/b18a1f9c-4fb0-3f19-381c-77e9e0d1c4c4.png)


## Pyro Burst Sourceノードのその他のオプション

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/838aa03b-848c-ae33-2c52-3099194e130e.png)


Pyro Burst Sourceには他にも多くのオプションがあります。Cloud Shape Generateノードでも登場したランダム化が各種パラメータの右側にあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/7903b527-3a5c-68a4-e6e4-3646715b35f4.png)

１種類ではランダム化の状態が見えないので、このノードの入力にポイントを持ってくる必要があります。Quick Setupsの1つとしてSingle Input Pointがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/82e67d81-a54f-e2f8-96a2-0c16a6ce8d99.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/a63d4c95-b639-6bc3-e260-c42fda9ea825.png)


これだけだとポイントは１個なので、Grid上に１０個ほどのポイントをスキャッターしたものに差し替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/7ca189e3-b696-9a09-6c03-aa53425d7661.png)


すると、同時に10の爆発が発生します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/e37dfb62-957a-0b14-aeac-df1880e17e9f.png)


Gridサイズを5x5に変更して、同じような位置に集約します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/dce2b2f1-13da-f69a-fdbe-c9bdbe10baf6.png)


この１０個の爆発は、全て同じタイミングで爆発します。これはあまり良い爆発とは言えないでしょう。そこで、Pyro Burst SourceノードのBurst Animationタブに行き、Start FrameをSet Varyingに設定してランダム化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/7a890924-bd22-6b13-8424-8c64371f271a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/499ee8ed-108e-c6ca-a958-5588aea9aaf4.png)

たとえば、10フレームにわたって、連続爆発するシーンを作るとしても、このままだとすべての爆発の大きさが同じになってしまいます。そこでBurst ShapeのInitial SizeもSet Varyingに変更させます。

個々の爆発は、それぞれのソースごとに個別で影響を受けることができます。Sourceのプラスマイナスをクリックするだけで、変化が追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/665b3b52-a989-a088-8a73-f860afe1e576.png)


## Attributeを使用した変化の追加

Attributeを使用して変化を追加する方法の紹介です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/fde540d4-bd65-d8f9-5c2e-7548fa98649f.png)


ダイスをクリックすると、Attribute Adjust Floatノード（入力される値を制御できる）が追加されます。Pointにspread_angleというAttributeが追加され、そのSpread AngleがPyro Burst Sourceに供給されて制御できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/fd587083-9d59-81e1-1a71-91d1f2a0ce00.png)


上流で値が決定されるので、Pyro Burst Source上では値がグレーアウトされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/a393efa0-5f65-63d1-4d08-469699e9446b.png)

アングルの最小と最大の範囲設定を見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/40c255a7-465d-4238-8456-fa0a3a75d7d7.png)

最小は15、最大は90となっています。爆発の中には狭い爆発が含まれるようになります。


Pyro Burst Sourceノードは、何もPyroネットワークだけにデータを供給しなければならないと決まっているわけではありません。例えばPOPネットワークをPyro Burst Sourceの後ろに接続し、土が吹き飛ぶようなシミュレーションにも利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/1b4be7eb-a733-6751-28e6-bc8ff25af44e.png)



# まとめ

Pyro Burst Sourceノードを使ってリアルな爆発効果を生成できます。パラメータを調整し、他のノードと組み合わせることで、様々な爆発表現が可能です。

また、このノードについての説明を10分間のビデオで全てカバーすることはできないため、各自でドキュメントを確認するよう推奨されています。