バーチャル思考実験室

基本的にTwitterに書き捨てたものを拾い上げて整理してます。

パーティクルライブ・パリピ砲 作成の基礎知識について

f:id:fleycham:20200531144520p:plain
優勝したりなどする
この記事ではVRChatにおいて「パーティクルライブ」や「パリピ砲」と呼ばれている、アバターから出せる演出・エフェクトについての基礎的なところを説明します。
順を追った制作過程の解説ではなく「作り方がわからない」という人たちが何を調べて実践するべきなのか、その目安になる程度の情報まとめです。

基礎事項とよく聞かれることへの答え

[2019/10/5追記]
質問を受けたので基礎事項の9と10を追加しました。

1.アバターからどうやって出すの?

これはアニメーションオーバーライドやエモートスイッチといった機構で小物をON/OFFするのと全く同じです。
出したものに演出がついているといったイメージです。
アニメーションオーバーライドやエモートスイッチの実装については以下の記事参照。
アニメーションオーバーライドを入れてみよう!!(物・手編) | ケーキのPC情報集会所
【VRChat】EmoteSwitch V3(エモートスイッチ)使ってみた!! | ケーキのPC情報集会所

2.どうやって演出を付けるの?

これには大きく分けて2通りのやり方があります。
アニメーション(及びアニメーターコントローラー)によって制御する方法と、Particle SystemのStart Delayのみで制御する方法です。
この二つの違いについては後述します。
ぶっちゃけこの「演出を付ける」という工程が全てなので別記事で詳しく書こうかなとは思ってます。

3.どうやってワールドに固定しているの?[追記2020/05/31]

演出をワールドに固定するには2通りの方法があります。
「Fixed Joint」を用いる方法と有料アセットである「Final IK」を用いる方法です。
日本人では「Fixed Joint」を用いる方法が多いように思います。
Fixed Jointを使用したワールド固定については以下の記事参照。
アイテムをアバターから切り離しワールド固定にする方法(パーティクル不使用版)【VRChat技術情報】 - VRChatパブリックログ
[追記事項]
ワールド固定機構をureishiさんがBOOTHで配布されていたので載せておきます。
使い方の説明も内蔵されていたので使いやすいかと思います
https://booth.pm/ja/items/1139667
(BOOTHの方なくなったみたいです。)
[追記事項2]
Unity2018になり「Constraint」を使用した方法が安定するようです。
こちらは向日葵。さんがBOOTHで公開しています。
ConstraintWorldFixed-V1.1 - 夏空の下、ひまわり畑で。 - BOOTH

4.歌詞はどうやってるの?

こちらは素材を用意する時点で2つのものに分かれます。
「平面的な歌詞画像」を作成してそれを出す方法と「立体の歌詞モデル」を作成する方法です。
平面的な画像の作成についてはお絵かきツールの使い方を調べてください。
立体の作成については以下の記事参照(私はペイント3D派です)
【Blender】3Dな文字の作り方【テキスト】
ペイント3Dで立体ロゴを作る(文字編) | Microsoft『ペイント』『ペイント3D』の使い方入門

作成した歌詞をどのようにして出しているのかは主に2種類で、「メッシュオブジェクト」で出す方法と「パーティクル(メッシュパーティクル)」で出す方法です。
どちらが良いかは個人の経験に基づくものが大きいので、後日それぞれの利点や欠点をまとめた記事を出します。

f:id:fleycham:20190909153123p:plain
左:メッシュオブジェクト 右:メッシュパーティクル

5.音はどうやってだしてるの?[追記2019/10/23][追追記2020/9/21]

MP3やWAVといった形式のオーディオファイルをUnityのプロジェクト内に入れ、それをScene上に配置することでAudio Sourceコンポーネントがつくので、そのオブジェクトをアクティブにしたら音が流れます。

f:id:fleycham:20190909160547j:plain
オーディオファイル
f:id:fleycham:20190909160615j:plain
ドラッグ&ドロップでSceneに配置
[追記事項]
(いつ頃のだったか忘れましたが)アップデートによりAudio Sourceコンポーネントと同時に「VRC_Spatial Audio Source」というコンポーネントがつくようになりました。
こちらのコンポーネントによってオーディオの聞こえる範囲を制御することになりますが、挙動があまり安定しなかったり仕様を把握しきれていないところがあるので情報の精査ができたら纏めます。
[追追記事項]
Spatial Audio Source について書くのを完全に忘れていたので簡易的に機能説明をします。
Gain:音の大きさを弄る値
Far:音の届く範囲を弄る値(多分距離はメートル。半径か直径かは試してないです。)
以下Advance Options内に格納
Near:音の減衰が開始する距離
Volumetric Radius:音源を点音源ではなく広範囲の発生源から出力するように見せかけるための値(基本弄らないです)
Enable Spatialization:3D空間における音の減衰を有効化する項目です。これのチェックを外すと範囲内なら全て均一に音が聞こえます。
Use AudioSource Volume Curve:上記のAudio Sourceコンポーネントにて設定した減衰カーブを適応する項目です。
f:id:fleycham:20200921022743p:plain
VRC_Spatial Audio Source

基本的に自分はFarの項目を大きめの値に設定して、Enable Spatializationのチェックを外して運用しています。
音源の位置が明確にある人はチェック外さなくていいかもしれません。

6.アニメーションでどうやって作るの?

2で書いた作り方の詳しい工程です
Unityにはアニメーションクリップとアニメーターコントローラーというものがあります。
それぞれプロジェクトフォルダ上で右クリックから生成できます。

f:id:fleycham:20190909162505p:plain
アニメーションクリップとアニメーターコントローラー
f:id:fleycham:20190909162612j:plain
それぞれの生成方法

本来はアニメーターコントローラー内で様々なアニメーションクリップを遷移させるものですが、VRChatにおいては単一のアニメーションを再生する装置だと思ってください。
例えるならアニメーションクリップがCDでアニメーターコントローラーがCDプレイヤーです。
アニメーターコントローラーを適当なGameObjectにつけることでアニメーションの再生装置にすることができます。

f:id:fleycham:20190909164233p:plain
アニメーターコントローラーによって再生装置になったやつ

アニメーターコントローラーはHierarchyでそれ以下の階層にあるもの対して指示を出すことができます。
時間を指定して挙動を個別に制御することで音に合わせた演出を作ります。
制御の仕方については下の「パーティクルライブの素」の作り方で解説します。

7.パーティクルだけでどうやって作るの?

まずParticle SystemをSceneに作成しましょう。
Hierarchy上で右クリックをしてEffectからParticle Systemを選択します。

f:id:fleycham:20190909171028p:plain
Particleの作り方

Particle SystemにはDelay Timeという項目があり、その項目を設定することでパーティクルのオブジェクトがアクティブになってから粒子が発生するまでの遅延時間を指定できます。

f:id:fleycham:20190909180457j:plain
ParticleのDelay
これを個別に設定することで同時にアクティブになったParticle Systemから順次粒子が発生して音とタイミングを合わせた演出を作ることができます。
※このやり方は個人的には推奨できません(確認がめんどくさいのと相対時間で管理するのが向いてなかったので)

8.パーティクルはどうやって作ってるの?

基本的にパーティクルは触って覚える感じです。
設定できる項目がかなり多いので公式のドキュメントを読んだり、アセットやBOOTHにあるものを触って設定の変更が及ぼす影響を確認して覚えましょう。
パーティクルシステム - Unity マニュアル
最初はこっちのページが見やすいかも。
その1 Unityのパーティクル「Shuriken」


9.背景はどうやって変えてるの?[追加2019/10/05]

球体(Sphere)や箱(Cube)のモデルを用意して、Blender等を使って面の向きを内側に反転させます(「Blender 面 反転」とかで検索したらやり方出てくるはず。)
面反転させたモデルをUnityで大きくしてユーザーを覆うような形にして配置します。
背景にしたい画像やシェーダーを用意してモデルに適用したら、背景書き換えを行っているかのように見えます。
個人的にはCubeMap系の素材を利用できるシェーダーが使いやすいです。

10.視界揺らし(視界ハック、視界ジャック)の演出はどうやってるの?[追加2019/10/05]

9で記載したユーザーを覆うモデルに視界エフェクトがかけられるシェーダーを適用するとできます。
原理については細かいことは省きますが、BOOTHに置いてあるものの例だとこれです。
パリピシェーダーv11【取扱注意】 - Reimhakのアセット置き場 - BOOTH
他にもScreenFX系のシェーダーが海外Discordで配布されていたりします。

11.作ったアニメーションの確認めんどくさくないですか?[追加2019/10/23]

おきゅたんBotさんが、任意のタイミングからオーディオとアニメーションを同期して再生してくれる素晴らしいものを公開してくださってるので使いましょう。
AnimationTimeController 音にあわせてアニメーションを調整 - おきゅまーと - BOOTH
(以下使うときのTips)
Hierarchyの位置に依存しないので、再生するオーディオとアニメーターを適切に指定すれば適当に作ったGame Objectにコンポーネントを付加して使用できます。
Unity上部にある一時停止ボタンを押した状態で再生し、その後一時停止を解除するのが比較的安定して挙動する感じがあります。

「パーティクルライブの素」を作る

上記に書いた基礎的な事項を踏まえたうえでとても簡略化した演出の素となるものを作ります。
Unityのプロジェクト内に
・オーディオファイル
・アニメーションクリップ
・アニメーターコントローラー
を用意します。

1.Hierarchyに演出の親オブジェクトを作成する

Hierarchyで右クリックのCreate SystemからGameObjectを生成します。
f:id:fleycham:20190909184301p:plain
生成したGameObjectに基礎事項の7でやったようにアニメーターコントローラー、アニメーションクリップの順でドラッグ&ドロップします。

f:id:fleycham:20190909185019p:plain
こんな感じ

2.演出用のオブジェクトとパーティクルを生成する

GameObjectの上で右クリックをして、適当なオブジェクト(今回はCube)とParticle Systemを生成してください。
ついでに用意したオーディオファイルもドラッグ&ドロップでGameObjectの下に入れておきましょう。

f:id:fleycham:20190909190730p:plain
Cubeの作成
f:id:fleycham:20190909190956p:plain
Particleの作成

3.アニメーションウィンドウを開く

Unityの上のWindowタブからAnimationを選択することでアニメーションの編集が可能となるウィンドウを開くことができます。

f:id:fleycham:20190909192641p:plain
WindowタブのAnimation
f:id:fleycham:20190909193039p:plain
アニメーションウィンドウ

4.アニメーションの制作をする

アニメーションウィンドウを開いた状態でGameObjectを選択し、ウィンドウ内の赤い丸ボタンを押すことで録画状態になります。
録画状態で下層のオブジェクトのComponentの値を変更することによって、アニメーションが再生されるとそのフレームでそのような値になるようなキーフレームが生成されます。
試しに0フレーム目と10フレーム目にCubeのScaleの値を登録しましょう。
Xの値を0フレーム目に10、10フレーム目に20にしました。

f:id:fleycham:20190909195702p:plain
0フレーム目
f:id:fleycham:20190909195721p:plain
10フレーム目
こうすることで0フレーム目から10フレーム目にかけて徐々にオブジェクトの大きさが変化していきます。
Particle Systemに関しても同様にON/OFFを切り替えたり設定を変更することができます。
基本的にはこれが演出作成の基礎にしてほぼ全てです。
制御するオブジェクトを増やして音に合わせて位置やマテリアルの設定を変更して演出を作ります。

そして、このGameObjectをアバター内に入れてアニメーションオーバーライドやエモートスイッチでアクティブにすることで自動的にアニメーションが流れるという仕組みです。

あとがき

「作り方」についてはまず作ってる人が少ないうえに我流で道がほぼ整備されてないので、正直「作るために知っておくべきこと」をまとめた方が有用かなと思って記事書きました。
僕がパーティクルライブの作り方を書くとしたら
①ハードコアに合わせて半年くらいビームを撃ってVRCで遊ぶ
②パーティクルライブが作れるようになってる
って感じです。