VisualEffectGraphのサンプルを眺めてみる
VisualEffectGraphのサンプルを探す
いきなりですが、VisualEffectGraphのサンプルがScriptableRenderPipelineのリポジトリのvfx/2018.3
ブランチのTestProjects
配下に存在するので、中を開けて使えそうなTipsを掘り出してみようと思います。
あとフォーラムにもいくつか有志が作ったエフェクトがあるようです。
Particleを床に敷き詰める
適当な範囲で床にパーティクルを敷き詰める方法ですが、RandomNumberとAppendVectorで初期位置を決めて敷き詰めるだけです。 AABoxとかは使わない。 また、Remapなどを併用すると簡単にサイズを変えることができます。
これとノイズを併用するとこんな事ができます。Lineの波、的な…
Graphはこんな感じです。
パーティクルと指定位置の距離を取る
生成した各Particleの位置を取るには、AttributeのPositionを参照します。
座標同士の距離を取るには、Distanceを使います。
利用できるAttributeには例として、以下のようなものがあります。(ソース)
主にParticleの位置、速度、色、サイズ、経過時間、残り時間、回転などです。
他にはLineOutputを利用する場合のみには線の向かう方向、パーティクルの前フレームでの位置、TextureSheetAnimationの指定位置などがあるようです。
メッシュの形にParticleを出す
任意のメッシュの表面や体積などからパーティクルを放出するには、Point Cacheを利用します。 先日の剣の消失エフェクトなどもこれで作ってます。
あと剣の出現/消失エフェクトを付けた。これはVFXGraphをTimelineから動かしてます。 pic.twitter.com/E2UsPrKodx
— 40 (@dr40san) October 30, 2018
今回はHoudini使いによく焼かれたり切り刻まれたりするPigHeadパイセンにご登場いただきます。
メッシュをFBXか何かでUnityへインポートしたあと、Window/Visual Effects/Utilities/Point Cache Bake Tool
を開きます。
Save to pCache file...
を押すと、Unity用のPoint Cacheアセットを出力することができます。これをVFXEditor内で使うには、"Point Cache"ノードと、"Set Position from Map"ノードを利用します。
Sci-Fi Pig...
ここで作成したPoint CacheはUnity専用で現状他DCCでは利用できませんが、エクスポートツールの実装が予定されいるようです。
とりあえずここまで。
次はVectorFieldやDistance Fieldあたりの焼き方を模索しようかなと思います。
HDRenderPipelineを使わずにVisualEffectGraphをインストールする
本記事の内容
VisualEffectGraphがPreviewに入ったみたいですね。 これをプロジェクトに使いたいなーと思っていたのですが、デフォルトだとHDRenderPipelineを入れないと動かないです。 ただHDRenderPipelineを入れちゃうと、それに対応しているシェーダーしか使えなくなります。 流石にそれは嫌だ!ということで、HDRenderPipelineを設定せずにVisualEffectGraphの機能を使う方法を見つけたので、それについて書きたいと思います。
また、VisualEffectGraphはPreviewなので、本記事に書かれている内容は情報が古い可能性がありますので注意してください。
あと普通に動かすだけなら、のたぐす氏が丁寧なインストール方法を解説されているので、そっち見たほうがいいかも。
環境
* Unity 2018.3.0b7 * ScriptableRenderPipeline - [release/2018.3](fde2b7099496fd5ad4467c3e12fbcd95c3505469)
前準備
- Githubから必要なパッケージを取得しておきます
git clone https://github.com/Unity-Technologies/ScriptableRenderPipeline.git --branch release/2018.3
- プロジェクトを新規作成、または既存のものをUnity 2018.3で開けるようにしておきます
インストール
Packageをインストールする
CloneしたScriptableRenderPipelineから、プロジェクトのPackagesへ以下の項目をコピペします
* com.unity.render-pipelines.core * com.unity.render-pipelines.high-definition * com.unity.shadergraph * com.unity.visualeffectgraph
HDRenderPipeline思い切り入れとるやん…って感じなんですが、 VisualEffectGraph側からHDRenderPipelineヘ依存してしまってるようなので、基本機能は使いませんが、入れます。 開発が進んだら、依存外れてくれるって信じてます(大声)
Unity側の設定
ProjectSettings/VFXを開きます。
Packages/com.unity.visualeffectgraph/Shaders/RenderPipeline/HDRP
のHDRP
をLegacy
に書き換えます。
書き換えたら保存してプロジェクトを開き直します。
シェーダーの修正
Packages\com.unity.visualeffectgraph\Shaders\RenderPipeline\Legacy\VFXCommon.cginc
がバグってるので、以下のように修正します
float VFXSampleDepth(float4 posSS) { //return _CameraDepthTexture.Load(int3(posSS.xd, 0)).r; return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, int4(posSS.xy, 0,0)).r; }
多分これであってるとおもうけど、違ったら教えてください。
修正したら、プロジェクトを開き直します。
Visual Effectsの作成
Create/Visual Effects/Visual Effect Graph
を作成して、動いたら成功です!