How to add moving smoke, fire, fog, water, etc. to MSFS scenery / How to use Visual Effect Editor

Here, I will explain how to create a simple VFX with a minimum number of steps and how to install it in the MSFS scenery.
このページを日本語で見る
Contents
- What is Visual Effect (VFX)?
- Compatibility with MSFS2024
- Installation of various development tools
- Where VFX is made
- Creating a project for the VFX library
- Generate new VFX
- Node Graph Overview
- Determine how particles are generated with the Emitter block
- Change the color of particles and make them emit light
- Changing the particle texture
- Changing the size of particles
- Randomly raise particles
- Narrow the particle spread gradually / Manipulate each component of the vector separately
- Making particles flow with the wind/Reproducing the effects of wind
- Gradually make particles transparent
- Gradually make particles bigger
- Putting multiple Emitters in one VFX
- Delete VFX that are no longer needed
- Finalize the VFX
- Building and installing the VFX library
- Installing VFX in MSFS scenery
What is Visual Effect (VFX)?

However, while there is a high degree of creative freedom, the tools are complicated to use and still have many bugs. Creating VFX can be a struggle.
Here, based on the explanation in Federico Pinotti's YouTube video attached below, I will explain how to create a very simple VFX and install it in an MSFS scene.
Microsoft Flight Simulator SDK Tutorial - VisualEffect - How to make fire and smoke
YouTubeで見る
Compatibility with MSFS2024
The VFX created using the procedure introduced here can be used with both MSFS2020 and MSFS2024. You can simply copy the VFX built with the MSFS2020 SDK to the MSFS2024 Community folder and use it. However, the color and transparency at which the VFX is displayed are slightly different between MSFS2020 and MSFS2024. You will need to make adjustments so that the color and transparency look natural in either case.Installation of various development tools
To create add-on content for Microsoft Flight Simulator, first install various tools on your computer. Please refer to the page below.Where VFX is made
VFX are created as an asset group called "VisualEffectLib" in the MSFS SDK. They can be created in any type of project that is handled by the MSFS SDK. However, to place the VFX you created in, for example, a scenery, the VFX must already be installed in the Community folder. Unlike 3D model ModelLibs, after creating a VFX in a project, you cannot immediately place it in a scenery in the same project.For this reason, it is a good idea to create VFX as an independent VFX library project and reference it from other projects. This makes it easy to use one VFX in multiple scenery projects.
How to create a project for MSFS add-on content
Creating a project for the VFX library
Think about the package name for the VFX library you want to create. The MSFS SDK has strict package naming rules. Think about a package name that follows the rules.(Additional Note: According to the MSFS 2024 SDK documentation, the correct format for naming a VFX package is <company>-vfx-<name>. In this case, the correct name would be "Vfx-Fire_and_Smoke".)
Once the package name has been decided, create an empty project using the MSFS SDK.
How to create a project for MSFS add-on content

Due to the structure of MSFS, in order to check the VFX currently in development on the game screen, a SimObject (airplane) is required as the source of the effects. Also, if you pause the game with the Active Pause function, the VFX will also stop. For this reason, please specify a parking spot at the airport as the starting point and launch the Free Flight/World Map screen.
When selecting an airplane, please choose a small aircraft such as a Cessna.

In the Projects Folder field, specify the folder in which to save the project. Since large amounts of data will be read and written many times, we recommend using a large-capacity hard disk rather than an SSD.
In the Project Name field, specify the project name without the developer name part. In this example, we used "Scenery-vfx-Fire_and_Smoke".
In the Default creator name field, enter the developer's name. Specify your name, pen name, etc.
In the Default company name field, enter the production company name. If you are an individual developer, it should be the same as the Default creator name field.
Then click the [Create new project] button at the bottom right of the screen. Then, a project folder named "Scenery-vfx-Fire_and_Smoke" will be created under the folder specified in the Projects Folder field.


It's probably okay to select [VisualEffect] here, but I haven't tested this.
When you click [Custom], the following items will appear below it.
In the Display title field, specify the display name for this package. This will be displayed as the title of your package in the MSFS Marketplace, the "MSFS Addons Linker" tool, etc. As shown in the example, please enter a title that will let anyone immediately understand the contents of your package.
In the Company name field, enter the production company name. If you are an individual developer, specify your name, pen name, etc.
In the Package name field, specify the package name determined according to the naming rules. I named it "scenery-vfx-fire-and-smoke" to match the project name.
In the Content-Type field's drop-down list, specify the package type. If you are creating a VFX library, select "MISC".
Then click [Next] at the bottom right of the screen.

In the Asset group name field, specify the name of the asset group. The name specified here will be the VFX package name when referenced from the scenery project through the Objects screen.
In the Asset type field, specify the type of asset group. Here, select "VisualEffectLib".
Then click [Create] at the bottom of the screen.

For information on how to specify each item on the Inspector screen, please also refer to the How to create a project for MSFS add-on content page.
How to create a project for MSFS add-on content
Generate new VFX


The Visual Effect Editor screen is the main screen.
The Inspector screen is for checking and updating the contents of each element that makes up the VFX. It is separate from the Inspector screen that is opened from the Project Editor.
The Templates/Instances Debugger screen is used to debug VFX.
The Node Graph screen displays a graph of the internal structure of the VFX, and is used to edit the VFX.
These windows can be shown or hidden using the View menu on the Visual Effect Editor screen. If you accidentally close a window, you can open it from here.
The Visual Effect Editor has so many features and operations that it's impossible to cover them all here. For more detailed information, see the following pages of the MSFS SDK documentation.
THE VISUAL EFFECTS EDITOR (MSFS 2024 SDK Documentation)
THE VISUAL EFFECTS EDITOR (MSFS SDK Documentation)

You can create multiple VFX in one VisualEffectLib. You can create VFX of various sizes and colors in one VisualEffectLib and place them in various places in the scenery.


You can change the display position of the graph by dragging while holding down the right mouse button on the Node Graph screen. You can zoom in and out of the graph by turning the mouse scroll wheel on the Node Graph screen.

Enter a name for the new VFX in the Properties - Name field of the Inspector screen. If you do not enter a name here, you will not be able to reference this VFX from another project.

Previewing VFX on the game screen while editing
You can display the VFX you are editing on the game screen and check the results of your edits in real time. However, the VFX you are editing needs to be attached to SimObjects (e.g. an airplane) on the game screen.Meanwhile, the completed VFX can be placed anywhere in the MSFS scenery.

In the SimObjects section, select the object to which you want to attach (generate) VFX. Usually, the airplane you selected when launching the Free Flight/World Map screen is selected. There is no problem leaving it as it is.
In the ContactPoint field, select where to attach the VFX. If you select Propeller, the VFX will appear on the tips of the plane's propellers.
In the Offset field, specify the distance from the ContactPoint to the VFX. For example, if you enter 5 in the third box, the VFX will appear 5m ahead of the tip of the propeller.
Then click the [Spawn] button.

If you have created multiple VFX in one VisualEffectLib asset group, you can preview multiple VFX simultaneously by selecting each VFX and clicking the [Spawn] button on the Visual Effect Editor screen.

You can make the VFX you removed appear again by clicking the [Spawn] button.
Node Graph Overview

The VisualEffect block holds the basic information for a VFX.
The Emitter block determines how particles are generated.
The Init block holds the initial values of the particles.
The Update block determines how the parameters of the particles change over time, etc.
The Output block determines how the particles are displayed on the game screen.
A purple box is connected to the parameters within each block. These purple boxes are called "nodes." A variety of nodes are available, including numerical values, mathematical formulas, random numbers, in-game parameters, and particle parameters, etc. By combining nodes, you can create complex VFX.
For more information, see the following pages of the MSFS SDK documentation.
THE VISUAL EFFECTS EDITOR (MSFS 2024 SDK Documentation)
THE VISUAL EFFECTS EDITOR (MSFS SDK Documentation)
Determine how particles are generated with the Emitter block

- EmitInLocalSpace
- Select whether to represent particle positions and speeds in World Space: ECEF (Earth centered, Earth fixed) (checked off) or in Local Space (checked on). When controlling particle movement using vectors, the direction of movement will change depending on what you specify here. For example, if you want to use vectors to control particles such as rising smoke or falling water, check this box. If particles are flowing in unexpected directions, try checking this box on or off.
- TimeEmission
- Specifies the time (sec) that particles will continue to be generated. If you set this to -1, particles will continue to be generated forever.
- Delay
- Specifies the time (sec) from when VFX is generated in the game until particles start being generated. If you set this to 0, particles will be generated as soon as the game starts.
- Capacity
- Specifies the maximum number of particles to generate. Increasing this will allow you to display larger or denser smoke or water, but will also increase the load on the game.
- MaxDistanceEmission
- Specifies how many meters the camera (point of view) must be close to the VFX before particles are generated. Increasing this will make the VFX visible from farther away, but will increase the load on the game.
- RateType and Rate
- Specifies the particle emission speed. If you specify "Time" for RateType, particles will be generated at a speed of "[Rate] particles/second". If you specify "Distance" for RateType, particles will be generated at a speed of "[Rate] particles/meter movement". [Rate] particles will be generated for every 1 meter the VFX moves. Increasing this will allow you to display denser smoke or water, but will also increase the load on the game.
Emitter (MSFS 2024 SDK Documentation)
Emitter (MSFS SDK Documentation)
Change the color of particles and make them emit light
You can freely set the color of the particles using RGBA values. Even for things that don't naturally emit light, such as smoke, you can recreate the appearance of light being lit by surrounding buildings at night by adding a small amount of emissive color.



For more information about Output block, see the following pages of the MSFS SDK documentation.
Output (MSFS 2024 SDK Documentation)
Output (MSFS SDK Documentation)
Changing the particle texture






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


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


Changing the size of particles

Alternatively, you can add a "Scale" parameter to the Init block and specify the scale factor in the x, y, and z directions. However, even if you specify different values for the x, y, and z parameters of the Scale parameter, the result will be the same scale as specified by the x value.
Randomly raise particles
Let's make the particles rise while spreading in random directions, like smoke from a fire. Add random values to the x and z axis directions of the particle's Velocity parameter.

To add a Vector3 node, right-click on an empty area of the Node Graph screen and select [Types]-[Vector3].

To add a RandomValue node, right-click on an empty area of the Node Graph screen and select [Random]-[RandomValue].
RandomValue (MSFS 2024 SDK Documentation)
RandomValue (MSFS SDK Documentation)

If the random number seed is not changed for each particle, each axis, all of the particles will move in the same direction.
To add a GetParticleAttribute node, right-click on an empty area of the Node Graph screen and select [Effect & Environment]-[GetParticleAttribute].

GetParticleAttribute (MSFS 2024 SDK Documentation)
GetParticleAttribute (MSFS SDK Documentation)
Narrow the particle spread gradually / Manipulate each component of the vector separately
The Split node allows us to break down a vector and manipulate each component individually. We can make the random directional movement of the smoke we set up above more realistic by gradually narrowing it as the particles rise.Each frame, we take the velocity vector of each particle and decrease its x and z values by a small amount.

Next, create a new [Types]-[Vector3] node and connect it to the Velocity of the Update block.

The value specified on the y-axis gradually increases the particle's upward velocity over time. In the example on the right, at 1.002, the particle's upward movement speed increases by 0.02 percent each frame.
To add a Multiply node, right-click on an empty area of the Node Graph screen and select [Arithmetic]-[Multiply].
Multiply (MSFS 2024 SDK Documentation)
Multiply (MSFS SDK Documentation)

To add a Split node, right-click on an empty area of the Node Graph screen and select [Types]-[Split].
Split (MSFS 2024 SDK Documentation)
Split (MSFS SDK Documentation)

To add a GetParticleAttribute node, right-click on an empty area of the Node Graph screen and select [Effect & Environment]-[GetParticleAttribute].
GetParticleAttribute (MSFS 2024 SDK Documentation)
GetParticleAttribute (MSFS SDK Documentation)
Making particles flow with the wind/Reproducing the effects of wind
By using the WindDirection node, you can obtain the wind direction and speed at the location where the VFX is installed. Using the Split node explained above, extract the x and z vectors from this and add them to the velocity of each particle.
Connect a Multiply node to the x and z axes and calculate the value to add to the particle vector for each frame. The value to be multiplied here (0.001 in the example on the right) needs to be adjusted to match the particle size and movement/ascent speed of the VFX you created.
To add a WindDirection node, right-click on an empty area of the Node Graph screen and select [Effect & Environment]-[WindDirection].
WindDirection (MSFS 2024 SDK Documentation)
WindDirection (MSFS SDK Documentation)

However, this graph cannot accurately reflect the effects of wind direction and speed. To reflect wind direction and speed more accurately, a more complex graph would be needed.
Gradually make particles transparent
Makes particles gradually more transparent over time.
Connect a BezierCurve node to the w value of the Vector4 node that is connected to the Color parameter.
To add a BezierCurve node, right-click on an empty area of the Node Graph screen and select [Maths function]-[BezierCurve].
BezierCurve (MSFS 2024 SDK Documentation)
BezierCurve (MSFS SDK Documentation)

The horizontal axis of the graph is input (time passing) and the vertical axis is output (opacity). Both values range from 0 to 1. I created a graph so that the transparency decreases slightly over time (the color becomes darker), and then gradually becomes transparent. When creating smoke, as shown in the right image, even if you set the peak opacity to around 0.1, the color will be dark enough.
Press the [Add new point] button and click on the graph to place a point there. You can move the point by dragging it.

To add a GetParticleAttribute node, right-click on an empty area of the Node Graph screen and select [Effect & Environment]-[GetParticleAttribute].
GetParticleAttribute (MSFS 2024 SDK Documentation)
GetParticleAttribute (MSFS SDK Documentation)
Gradually make particles bigger
Gradually increases the size of particles over time.
Next, connect the Add node to the Size parameter of the Update block. Then enter the initial size of the particles into the y value of the Add node.
To add an Add node, right-click on an empty area of the Node Graph screen and select [Arithmetic]-[Add].
Add (MSFS 2024 SDK Documentation)
Add (MSFS SDK Documentation)

To add a Multiply node, right-click on an empty area of the Node Graph screen and select [Arithmetic]-[Multiply]. To add a GetParticleAttribute node, right-click on an empty area of the Node Graph screen and select [Effect & Environment]-[GetParticleAttribute].
Multiply (MSFS 2024 SDK Documentation)
Multiply (MSFS SDK Documentation)
GetParticleAttribute (MSFS 2024 SDK Documentation)
GetParticleAttribute (MSFS SDK Documentation)
Putting multiple Emitters in one VFX


On the Node Graph screen, you can copy blocks and nodes using the "Duplicate" menu. However, it seems that copied "blocks" may not work properly. Always add new blocks.
Please note that immediately after connecting blocks, the connection lines will not be displayed on the Node Graph screen. Click another VFX on the Visual Effect Editor screen, then click the original VFX to display the connection lines.
Delete VFX that are no longer needed

Finalize the VFX

Design Adjustments
To increase density, increase the Rate of the Emitter block. However, simply increasing the Rate may cause the VFX to be cut off, so you may also need to increase the Capacity of the Emitter block or the Lifetime of the Init block.
To make smoke rise higher, increase the Lifetime of the Init block. In this case, you may also need to increase the Capacity of the Emitter block.
To make the smoke larger, increase the Size in the Init block and the parameters that control the size in the Update block. You may also need to adjust the parameters that determine the rise/fall speed accordingly.
Conversely, if you manipulate the parameters that determine the ascent/descent speed, you will also need to adjust density and lifetime.
In this way, VFX behavior is achieved by many parameters interacting with each other. Changing one parameter will require adjusting several other parameters as well. Take your time to complete the VFX until you are satisfied with it.
Performance Tuning
Once you've completed your VFX design, tune it for performance. Change the three Emitter block parameters, Capacity, MaxDistanceEmission, and Rate, to the smallest possible values. In some cases, you may also need to adjust the particle movement speed and direction when making these changes. When you lower the Rate, you may be able to hide this by lowering the particle transparency and making the color darker. Once you've completed your MSFS scenery with VFX installed, try flying over it to check if the game's performance has been affected.
Building and installing the VFX library


If "layout.json" and "manifest.json" are not generated under the [Packages]-[(package name)] folder in the project folder, the build has failed.
Installing VFX in MSFS scenery

Open the scenery project in which you want to place the VFX using the MSFS SDK. Then open the [View]-[Objects] screen from the Scenery Editor screen. In the "Object type" column on the Objects screen, select "VFX". In the "Packages" column, select the name of the asset group of type "VisualEffectLib" created above.
A list of the VFX you created in that asset group will then be displayed in the "Objects" column. Select the VFX you want to install and click the [Add] button, and the VFX will appear on the Scenery Editor screen and game screen.
Furthermore, if you restart MSFS, the VFX names displayed on the Scenery Editor screen will all change to just "VFX", making it impossible to tell which VFX you have selected. However, if you select "Rename" in the right-click menu on the Scenery Editor screen, the name you enter here will be retained. Once you have placed the VFX, we recommend that you immediately "rename" it back to its original name.
Note:
When you generate a new VFX, if you forget to enter a name for the VFX in the Properties - Name field of the VisualEffect block, a blank line will appear in the "Objects" field on this screen. You can click on that blank line to select the VFX, but if you have created multiple VFX, you will not be able to distinguish between them.

Once you have placed the VFX where you want it, click the "Save Scenery" button at the bottom left of the Scenery Editor screen to save the scenery. Then click "Build All" on the Project Editor screen to build the project. This completes the installation of the new VFX.


