VFXグラフで揺れながら伸びる黒いもやのようなエフェクトを作ってみました。
VFXシェーダーグラフでUVにノイズを足しています。VFXでパーティクルごとに位相を変えています。
テクスチャ
VFXグラフで煙のエフェクトを作るで作ったテクスチャ画像のコントラストを調節してテクスチャを作りました。
VFXグラフ
寿命と速度をランダムで設定します。
VFXシェーダーグラフでテクスチャを表示します。「Orient: Along Velocity」ブロックで画像の向きが速度に沿ったまま、カメラの方を向きます。
時間によってサイズや色、アルファを変えます。スケールのY軸を大きくして、画像を進行方向に少し伸ばします。時間とともに、スケールのX軸を小さくして、細く消えるようにしています。
VFXシェーダーグラフ
VFXシェーダーグラフでは、Timeノードの値を「Gradient Noise」や「Sine」ノードに入力して波を作ります。直前に値をかけてスピードを調節しています。
揺れの大きさをかけて、UVの横方向に足すことで横に揺らします。
変更したUVを「Sample Texture 2D」に入力します。テクスチャの色と指定の色をかけて、マスタースタックに入力します。
テクスチャや色、スピードや大きさはVFXグラフで指定できます。
テクスチャのUVの縦方向の値を位相としてTimeノードに足すことで、縦方向に進む波を作っています。パーティクルごとに変わる値も足して、パーティクルごとに揺れのタイミングを変えています。
VFXグラフでは、velocity属性のランダムな値を渡しています。
コントラスト
VFXシェーダーグラフでテクスチャのアルファのコントラストを変更しています。
コントラストの値はVFXグラフで計算して渡しています。
「Age Over Lifetime」ノードはパーティクルの年齢を0-1の範囲で出力します。これは、パーティクルが生成されてからの時間を寿命で割った値です。
これを「Sample Curve」ノードに入れて、時間とともになめらかに変わる値を作れます。
「Sample Curve」ノードではだいたい0-1の範囲の値が出力されるようにしています。
時間とともにアルファを下げたときに、コントラストも下がるようにしています。コントラストが高いときでも、ゆっくりと消えるようになります。
コントラストが小さいと、テクスチャの背景が見えるので、Saturateで0-1の範囲に固定して、プロパティの値をかけ、1を足してからVFXシェーダーグラフに渡します。
アルファ
VFXグラフで時間とともに変更するアルファの値が渡されるので、VFXシェーダーグラフでアルファにかけます。
VFXグラフでは「Get Attribute: alpha」を使います。
最後にVFXシェーダーグラフで「Scene Depth Difference」と「Smoothstep」ノードを使い、床と交差した部分に線ができないようにしています。