I’ve got some simplified, and hopefully easy to digest info on how to create something similar to what @Wataru has created. I’ll be using simple shapes, and no fancy meshes… but feel free to replace with what you want. This is meant for people who are fairly new to Niagara (like I recently was) but will require a little bit of know-how from toying around beforehand.
Before adding the stuff below, there are a few basic things you want to do like turn off the Spawn Rate module and replace with a burst emitter with the amount of particles you want. Remove the default forces that are applied to the Update and Spawn modules (but keep “Solve Forces and Velocity” module for Curl Noise). Add your Curl Noise Force to the Update module and make sure it works before you add all the stuff below. I’m using a lifetime of 4 seconds and size of 1 for all particles.
The first thing to do is add the two Static Mesh variables you wish to morph from, and to, labeled Particles.StaticMesh1 and Particles.StaticMesh2 below (using the + in the top-right of this field) into your emitter. Also add the Particles.NewCurve (Will show as “Curve for Floats” in context menu… also, bad name, I know) and Particles.StaticMesh2InitPos variables. Once those variables are created, drag the NewCurve, StaticMesh1, and StaticMesh2 variables into the “Set Variables” module under the Particle Spawn category (blue arrow). The category header will be outlined with a green dotted box while dragging. You can now access these variables in your Niagara Module Scripts (don’t forget to set your meshes after adding).
Below is a screen-cap of my Spawn script. This is simply assigning a random point on a tri to spawn on initially for each particle (Particles.Position). It is also saving off a random point on a tri of the 2nd mesh that we will lerp to in the Update module using the Particles.StaticMesh2InitPos variable that was created in the emitter. Note: Even though you created these variables in the Emitter already, they will not show up automatically and you will have to expand the “Particles” category, click “Make New”, then select the correct variable type (in this case Vector and Static Mesh) and assign it the exact name as listed in the emitter. Use the + at the bottom to make these variables. This will need to be done on the “Map Get” as well as the “Map Set” nodes.
My update module script is fairly simple, it is just lerping the particles from their current positions (Pin A) back to the stored location set in the spawn module (Pin B) based on their normalized lifetime (Pin C). The following curves and their timing are important, as I am triggering the Curl Noise Force to eject the particles away from their initial position in the emitter, then the update script will lerp them back to their new home after using the “NewCurve” data.
The screenshot below shows the Curl Noise Force module and the curve I’ve added to briefly add force. Take note of the timing on the top of the curve, and the force value on the left side.
If you don’t know how to add a curve, click the triangle below and select “Float From Curve”
This “NewCurve” drives the lerp in the Update module to send the particles back to the stored locations we set in the Spawn module.
I hope this info helps newcomers to Niagara. If this is too confusing I can just make a video walking through all the steps from beginning to end. I’ve also added my end-result assets to the link here for anyone to toy around with: