MSFSのシーナリーに動く煙・炎・霧・水などを追加する方法 / Visual Effect Editorの使い方

ここでは、最低限のステップで簡単なVFXを作り、それをMSFSシーナリーに設置するまでの手順を解説します。
Show this page in English
もくじ
- Visual Effect(VFX)とは?
- MSFS2024との互換性
- 各種ツール類のインストール
- VFXを作る場所
- VFXライブラリ用プロジェクトの作成
- 新しいVFXを生成する
- 編集中のVFXをゲーム画面でプレビューする
- Node Graphの概要
- Emitterブロックでパーティクルの生成方法を決める
- パーティクルの色を変更する・発光させる
- パーティクルのテクスチャを変更する
- パーティクルのサイズを変更する
- パーティクルをランダムに昇らせる
- パーティクルの広がりを徐々に狭める/ベクトルの各要素を個別に操作する
- パーティクルを風で流す/風の影響を再現する
- パーティクルを徐々に透明にする
- パーティクルを徐々に大きくする
- ひとつのVFXに複数のEmitterを置く
- 不要になったVFXを削除する
- VFXを最終調整する
- VFXライブラリのビルド&インストール
- MSFSシーナリーにVFXを設置する
Visual Effect(VFX)とは?

しかし創作の自由度が高い分、ツールの操作方法は複雑で、またツールにはいまだバグも多く、VFXの作成には苦労も伴います。
ここでは下記に貼り付けているFederico Pinotti氏のYouTubeビデオの解説を元にして、ごく簡単なVFXの作成と、MSFSシーンへの設置方法を解説します。
Microsoft Flight Simulator SDK Tutorial - VisualEffect - How to make fire and smoke
YouTubeで見る
MSFS2024との互換性
ここで紹介する手順で作成したVFXは、MSFS2020/MSFS2024どちらでも使用可能です。 MSFS2020のSDKでビルドしたVFXを、そのままMSFS2024のCommunityフォルダーにコピーして使用することができます。 ただしMSFS2020とMSFS2024では、VFXが表示される色や透明度が若干異なります。 どちらでも違和感が無いような色と透明度になるよう、調整が必要です。各種ツール類のインストール
マイクロソフトフライトシミュレーター用のアドオンコンテンツを作るには、まず各種ツール類をパソコンにインストールしてください。詳しくは、下記のページをご参照ください。
VFXを作る場所
VFXは、MSFS SDKにおけるアセットグループ「VisualEffectLib」として作成します。 MSFS SDKで扱う任意のタイプのプロジェクトの中に作ることができます。 しかし作成したVFXを、例えばシーナリーの中に設置するには、そのVFXがCommunityフォルダーにインストール済みである必要があります。 3DモデルのModelLibと異なり、プロジェクトの中にVFXを作成して、すぐさまそれを同じプロジェクトのシーナリーの中に設置することはできません。このためVFXは、独立したVFXライブラリ用プロジェクトとして作成し、それを他のプロジェクトから参照する形にするのが良いと思います。 このようにすれば、ひとつのVFXを複数のシーナリープロジェクトで利用するのも容易になります。
MSFSアドオンコンテンツ用のプロジェクトの作り方
VFXライブラリ用プロジェクトの作成
作成するVFXライブラリのパッケージ名を考えてください。 MSFS SDKでは、パッケージの命名規則が厳密に決められています。 規則に従った正しいパッケージ名を考えてください。(追記:MSFS 2024 SDKのドキュメントによると、VFXのパッケージ名は <company>-vfx-<name> とつけるのが正しいようです。今回の場合は"Vfx-Fire_and_Smoke"と命名するのが正解です。)
パッケージ名が決まったら、MSFS SDKを使って、中身が空のプロジェクトを作成します。
MSFSアドオンコンテンツ用のプロジェクトの作り方

開発中のVFXをゲーム画面上で確認するには、MSFSの構造上、その発生点となるSimObject(飛行機)が必要です。 また、アクティブポーズでゲームを一時停止すると、VFXも停止してしまいます。 このため、空港の駐機スポットを指定してフリーフライト/ワールドマップ画面を起動します。
ここで選択する飛行機は、セスナなどの小さい機体を選んでください。

Projects Folder欄には、プロジェクトを保存するフォルダーを指定します。 大量のデータを何度も読み書きするので、SSDではなく、大容量のハードディスクを使うのがおすすめです。
Project Name欄には、開発者名の部分を除いたプロジェクト名を指定します。今回の例では"Scenery-vfx-Fire_and_Smoke"としました。
Default creator name欄には、開発者の名前を入れます。あなたの名前、ペンネームなどを指定します。
Default company name欄には、制作会社名を入れます。個人開発者の場合はDefault creator name欄と同じで良いでしょう。
そして画面右下の[Create new project]ボタンをクリックします。 するとProjects Folder欄で指定したフォルダーの下に、"Scenery-vfx-Fire_and_Smoke"という名前のプロジェクトフォルダーが生成されます。


多分ここで[VisualEffect]を選んでも良いと思いますが、筆者は未検証です。
[Custom]をクリックすると、その下に次のような項目が現れます。
Display title欄には、このパッケージの表示名を指定します。 これはMSFSのマーケットプレイスや、ツール"MSFS Addons Linker"などにおいて、あなたのパッケージのタイトルとして表示されます。 図の例にあるように、だれが見てもすぐにパッケージの中身がわかるようなタイトルを入力してください。
Company name欄には、制作会社名を入れます。個人開発者の場合は、あなたの名前やペンネームなどを指定します。
Package name欄には、命名規則にのっとって決めたパッケージ名を指定します。 プロジェクト名に合わせて"scenery-vfx-fire-and-smoke"としました。
Content-Type欄のドロップダウンリストで、パッケージのタイプを指定します。 VFXのライブラリを作る場合は"MISC(その他)"を指定します。
そして画面右下の[Next]をクリックします。

Asset group name欄には、アセットグループの名前を指定します。 ここで指定した名前が、Objects画面を通してシーナリープロジェクトから参照されるときのVFXパッケージ名になります。
Asset type欄には、アセットグループのタイプを指定します。 ここでは"VisualEffectLib"を選択します。
そして画面下の[Create]をクリックします。

Inspector画面の各項目の指定方法については MSFSアドオンコンテンツ用のプロジェクトの作り方 のページもご参照ください。
MSFSアドオンコンテンツ用のプロジェクトの作り方
新しいVFXを生成する


Visual Effect Editor画面がメイン画面です。
Inspector画面は、VFXを構成する各要素の内容をチェック・更新するための画面です。 Project Editorから開くInspector画面とは別のものです。
Templates/Instances Debugger画面は、VFXをデバッグするために使用します。
Node Graph画面は、VFXの内部構造をグラフ表示するもので、VFXを編集するために使用します。
これらのウインドウは、Visual Effect Editor画面のViewメニューで、表示/非表示を切り替えることができます。 誤ってウインドウを閉じてしまったときは、ここから開いてください。
Visual Effect Editorには実に多くの機能と操作方法があり、ここですべてを解説することは不可能です。 より詳しい情報については、MSFS SDKドキュメントの下記のページで読めます。
THE VISUAL EFFECTS EDITOR (MSFS 2024 SDK Documentation)
THE VISUAL EFFECTS EDITOR (MSFS SDK Documentation)

なお、ひとつのVisualEffectLibの中に、複数のVFXを作ることができます。 ひとつのVisualEffectLibに、様々な大きさや色合いのVFXを作っておき、シーナリーの各所に配置することができます。


Node Graph画面でマウスの右ボタンを押しながらドラッグすると、グラフの表示位置を変更することができます。 Node Graph画面でマウスのスクロールホイールを回すと、グラフを拡大・縮小することができます。

Inspector画面のProperties - Name欄に、新しいVFXの名前を入力します。 ここを入力しないと、別のプロジェクトからこのVFXを参照することができません。

編集中のVFXをゲーム画面でプレビューする
編集中のVFXをゲーム画面の中に表示させて、リアルタイムで編集結果を確認することができます。 ただし、編集中のVFXは、ゲーム画面の中にあるSimObjects(例:飛行機)にアタッチする必要があります。一方、完成したVFXは、MSFSシーナリーの好きな場所に置くことができます。

SimObjects欄で、VFXをアタッチ(生成)するオブジェクトを選択します。 通常、フリーフライト/ワールドマップ画面を起動するときに選択した飛行機が選ばれています。 そのままで問題ありません。
ContactPoint欄で、VFXをアタッチする場所を選択します。 Propellerを選択すると、飛行機のプロペラの先端にVFXが表示されます。
Offset欄で、ContactPointからVFXまでの距離を指定します。 例えば3番目のボックスに5と入れると、プロペラの先端の5m先にVFXが表示されます。
そして[Spawn]ボタンをクリックします。

ひとつのVisualEffectLibアセットグループの中に複数のVFXを作ったときは、Visual Effect Editor画面で、それぞれのVFXを選択して[Spawn]ボタンをクリックしていくと、複数のVFXを同時にプレビューすることもできます。

[Spawn]ボタンをクリックすれば、消去したVFXを再度表示することができます。
Node Graphの概要

VisualEffectブロックは、VFXの基本情報を保持しています。
Emitterブロックは、パーティクルの生成方法を決定します。
Initブロックは、パーティクルの初期値を保持しています。
Updateブロックは、パーティクルのパラメーターを、時間経過などに従って変化させる方法を決定します。
Outputブロックは、パーティクルをゲーム画面上で表示する方法を決定します。
各ブロック内のパラメータには、紫色の箱が接続されています。 この紫色の箱を「ノード」と呼びます。 ノードには、数値、数式、乱数、ゲーム内のパラメーター、パーティクルのパラメーターなど多様なものが準備されています。 ノードを組み合わせていくことで、複雑なVFXを作ることができます。
より詳しい情報については、MSFS SDKドキュメントの下記のページで読めます。
THE VISUAL EFFECTS EDITOR (MSFS 2024 SDK Documentation)
THE VISUAL EFFECTS EDITOR (MSFS SDK Documentation)
Emitterブロックでパーティクルの生成方法を決める

- EmitInLocalSpace
- パーティクルの位置と速度をワールド空間:ECEF(地球中心、地球固定)(チェックOFF)で表すか、ローカル空間(チェックON)で表すかを選択します。 ベクトルを使ってパーティクルの移動を制御するときに、ここの指定で動く方向が変化します。 例えば立ち上る煙や流れ落ちる水などのパーティクルを、ベクトルを使って操作する場合は、ここにチェックを入れます。 パーティクルが予想外の方向に流れて行ってしまう時は、ここのチェックをON/OFFしてみてください。
- TimeEmission
- パーティクルが生成されつづける時間(sec)を指定します。 ここを-1にすると、永久にパーティクルが生成されつづけます。
- Delay
- ゲームの中でVFXが生成されてから、パーティクルが生成開始されるまでの時間(sec)を指定します。 ここを0にすると、ゲームスタートと同時にパーティクルが生成されます。
- Capacity
- 最大でいくつのパーティクルを生成するかを指定します。 ここを大きくすると、より大きな、あるいは密度の高い煙や水などを表示することができますが、ゲームの負荷が上昇します。
- MaxDistanceEmission
- カメラ(視点)がVFXに何メートル近づいたらパーティクルを生成するかを指定します。 ここを大きくすると、遠くからでもVFXが見えるようになりますが、ゲームの負荷が上昇します。
- RateTypeとRate
- パーティクルの放出速度を指定します。 RateTypeに"Time"を指定すると、パーティクルは「Rate 個/秒」の速度で生成されます。 RateTypeに"Distance"を指定すると、パーティクルは「Rate 個/メートル移動」の速度で生成されます。 VFXが1メートル移動するごとにRate個のパーティクルが生成されます。 ここを大きくすると、より密度の高い煙や水などを表示することができますが、ゲームの負荷が上昇します。
Emitter (MSFS 2024 SDK Documentation)
Emitter (MSFS SDK Documentation)
パーティクルの色を変更する・発光させる
パーティクルの色はRGBA値で自由に設定できます。 また、煙など本来発光していないものでも、ごく少量の発光色を加えることで、夜に周囲の建物の光に照らされているような雰囲気を再現できます。



Outputブロックの詳細については、MSFS SDKドキュメントの下記のページで読めます。
Output (MSFS 2024 SDK Documentation)
Output (MSFS SDK Documentation)
パーティクルのテクスチャを変更する






Init (MSFS 2024 SDK Documentation)
Init (MSFS SDK Documentation)

Update (MSFS 2024 SDK Documentation)
Update (MSFS SDK Documentation)



パーティクルのサイズを変更する

別の方法として、Initブロックに"Scale"パラメーターを追加し、x, y, z 方向の拡大率を指定する方法もあります。 しかしScaleパラメーターの x, y, z にそれぞれ異なる値を指定しても、結果はx値で指定される等倍拡大・縮小になるようです。
パーティクルをランダムに昇らせる
炎の煙のように、パーティクルをランダムな方向に広がりながら上昇させてみます。 パーティクルのVelocityパラメーターの x, z軸方向に、ランダム値を加算します。

Vector3ノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Types]-[Vector3]を選びます。

RandomValueノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Random]-[RandomValue]を選びます。
RandomValue (MSFS 2024 SDK Documentation)
RandomValue (MSFS SDK Documentation)

パーティクルごと、軸ごとに乱数のシード(たね)を変えないと、全てのパーティクルが同じ方向に進んでしまいます。
GetParticleAttributeノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[GetParticleAttribute]を選びます。

GetParticleAttribute (MSFS 2024 SDK Documentation)
GetParticleAttribute (MSFS SDK Documentation)
パーティクルの広がりを徐々に狭める/ベクトルの各要素を個別に操作する
Splitノードを使うと、ベクトルを分解して、各要素を個別に操作することができます。 上で設定した、煙のランダムな方向の動きを、パーティクルの上昇に伴って徐々に狭めることで、よりリアルにします。各フレームごとに、各パーティクルのvelocityベクトルを取り出し、x値とz値を少しずつ小さくします。

つづいて新たに[Types]-[Vector3]ノードを設置し、これをUpdateブロックのVelocityに接続します。

y軸に指定している値は、時間とともにパーティクルの上昇速度を少しずつ増やしています。 右図の例の1.002では、各フレームごとに、パーティクルの上昇速度が0.02パーセントづつ大きくなっていきます。
Multiplyノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Arithmetic]-[Multiply]を選びます。
Multiply (MSFS 2024 SDK Documentation)
Multiply (MSFS SDK Documentation)

Splitノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Types]-[Split]を選びます。
Split (MSFS 2024 SDK Documentation)
Split (MSFS SDK Documentation)

GetParticleAttributeノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[GetParticleAttribute]を選びます。
GetParticleAttribute (MSFS 2024 SDK Documentation)
GetParticleAttribute (MSFS SDK Documentation)
パーティクルを風で流す/風の影響を再現する
WindDirectionノードを使うと、VFXを設置した場所の風向・風速を得ることができます。 上で解説したSplitノードを使って、ここからx, zベクトルを取り出し、各パーティクルのvelocityに加算します。
x, z軸にMultiplyノードを接続し、各フレームごとにパーティクルのベクトルに加算する値を計算します。 ここで乗算する値(右図の例では0.001)は、作成したVFXの、パーティクルのサイズや移動・上昇速度に合わせた調整が必要です。
WindDirectionノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[WindDirection]を選びます。
WindDirection (MSFS 2024 SDK Documentation)
WindDirection (MSFS SDK Documentation)

ただし、このグラフでは正確に風向・風速の影響を反映することはできません。 より正確に風向・風速を反映するには、より複雑なグラフを作る必要があります。
パーティクルを徐々に透明にする
時間経過に従って、パーティクルを徐々に透明にします。
Colorパラメーターに接続されているVector4ノードのw値に、BezierCurveノードを接続します。
BezierCurveノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Maths function]-[BezierCurve]を選びます。
BezierCurve (MSFS 2024 SDK Documentation)
BezierCurve (MSFS SDK Documentation)

グラフは横軸が入力(時間経過)、縦軸が出力(不透明度)です。 値はともに0~1の範囲を取ります。 今回時間とともに若干透明度が低下し(色が濃くなり)、その後徐々に透明になるようなグラフにしました。 煙を作る場合は、右図のように、ピークの不透明度を0.1程度に抑えても、十分に濃い色になります。
[Add new point]ボタンを押して、グラフをクリックすると、そこにポイントが設置できます。 ポイントをドラッグすると、位置を移動することができます。

GetParticleAttributeノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[GetParticleAttribute]を選びます。
GetParticleAttribute (MSFS 2024 SDK Documentation)
GetParticleAttribute (MSFS SDK Documentation)
パーティクルを徐々に大きくする
時間経過に従って、パーティクルのサイズを徐々に大きくします。
つづいてUpdateブロックのSizeパラメータに、Addノードを接続します。 そしてAddノードのy値に、パーティクルの初期サイズを入力します。
Addノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Arithmetic]-[Add]を選びます。
Add (MSFS 2024 SDK Documentation)
Add (MSFS SDK Documentation)

Multiplyノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Arithmetic]-[Multiply]を選びます。 GetParticleAttributeノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[GetParticleAttribute]を選びます。
Multiply (MSFS 2024 SDK Documentation)
Multiply (MSFS SDK Documentation)
GetParticleAttribute (MSFS 2024 SDK Documentation)
GetParticleAttribute (MSFS SDK Documentation)
ひとつのVFXに複数のEmitterを置く


Node Graph画面では、"Duplicate"メニューでブロックやノードをコピーすることができます。 しかしコピーした「ブロック」は正しく動作しないことがあるようです。 ブロックは常に新規追加してください。
なお、ブロック同士を接続した直後は、Node Graph画面で接続線が表示されません。 Visual Effect Editor画面で一旦別のVFXをクリックした後、元のVFXをクリックすると、接続線が表示されます。
VFXを最終調整する

デザインの調整
密度を上げるには、EmitterブロックのRateを増加します。 しかし単にRateだけを増加するとVFXが途中で途切れるようになるので、EmitterブロックのCapacity、あるいはInitブロックのLifetimeも増やす必要があるかもしれません。
煙などがより高くまで昇るようにするには、InitブロックのLifetimeを増加します。 この場合もEmitterブロックのCapacityも増やす必要があるかもしれません。
煙などを大きくするには、InitブロックのSizeおよびUpdateブロックで大きさをコントロールしているパラメーターを増加します。 これに合わせて上昇/下降速度を決めているパラメーターの調整も必要になるかもしれません。
逆に上昇/下降速度を決めているパラメーターを操作すると、密度やLifetimeの調整も必要になります。
このようにVFXの挙動は、多くのパラメーターが相互に干渉して実現されています。 一つを変えると、それに伴っていくつかの別のパラメーターの調整も必要になります。 時間をかけて納得のいくVFXを完成させてください。
性能チューニング
VFXのデザインが完成したら、性能チューニングを行いましょう。 Emitterブロックの、Capacity、MaxDistanceEmission、Rateの3つを、可能な限り小さい値に変更します。 場合によっては、この変更に伴って、パーティクルの移動速度や移動方向の調整も必要になります。 Rateを下げたときは、パーティクルの透明度を下げて色を濃くするとごまかせる場合もあります。 VFXを設置したMSFSシーナリーが完成したら、実際に上空を飛行してみて、ゲームの性能が落ちていないか確認してください。
VFXライブラリのビルド&インストール


なお、プロジェクトフォルダの[Packages]-[(パッケージ名)]フォルダの下に、"layout.json"と"manifest.json"が生成されていない場合は、ビルドに失敗しています。
MSFSシーナリーにVFXを設置する

VFXを設置したいシーナリープロジェクトをMSFS SDKで開きます。 そしてScenery Editor画面から[View]-[Objects]画面を開きます。 Objects画面の"Object type"欄で"VFX"を選びます。 "Packages"欄で、上で作成した"VisualEffectLib"タイプのアセットグループ名を選びます。
すると"Objects"欄に、アセットグループの中に作成したVFXの一覧が表示されます。 設置したいVFXを選んで、[Add]ボタンをクリックすると、Scenery Editor画面とゲーム画面にVFXが現れます。
なお、Scenery Editor画面に表示されるVFX名は、MSFSを再起動すると、すべてただの"VFX"に変わってしまい、どのVFXを選択したのかわからなくなってしまいます。 しかし、Scenery Editor画面の右クリックメニューで"Rename"しておくと、ここで入力した名前が保持されます。 VFXを設置したら、すぐにその場で元の名前に"Rename"しておくことをお勧めします。
注意:
新しいVFXを生成した時に、VisualEffectブロックのProperties - Name欄にVFXの名前を入力し忘れると、この画面の"Objects"欄に空白行が表示されます。 その空白行をクリックしてVFXを選択することはできますが、VFXを複数作っている場合は、それらの区別をつけることができません。

VFXが好きな場所に設置できたら、Scenery Editor画面で、左下にある"Save Scenery"ボタンをクリックして、シーナリーを保存します。 そしてProject Editor画面で"Build All"をクリックしてプロジェクトをビルドします。 以上で、新しいVFXの設置が完了しました。


