【Unity】VRパーティクルで花火を作ろう!

はじめに

こんにちは、Kubiwakと申します!
VR空間ではドラゴンとして過ごしておりドラゴンなのでファイアブレスを撃ちたいな~という気分になりがちです。

わたしです

そんなわけで、趣味でパーティクルについて多少触れるように学び、
様々な人の力添えもあり、素敵なファイアブレス生活を送っております。

今回は、VRで楽しくパーティクル生活を送るにあたり、
「ギミックおもちゃ作成として」基礎的なパーティクル講座を行います。

それは「壁に当たる」だったり「振り回せる」だったり、
いろいろとVR特有の手触りを磨く必要があります。

元々は社内のパーティクル勉強会用のものをリファインしたものなので、
多少冗長ですがお付き合いくださいませ。

本格的な絵作りとしてのパーティクル勉強は
Unity ゲームエフェクト マスターガイド」など、良書を見てください。

1) 準備

今回はVRChatで使えるように、VRChatにあわせて
UnityHub -> Unity 2019.4.31f1
が必要なので、インストールしてください。

パーティクルの種類

Unityのパーティクルは、複数系統あります。
基本的には
Particle System(Shurikan) 
を意味します。
他には
Line Renderer :「折れ線」特化。
Trail Renderer : 「線の残像」特化。
などもよく使われます。

さらに
Visual Effect Graph : GPUパーティクル特化
Particle Renderer : (旧システム、今は使えない)
などもありますが、VRChatで対応してないため忘れましょう。

打ち上げ花火会場の準備

VRでは「リアルな」縮尺で物を作る必要があります。

単純な話で「打ち上げ花火」のつもりが「線香花火」サイズで作ってしまうことがあります。

普通のモデリングだと「スケール変えればよくない?」で済むのですが、Unityのパーティクルは後からスケールを変えると非常に面倒なことになりやすいので、最初にスケールをしっかり決めるほうが安全です。

また「物理演算」を組み込む都合「重力の強さ」などリアルな数値を適応したいときにも、しっかりとスケールを決めることで
「速度」や「長さ」、「時間」の現実の値を流し込める利点があります!

特に今回作る花火は「一部の具体的なパラメータ(発射速度、到達高度など)が法的に定められ、公開されている」ため パーティクル物理演算の勉強には最適なサンプルになります。

そんなわけで、1メートル区切り縮尺基準を簡単に作れる「ProBuilder」はとてもおススメです。

ここで操作説明はしませんが、単純な平面や、定規のような棒は基本機能だけで簡単にできるため、導入をおススメします。

1メートル区切りがあるだけで、サイズが図りやすい

また、どこのご家庭でも買えるVRChatワールドなどをお持ちの方はそちらをご準備いただければ幸いですが、そうでない方はアセットストアから無料の建物をダウンロードすることでサイズ感を掴みましょう。

ただし、VR用ではないアセットは、縮尺が変なことがあるため
やっぱりProBuilderなどの方眼紙があると、間違いが少ないです。

2) 打ち上げ花火を作ろう!

完全にゼロから、基本システムの理解を進めつつパーティクルを作りましょう!

メニューバーのGameObject/Effects/Particle Systemを選び、新しいパーティクルを作りましょう。

今回の「打ち上げ花火」は、地表からの距離が重要なのでTransformのPositionを(0,0,0)にリセットしましょう。
※ワールド設置の場合、いいかんじの地表に動かしましょう

基本的な用語は、こちらを参考に

尺玉(打ち上げ)

最初の一発を出します。
あたらしくParticle Systemを作り「Tama」と名付けます。

初期設定では、一定時間ごとにパーティクルを出し続けます。
「出し方」は「Emmision」タブで制御できます。


Rate over Time : 1秒間に何個出すか? → 0にして「自動繰り返し発射」を停止
Bursts : 「開始からX秒後に、Y発まとめて発射」
Time : 0 -> 開始直後に
Count : 1 -> 1個だけ
Cycles : 1 -> 初回1回限り
Interval : (Cyclesが2以上のとき) 何秒ごとに
Probability : 1 -> 100%の確率で発動

初期設定では「5秒に1度、Burstを繰り返し(タイマーリセット)する」ようになっています。
Mainタブの Loop : でON/OFFできます。
今回は、作成中は自動繰り返ししたほうが楽なのでONにしましょう。

発射角度

発射角度を調整します。
初期設定ではある程度ランダムに散らばります。
ShapeタブをOffにします。
Shapeタブは、発射のランダム具合を調整します。
これをOffにすることで、ランダム要素を切ります。

重力

打ち上げ花火は重力で徐々に減速します。

Force over LifetimeタブをOnにします。
SpaceをWorldにします。
(発射角度を変えても、重力方向が変わらないようにします)

Y : -9.81 (リアルな重力加速度)

Transformをいじって、発射角度を変えて重力方向が間違ってないかも確認すると良い

初期設定だと打ち上げが弱すぎて地面にあたるので強くします。

花火の法定数値参考

MEMO:現実だと法律により182.7km/h(3号玉)のため
182.7(km/h) -> 182,700(m/h) -> 50.75(m/s)

求められた速度を
Mainタブの
Start Speed : 50.75 (m/s)
に入力しましょう。

資料の設定では「130m」撃ちあがるらしいのでワールドに130メートルの棒を用意してみましょう。

太さ1mの棒(130m)

パーティクルの消える場所(起爆場所)が頂点を通り過ぎているのでパーティクルが消えるまでの秒数を設定します。
こちらも資料を参考に
Mainタブの Start Lifetime : 3 -> 頂点の少し前で消滅(起爆)

玉(発射)と星(空中爆発)

Particle Systemは、複数組み合わせてコンボを決めることで「分裂」や「変化」させることが可能です。

花火の最初の打ち上げ部分を「星」と呼びます。
あたらしくParticle Systemを作り「Hosi」と名付けます。

火の粉はたくさん待ってナンボですので、EmissionをBurstにして500個同時に出るようにします。

本物の花火は「幾何学的に火薬が配置されている」ため、ランダムに火が散るのは不自然です。
そこで、既存のメッシュ(モデルデータ)を発射場所として利用します。

ShapeタブをONにします。
Shape : Mesh Type : Vertex -> 頂点から発射
Mode : Loop どの頂点を選ぶか、ランダムではなく規則的に選ぶ
Mesh : Unity組み込みの「Sphere」を指定

より厳密に調整するのはUnityには組み込まれていない「ICO球」のほうが向いているので、余裕があれば Blender等のモデリングソフトから引っ張ってきましょう。 

地上を爆破するのは十分なのでTamaのパーティクルが消えたとき(発射した玉が高く来たら)にHosiが出るようにします。
(花火を空中爆発させます)

「Tama」に戻ります。
Sub EmittersタブをONにします。
Sub Emittersは、複数のParticle Systemを登録して連携できます。
登録枠を増やすため「+」ボタンを押します。

あとは画像のように発動条件をDeath(パーティクル消滅時)にしHoshiを指定します。

このとき警告ウィンドウが出ますので「Yes, Reparent」を選んでください。

要約すると 「パーティクル同士を連携するときは、呼び出し関係を明確にするため、 親子にすることを推奨します。親子にしていいですか?」 となる

駆け足となりましたが、これで「物理定数どおりに数値を入れると花火が再現できる」ことがわかりました。
VRで現実のものを再現するとき、意外とこの「物理通り」のスケール感を出すのは難しいので、しっかりと現実の数値を引っ張ってこられると説得力が増します。

花火に名前をつけよう!

火の名前は「玉名(ぎょくめい)」と呼びます。
ある程度の名前付けの方法論があるため名前から変化や現象がわかるそうです。

より新しい単語、業界独自の要素もあるため、網羅することは困難です。
以下の説明が業界的に正しいかちょっと怪しいところはありますが…

尺玉(打ち上げ)
星(爆破後の炎)
割物(規則的な散らばり方)
牡丹(尾を引かない)
ポカ物(ランダムに散らばる爆破)
小割(多段階爆破)

冠(長く尾を引く)
菊(短く尾を引く)

昇り(尺玉自体に尾を引かせる)

http://www.hanabi-jpa.jp/booklet2016/pdf/hanabi_booklet_h28.pdf


尾を引く残光(トレイル)」や「点滅(スパンコール)」、「多段爆発」など組み合わせると「登竜紅星小割黄蜂紅冠」(略して花火)みたいな必殺技感ある花火も作れます。(これで正しいかは保証しません) 実際は、花火職人の「ここ見てポイント」をピックアップして短い名前になるそうです。

3) まとめ

皆さんも、オリジナル花火を作って、めちゃくちゃ長くって笑える花火の名前に思いをはせてはいかがでしょうか。

参考資料