最近仕事の合間にVFXGraph (Visual Effect Graph)を触ってます。
#madewithunity #vfxgraph #particles #Gif pic.twitter.com/4fDc9kBBQG
— amagi (@amagitakayosi) November 6, 2018
Uniteの発表動画みた時は「おいおいHoudiniかよ?」と思ったけど、今の所は「ノードベースのGPUパーティクルシステム」という感じ。
ベータなのでノードの数も使い勝手もまだまだだけど、それでもサクサクっとおもしろパーティクルアニメーションを作れるので楽しいですね。
この記事では、VFX Graphの基本的な操作方法や、これまでに作ったエフェクトの作成方法を解説します。
まだベータなのでこれから変わるかも。
使い方
VFX GraphはUnity 2018.3からの新機能です。
インストール方法はのたぐすさんのスライド見てください。
Projectタブで Visual Effect
を作成してダブルクリックすると、ノードエディタ的なやつが開きます。
System
はパーティクルシステム全体、 Node
はグラフを構成する要素ですね。
システム内のNodeには Block
を追加して、パーティクルの挙動をコントロールできます。
(以下では ノード
とか ブロック
とも表記します)
ノード画面の基本操作
- ノードorBlockクリック: 選択
- 何もない所でドラッグ: 矩形選択
- 何もない所で、中ドラッグ or
Alt
+ ドラッグ: グラフを移動 - 何もないとこで右クリック: ノードの追加
- ノードを右クリック: ブロックの追加、ノードの削除
キーボードショートカット
A
: 全ノードが画面内に収まるようにズームアウトO
: 原点に戻るF
: 選択中のノードorブロックにズーム[
/]
: 選択中のブロックの前or後のアクティブなブロックを選択- ノードを選択して
Space
: ブロックを追加 Ctrl+D
: 選択中のノードorブロックを削除
Tips
体系化むずいので箇条書きで……
新たにエフェクトを作るには?
Create Node
> System
で何か選ぶ。
Simple Swarm Particle System
を選ぶとカッコいいツブツブが出ます。
VFXGraphで新たにパーティクルシステムを作る方法 pic.twitter.com/uurhMGhzQJ
— amagi (@amagitakayosi) November 16, 2018
パーティクルに力を与えたい
Updateノードに Force
内のブロックを追加すると色々できます。
VFXGraphでパーティクルに力を加える方法 pic.twitter.com/zoHPGxZz4c
— amagi (@amagitakayosi) November 16, 2018
僕のお気に入りは Conform to Sphere
。
パーティクルを引き寄せる球体を作ることができます。
より進んだ使い方は後述。
パーティクルにゆらぎを持たせたい
Updateノードに Turbulance
ブロックを追加しましょう。
Vector Field Force
でも良いけどVector Fieldを自分で作る方法がわからん……。
Inspectorから値を操作したい
Blackboard
からできます。
VFXGraphでBlackboardを使ってパラメーターをInspectorから操作する方法 pic.twitter.com/XjGRlSsyXF
— amagi (@amagitakayosi) November 16, 2018
また、 VFX *** Binder
みたいなスクリプトを使って、Sphere ColliderをVFXにバインドすることもできる。
時間で変化する値を作りたい
Total Time
や Periodic Total Time
ノードを使うと良いです。
Sine Wave
ノードや Remap
ノードを使って、値の動きを調整するといい感じになります。
VFXGraphで時間で変化する値を作る方法 pic.twitter.com/ozvTKHunBz
— amagi (@amagitakayosi) November 16, 2018
ケーススタディ
一応プロジェクトはここで公開してます(コミットログは破茶滅茶だが……)
作例1: リングっぽいの
#madewithunity #vfxgraph #particles #Gif pic.twitter.com/4fDc9kBBQG
— amagi (@amagitakayosi) November 6, 2018
Initializeノードに Position (Circle)
ブロックを追加して、Updateに Conform to Sphere
を追加。
Conform to Sphere
のForceなんかをSine Waveで変化させてるだけです。
作例2: 球体からパーティクル出てるやつ
dancing metal balls #madewithunity #visualeffectsgraph #vfxgraph #particles #gif pic.twitter.com/BGnZp4esBE
— amagi (@amagitakayosi) November 9, 2018
球体を画面中央に向けて Rigidbody.AddForce
しつつ、 VFX Sphere Binder
で初期位置に設定してるだけです。
bindしたSphereは、Blackboardで追加したパラメーター同様にノードとして取得できるので、Initializeノードの Position (Sphere)
に繋いでやると良い。
作例3: 3Dモデルからパーティクル出すやつ
#madewithunity #visualeffectsgraph #vfxgraph pic.twitter.com/KCxs31sTBt
— amagi (@amagitakayosi) November 7, 2018
Point Cacheって奴で出来ます。
メニューから Window
> Visual Effects
> Utilities
> Point Cache Bake Tool
を開き、メッシュを追加して Save to pCache file...
ボタンを押すと、メッシュに対応するポイントキャッシュが作成されます。
あとはPositionみたいなやつにポイントキャッシュファイルを食わせてあげると、パーティクルがメッシュからスポーンするようになる。
パーティクルを3Dモデルに集まらせるやつは Conform to SDF
でやるんだろうけど、今のところ自分でSDFを作る方法はなさそう……?
Forumでみんな「SDF作りたいよ〜」って言ってるのは観測した。
https://forum.unity.com/threads/feedback-wanted-visual-effect-graph.572110/
作例4: パーティクルが球から球へと飛び移っていくやつ
#madewithunity #visualeffectsgraph #vfxgraph #particles #gif pic.twitter.com/JgCU79ICYC
— amagi (@amagitakayosi) November 7, 2018
Spawnノードに Single Burst
ブロックを入れて、InitializeノードでLifetime系のブロックを削除すると、一度生成したパーティクルをずっと飛ばし続けることが出来ます。
あとは Position (Sphere)
と Conform to Sphere
に同じSphereを渡して、 Attraction Force
をSine Waveで変化させてるだけ。
Attraction Force
をマイナスにすることで一瞬ふわっと広がらせるのがミソです。
作例5: 渦
Particle Swirl #madewithunity #vfxgraph #VisualEffectGraph #unity3d #GIF #particles pic.twitter.com/qCfQWaT7YL
— amagi (@amagitakayosi) November 15, 2018
現在のVFX Graphでは、パーティクルに「ある軸にそって回転する力をかける」ことは出来ないのだけど、これを頑張って擬似的に再現した。
円を小さな弧に分割して、それぞれに Conform to Sphere
をかけることで、全体に回転する力がかかっているように見せている。
同じ要領で、回転する炎?みたいなエフェクトも作れる。
Swirl 2 #madewithunity #vfxgraph #VisualEffectGraph #unity3d #GIF #particles pic.twitter.com/gxRaGQ2TQY
— amagi (@amagitakayosi) November 15, 2018
Meshをスポーンさせるやつはまだあんまり触ってないです。 ParticleごとのIDも取得できるみたいなのでコンピュートシェーダー的な表現もできそう?
これからの機能追加に期待ですね。
みんなVFX Graphで遊ぼうぜ〜〜