• 記事をシェア
  •  
  •  
  •  
  • B! 
  •  

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

MSFS SDKに内蔵されているVisual Effect Editorを使うと、マイクロソフトフライトシミュレーター用のシーナリーに、動く煙・炎・霧・水などを追加することができます。 シーナリーのリアリティが増します。
ここでは、最低限のステップで簡単なVFXを作り、それをMSFSシーナリーに設置するまでの手順を解説します。

Visual Effect(VFX)とは?

マイクロソフトフライトシミュレーターにおけるVisual Effect(VFX):視覚効果とは、テクスチャを貼り付けたパーティクル(粒子)をゲーム画面内に発生させる機能です。 パーティクルの色や大きさ、発生頻度、数などを自由に指定することができます。 パーティクルにアニメーションするテクスチャ(Atlasテクスチャ)を貼り付けて、より複雑な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を複数のシーナリープロジェクトで利用するのも容易になります。

VFXライブラリ用プロジェクトの作成

作成するVFXライブラリのパッケージ名を考えてください。 MSFS SDKでは、パッケージの命名規則が厳密に決められています。 規則に従った正しいパッケージ名を考えてください。
ただしVFXのライブラリを指定する命名規則は決められていません。 今回はシーナリーの命名規則に準じて"Scenery-vfx-Fire_and_Smoke"としました。
(追記:MSFS 2024 SDKのドキュメントによると、VFXのパッケージ名は <company>-vfx-<name> とつけるのが正しいようです。今回の場合は"Vfx-Fire_and_Smoke"と命名するのが正解です。)
パッケージ名が決まったら、MSFS SDKを使って、中身が空のプロジェクトを作成します。
PC まずMSFSのフリーフライト/ワールドマップ画面を起動します。
開発中のVFXをゲーム画面上で確認するには、MSFSの構造上、その発生点となるSimObject(飛行機)が必要です。 また、アクティブポーズでゲームを一時停止すると、VFXも停止してしまいます。 このため、空港の駐機スポットを指定してフリーフライト/ワールドマップ画面を起動します。
ここで選択する飛行機は、セスナなどの小さい機体を選んでください。
PC MSFSでフライトをスタートしたら、開発者メニューで[File]-[New project]を選びます。 するとこのようなウインドウが開きます。
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"という名前のプロジェクトフォルダーが生成されます。
PC 次にこのようなウィザード画面が開きます。 今回作成するのはパッケージなので、画面の一番左にある[Package]ボタンをクリックします。 そして画面右下の[Next]をクリックします。
PC つづいてこのような画面になります。 ここではシーナリーの開発と同様、画面一番右の[Custom]ボタンをクリックします。
多分ここで[VisualEffect]を選んでも良いと思いますが、筆者は未検証です。
[Custom]をクリックすると、その下に次のような項目が現れます。
Display title欄には、このパッケージの表示名を指定します。 これはMSFSのマーケットプレイスや、ツール"MSFS Addons Linker"などにおいて、あなたのパッケージのタイトルとして表示されます。 図の例にあるように、だれが見てもすぐにパッケージの中身がわかるようなタイトルを入力してください。
Company name欄には、制作会社名を入れます。個人開発者の場合は、あなたの名前やペンネームなどを指定します。
Package name欄には、命名規則にのっとって決めたパッケージ名を指定します。 プロジェクト名に合わせて"scenery-vfx-fire-and-smoke"としました。
Content-Type欄のドロップダウンリストで、パッケージのタイプを指定します。 VFXのライブラリを作る場合は"MISC(その他)"を指定します。
そして画面右下の[Next]をクリックします。
PC つづいてアセットグループの指定画面になります。 VFXのみを格納するライブラリパッケージには"BGL"は不要です。 "VisualEffectLib"タイプのアセットグループを1つ準備し、その中に複数のVFXを格納していきます。
Asset group name欄には、アセットグループの名前を指定します。 ここで指定した名前が、Objects画面を通してシーナリープロジェクトから参照されるときのVFXパッケージ名になります。
Asset type欄には、アセットグループのタイプを指定します。 ここでは"VisualEffectLib"を選択します。
そして画面下の[Create]をクリックします。
PC するとプロジェクトが生成されます。 Project Editor画面で青い文字のパッケージ名を選択し、Inspector画面でプロジェクトの内容をチェックしてください。 Version欄に適切なバージョン番号をセットしてください。 そしてProject Editorの[Project]-[Save]を選んでプロジェクトを保存してください。
Inspector画面の各項目の指定方法については MSFSアドオンコンテンツ用のプロジェクトの作り方 のページもご参照ください。

新しいVFXを生成する

PC MSFS SDKでVFXライブラリ用プロジェクトを開き、 Project Editor画面で青い文字のパッケージ名の左端の"▼"マークをクリックして展開します。 そして"VisualEffectLib"を選択します。 つづいてInspector画面で"Load in Editor"をクリックしてください。
PC するとVisual Effect Editorが起動し、右図のような4つの画面が開きます。
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ドキュメントの下記のページで読めます。
PC 新しいVFXを作るには、Visual Effect Editor画面のメニューから[File]-[New Effect]を選びます。
なお、ひとつのVisualEffectLibの中に、複数のVFXを作ることができます。 ひとつのVisualEffectLibに、様々な大きさや色合いのVFXを作っておき、シーナリーの各所に配置することができます。
PC 新しいVFXの名前を考えて入力し、[Create]ボタンをクリックします。
PC するとデフォルト値がセットされたVFXが生成されます。 Visual Effect Editor画面には、[(VFX名)].xmlという名前で、生成したVFXが見えています。 これ以降では、主にNode Graph画面とInspector画面を使って、VFXを修正していきます。
操作のヒント
Node Graph画面でマウスの右ボタンを押しながらドラッグすると、グラフの表示位置を変更することができます。 Node Graph画面でマウスのスクロールホイールを回すと、グラフを拡大・縮小することができます。
PC 新しいVFXを生成したら、最初に名前を入力しましょう。 Node Graph画面で、一番上にあるVisualEffectブロックをクリックします。 するとInspector画面に、そのブロックの情報が表示されます。
Inspector画面のProperties - Name欄に、新しいVFXの名前を入力します。 ここを入力しないと、別のプロジェクトからこのVFXを参照することができません。
PC そしてVisual Effect Editor画面のメニューから[File]-[Save]を選んで保存します。 今後もVFXの修正に一区切りがつくたびに、[File]-[Save]メニューで保存してください。

編集中のVFXをゲーム画面でプレビューする

編集中のVFXをゲーム画面の中に表示させて、リアルタイムで編集結果を確認することができます。 ただし、編集中のVFXは、ゲーム画面の中にあるSimObjects(例:飛行機)にアタッチする必要があります。
一方、完成したVFXは、MSFSシーナリーの好きな場所に置くことができます。
PC Node Graph画面で、なにも無いところをクリックすると、Inspector画面が右図のようになります。 あるいはTemplates/Instances Debugger画面で[Spawner]タブをクリックしても、同じ画面が開きます。
SimObjects欄で、VFXをアタッチ(生成)するオブジェクトを選択します。 通常、フリーフライト/ワールドマップ画面を起動するときに選択した飛行機が選ばれています。 そのままで問題ありません。
ContactPoint欄で、VFXをアタッチする場所を選択します。 Propellerを選択すると、飛行機のプロペラの先端にVFXが表示されます。
Offset欄で、ContactPointからVFXまでの距離を指定します。 例えば3番目のボックスに5と入れると、プロペラの先端の5m先にVFXが表示されます。
そして[Spawn]ボタンをクリックします。
PC すると指定した場所にVFXが表示されます。 ただしVFXが表示されるまで、数秒待たされる場合があります。 右図が、デフォルト値がセットされたVFXのプレビューです。
ひとつのVisualEffectLibアセットグループの中に複数のVFXを作ったときは、Visual Effect Editor画面で、それぞれのVFXを選択して[Spawn]ボタンをクリックしていくと、複数のVFXを同時にプレビューすることもできます。
PC この画面で[Stop All]をクリックすると、全てのVFXを一時停止します。 また[Destroy All]をクリックすると、全てのVFXのプレビューを消去します。
[Spawn]ボタンをクリックすれば、消去したVFXを再度表示することができます。

Node Graphの概要

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

Emitterブロックでパーティクルの生成方法を決める

PC Emitterブロックは、どのようにパーティクルを生成するかを指定するブロックです。 Node Graph画面でEmitterブロックをクリックすると、Inspector画面にEmitterブロックの情報が表示されます。 Emitterブロックの場合は、ほぼすべてのパラメーターが、Node Graph画面とInspector画面のどちらからでも編集可能です。
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 SDKドキュメントの下記のページで読めます。

パーティクルの色を変更する・発光させる

パーティクルの色はRGBA値で自由に設定できます。 また、煙など本来発光していないものでも、ごく少量の発光色を加えることで、夜に周囲の建物の光に照らされているような雰囲気を再現できます。
PC パーティクルの色は、OutputブロックのColorパラメーターに接続されている、"Vector4"ノードで指定します。 X, Y, Z, W欄に、色のR, G, B, A値を指定します。
PC パーティクルを発光させるには、Outputブロックに"Material Emissive"パラメーターを追加し、そこに色を指定します。 Node Graph画面でOutputブロックをクリックし、Inspector画面で"Material Emissive (+)"ボタンをクリックします。
PC するとOutputブロックに"Material Emissive"パラメーターが追加されます。 つづいてNode Graph画面のなにも無いところでマウスを右クリックします。 すると右図のようなメニューが表示されるので[Types]-[Vector4]を選びます。
PC すると新しい"Vector4"ノードが画面に現れます。 "Vector4"ノードの端子をクリックして、そのままOutputブロックの"Material Emissive"の端子までドラッグすると、この間がラインで結ばれます。 新しい"Vector4"ノードにR, G, B, A値を指定すると、パーティクルがその色で発光します。
Outputブロックの詳細については、MSFS SDKドキュメントの下記のページで読めます。

パーティクルのテクスチャを変更する

PC パーティクルのテクスチャは、Outputブロックのプロパティで指定します。 Node Graph画面でOutputブロックをクリックし、Inspector画面でMaterial欄に表示されているテクスチャ名:"VFX_EngineSmoke"をクリックします。
PC するとMaterial Editor画面が開くので、使いたいテクスチャをクリックして、Inspector画面のテクスチャ名:"VFX_EngineSmoke"の部分をクリックすると、そこに選択したテクスチャ名がセットされます。 Material Editor画面のFilter欄にキーワードを入れると、テクスチャを検索することができます。 ここでは"Smoke_Atlas01"という名前のテクスチャを使用します。
PC するとパーティクルの形が変わります。 今回は8x8フレームの"Atlas"タイプのテクスチャを選択したので、1枚のパーティクルに、アニメーションの全フレーム(64フレーム)が同時に表示されています。
PC Inspector画面でUVMode欄を"Atlas"に、AtlasSize欄を2つとも8にします。
PC すると今度は各パーティクルに、アニメーションの1フレームが貼り付けられます。
PC その場でアニメーションさせるため、まずは各パーティクルが上昇するのをやめさせます。 Node Graph画面でInitブロックのVelocityパラメーターに接続されている"GravityVector"ノードをマウスで右クリックし、"Delete"を選びます。 するとパーティクルが1か所にとどまるようになります。
PC つづいてUpdateブロックに"TextureIndex"パラメーターを設定します。 Node Graph画面でUpdateブロックをクリックし、Inspector画面で"TextureIndex (+)"ボタンをクリックします。
PC Node Graph画面のなにも無いところでマウスを右クリックします。 すると右図のようなメニューが表示されるので[Animation]-[AtlasPlayer]を選びます。
PC 新しく追加されたAtlasPlayerの端子を、UpdateブロックのTextureIndexに接続します。 そしてAtlasPlayerの"FrameRate"欄に、アニメーションのフレームレート(FPS値)を指定します。
PC すると、ゆらゆらと揺らめく炎のようなアニメーションが再生されます。 Emitterブロックで、Rateパラメーターに 0.5、Outputブロックで、Colorパラメーターに 1, 0.5, 0, 0.5、そしてMaterial Emissiveパラメーターに 10, 2, 0, 0 を指定すると、右図のような炎になります。

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

PC パーティクルのサイズを変更したいときは、Initブロックの"Size"パラメーターを変更するのが簡単です。 ここで、生成されるパーティクルの半径が、メートル単位で指定できます。 ここに5を指定すると、右図のように直径10メートルのパーティクルが生成されます。
別の方法として、Initブロックに"Scale"パラメーターを追加し、x, y, z 方向の拡大率を指定する方法もあります。 しかしScaleパラメーターの x, y, z にそれぞれ異なる値を指定しても、結果はx値で指定される等倍拡大・縮小になるようです。

パーティクルをランダムに昇らせる

炎の煙のように、パーティクルをランダムな方向に広がりながら上昇させてみます。 パーティクルのVelocityパラメーターの x, z軸方向に、ランダム値を加算します。
PC ベクトルを使ってパーティクルを上昇させるので、EmitterブロックのEmitInLocalSpaceにチェックを入れます。 ここにチェックを入れないと、パーティクルの流れが北極方向に傾いてしまいます。
PC InitブロックのVelocityに、Vector3ノードを接続します。 Vector3ノードのy値に、パーティクルの上昇速度を指定します。 例えば煙を作る場合は、0.5~1.5程度の値が良いと思います。 また、下方向に降りていくパーティクルを作りたい場合は、ここに負の値をセットします。
Vector3ノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Types]-[Vector3]を選びます。
PC 先ほど追加したVector3ノードのx, z端子に、RandomValueノードを接続します。 RandomValueノードのMinRandValueとMaxRandValueに、出力されるランダム値の幅を指定します。 ここの値を変えると、パーティクルの広がり方が変わります。 例えば煙を作る場合は、MinRandValueには-0.3~-0.6程度、MaxRandValueには0.3~0.6程度の値が良いと思います。
RandomValueノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Random]-[RandomValue]を選びます。
PC 先ほど追加したRandomValueノードのRandSeed端子に、GetParticleAttributeノードを接続します。 ここでは各パーティクルが個別に持つID値をシードとして使用します。 また、RandomValueノードのRandIndexには、x軸とz軸では異なる値を指定します。
パーティクルごと、軸ごとに乱数のシード(たね)を変えないと、全てのパーティクルが同じ方向に進んでしまいます。
GetParticleAttributeノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[GetParticleAttribute]を選びます。
PC Node Graph画面のGetParticleAttributeノードをクリックすると、Inspector画面が右図のようになります。 ParticleAttributeTypeのドロップダウンリストで"id"を選択します。 すると各パーティクルがランダムな方向に広がります。

パーティクルの広がりを徐々に狭める/ベクトルの各要素を個別に操作する

Splitノードを使うと、ベクトルを分解して、各要素を個別に操作することができます。 上で設定した、煙のランダムな方向の動きを、パーティクルの上昇に伴って徐々に狭めることで、よりリアルにします。
各フレームごとに、各パーティクルのvelocityベクトルを取り出し、x値とz値を少しずつ小さくします。
PC Updateブロックをクリックして、Inspector画面で[Velocity (+)]ボタンをクリックすると、Velocityパラメーターが追加されます。 ここで、各フレームごとのパーティクルの移動ベクトルが指定できます。 初期値は0になっているので、パーティクルは停止します。
つづいて新たに[Types]-[Vector3]ノードを設置し、これをUpdateブロックのVelocityに接続します。
PC 先ほど追加したVector3ノードの各パラメータに、Multiplyノードを接続します。 ここに指定する値(右図の例では0.998)は、各フレームごとに移動ベクトルのx, z軸に乗算される値です。 各フレームごとに、移動ベクトルのx,z値が、0.02パーセントづつ小さくなっていきます。
y軸に指定している値は、時間とともにパーティクルの上昇速度を少しずつ増やしています。 右図の例の1.002では、各フレームごとに、パーティクルの上昇速度が0.02パーセントづつ大きくなっていきます。
Multiplyノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Arithmetic]-[Multiply]を選びます。
PC 先ほど追加したMultiplyノードの xパラメータに、Splitノードを接続します。 Splitノードは、ベクトル入力の各要素を個別に出力します。 Splitノードの1つめの出力はx値、2つめの出力はy値、そして3つめの出力はz値です。
Splitノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Types]-[Split]を選びます。
PC 先ほど追加したSplitノードに、GetParticleAttributeノードを接続します。 Node Graph画面のGetParticleAttributeノードをクリックして、Inspector画面でParticleAttributeTypeに"velocity"を選択します。 これにより、各フレームのパーティクルのvelocityベクトルが取り出せます。
GetParticleAttributeノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[GetParticleAttribute]を選びます。

パーティクルを風で流す/風の影響を再現する

WindDirectionノードを使うと、VFXを設置した場所の風向・風速を得ることができます。 上で解説したSplitノードを使って、ここからx, zベクトルを取り出し、各パーティクルのvelocityに加算します。
PC WindDirectionノードにSplitノードを接続し、x, z軸の値を取り出します。 Node Graph画面のWindDirectionノードをクリックして、Inspector画面でWindDirOptionsに"Raw"を選択します。 すると風向・風速(feet/sec)が取り出せます。
x, z軸にMultiplyノードを接続し、各フレームごとにパーティクルのベクトルに加算する値を計算します。 ここで乗算する値(右図の例では0.001)は、作成したVFXの、パーティクルのサイズや移動・上昇速度に合わせた調整が必要です。
WindDirectionノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[WindDirection]を選びます。
PC 例えば、上で計算した風向・風速値を、UpdateブロックのVelocityの入力に加算します。 するとおおむね風の影響が再現できます。
ただし、このグラフでは正確に風向・風速の影響を反映することはできません。 より正確に風向・風速を反映するには、より複雑なグラフを作る必要があります。

パーティクルを徐々に透明にする

時間経過に従って、パーティクルを徐々に透明にします。
PC パーティクルの透明度は、OutputブロックのColorパラメーターに接続されている、"Vector4"ノードのw値で指定します。 これを時間とともに0に近づけると、パーティクルが徐々に透明になります。
Colorパラメーターに接続されているVector4ノードのw値に、BezierCurveノードを接続します。
BezierCurveノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Maths function]-[BezierCurve]を選びます。
PC Node Graph画面のBezierCurveノードをクリックすると、Inspector画面が右図のようになります。 ここで透明度の変化方法を指定します。
グラフは横軸が入力(時間経過)、縦軸が出力(不透明度)です。 値はともに0~1の範囲を取ります。 今回時間とともに若干透明度が低下し(色が濃くなり)、その後徐々に透明になるようなグラフにしました。 煙を作る場合は、右図のように、ピークの不透明度を0.1程度に抑えても、十分に濃い色になります。
[Add new point]ボタンを押して、グラフをクリックすると、そこにポイントが設置できます。 ポイントをドラッグすると、位置を移動することができます。
PC 先ほど追加したBezierCurveノードに、GetParticleAttributeノードを接続します。 そしてNode Graph画面のGetParticleAttributeノードをクリックし、Inspector画面に表示されるParticleAttributeTypeのドロップダウンリストで"AgeOverLifetime"を選択します。 すると各パーティクルの誕生から消去までの時間経過が、0から1の値で得られます。
GetParticleAttributeノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[GetParticleAttribute]を選びます。

パーティクルを徐々に大きくする

時間経過に従って、パーティクルのサイズを徐々に大きくします。
PC パーティクルのサイズは、Updateブロックに追加したSizeパラメータで指定します。 Node Graph画面でUpdateブロックをクリックし、Inspector画面で[Size (+)]ボタンをクリックします。
つづいてUpdateブロックのSizeパラメータに、Addノードを接続します。 そしてAddノードのy値に、パーティクルの初期サイズを入力します。
Addノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Arithmetic]-[Add]を選びます。
PC 先ほど追加したAddノードに、MultiplyノードとGetParticleAttributeノードを接続します。 そしてNode Graph画面のGetParticleAttributeノードをクリックし、Inspector画面に表示されるParticleAttributeTypeのドロップダウンリストで"AgeOverLifetime"を選択します。 またMultiplyノードのy値には、パーティクルの[最大サイズ] -(マイナス) [初期サイズ]を入力します。
Multiplyノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Arithmetic]-[Multiply]を選びます。 GetParticleAttributeノードを追加するには、Node Graph画面のなにも無いところでマウスを右クリックし、[Effect & Emvironment]-[GetParticleAttribute]を選びます。

ひとつのVFXに複数のEmitterを置く

PC ひとつのVFXに、複数のEmitter-Init-Update-Outputブロックを置くこともできます。 それぞれに異なった演出のVFXを定義できます。 例えば、炎とそこから立ち上る煙を、ひとつのVFXに作ることもできます。
PC 新しく設置した各ブロックをつなぐには、Inspector画面で、次のブロックへの端子を追加する必要があります。 例えばUpdateブロックの場合は、[ParticleOutput (+)]ボタンをクリックすると、Outputブロックへの端子が追加されます。
Node Graph画面では、"Duplicate"メニューでブロックやノードをコピーすることができます。 しかしコピーした「ブロック」は正しく動作しないことがあるようです。 ブロックは常に新規追加してください。
なお、ブロック同士を接続した直後は、Node Graph画面で接続線が表示されません。 Visual Effect Editor画面で一旦別のVFXをクリックした後、元のVFXをクリックすると、接続線が表示されます。

不要になったVFXを削除する

PC 不要になったVFXは、Visual Effect Editor画面の右クリックメニューで削除することができます。 削除したら、Saveとビルドを行いましょう。

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ライブラリのビルド&インストール

PC VFXが完成したら、Visual Effect Editor画面のメニューから[File]-[Save]を選んで保存しましょう。 そしてProject Editorの画面で[Project]-[Save]をクリックしてプロジェクト全体を保存します。 同じくProject Editorの画面で[Build All]ボタンをクリックすると、ビルドが始まります。
PC ビルドに成功すると、Packagesフォルダーの下に、パッケージ名のフォルダーができています。 これをMSFSのデータ格納フォルダの中にある"Community"フォルダーにコピーして、MSFSを立ち上げなおせば、あなたのMSFSにインストールされます。 パッケージを配布するときは、このフォルダーを圧縮して、配布サイトなどにアップロードします。
なお、プロジェクトフォルダの[Packages]-[(パッケージ名)]フォルダの下に、"layout.json"と"manifest.json"が生成されていない場合は、ビルドに失敗しています。

MSFSシーナリーにVFXを設置する

PC MSFSシーナリーに、作成したVFXを設置する手順は、 3Dオブジェクトをシーンに設置する手順 と同じです。
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を複数作っている場合は、それらの区別をつけることができません。
PC Scenery Editor画面で、追加したVFXを右クリックしてProperties画面を開き、"Snap to ground(地面に貼り付ける)"のチェックを外します。 するとVFXが好きな高さに移動できます。
VFXが好きな場所に設置できたら、Scenery Editor画面で、左下にある"Save Scenery"ボタンをクリックして、シーナリーを保存します。 そしてProject Editor画面で"Build All"をクリックしてプロジェクトをビルドします。 以上で、新しいVFXの設置が完了しました。
PC VFXの位置、方向を調整したいときは、Scenery Editor画面でVFXを選択したうえで、Scenery Editor画面のメニューから[View]-[Gizmo]画面を開きます。 "Translate"をクリックすると、ゲーム画面の中でオブジェクトの位置が調整できます。 同様に"Rotate"をクリックすると方向を調整することができます。 ただしVFXは"Scale"クリックしても大きさを調整することはできないようです。
PC シーナリーに動く煙・炎・霧・水が追加されると、シーナリーのリアリティが増します。
PC 炎のVFXは、シーナリーの夜景のリアリティを増すことができます。

マイクロソフトフライトシミュレーターの楽しみ方

基礎編

応用編

便利なツール

アドオンシーナリーの開発