A foliage instance painted with the foliage tool is essentially an Instanced Static Mesh, which means it can’t have particles, sounds, or other features until it’s converted to a Foliage Blueprint.
But games like Helldivers have ambient particles that are seen coming from foliages before the player interacts with them.
To solve this dilmma, we designed a system that allows additional blueprints to be placed at the same locations as foliage instances. This lets us create effects like mud particles randomly squirting out of Gas-Pod foliages (as seen in our demonstration levels).

To begin, create a blueprint containing any particles, sounds, or features you want to spawn alongside your foliage.
For an example, check BP_GasPod_AmbientFX
Located in Content / AlienPhysicsWorld / FoliageTypes / Gaspods.

This example includes a particle and a sound triggered by a random delay timer.

When positioning components in your blueprint, they should be placed relative to the foliage mesh.
However, the foliage mesh itself should not be part of the blueprint.
The easiest way to position components correctly is to add the foliage mesh to your component list, move your components into place, and then delete the mesh when completed.

Then, to utilize our system, navigate to
Content / AlienPhysicsWorld / FoliageSystem / Tools
Drag BP_SpawnActors_OnFoliages into your level
Go to the Details Panel.
Reference your newly created actor in the
“Class To Spawn” field.
Next, set the Foliage Name (shown in blue) to match the foliage type you want to spawn the actor with. For example, if your foliage asset names are “BP_Flower” and “SM_Flower”, the foliage name you enter should be “Flower”.

At the start of your game, this blueprint will spawn your custom actor at the same location, rotation, and scale as every Foliage Instance of the specified Foliage Name.
Accessing associated Spawned Actors from Foliage Blueprints #
If you want to interact with or destroy your spawned actor, you’ll need to find all actors of that class and locate the nearest one within a specific range in order to get a reference to it.
You can find a good example of how we did this in BP_GasPods_Group_A
It is located at Content / AlienPhysicsWorld / FoliageTypes / Gaspods.
In this example, our Gaspods spew mud particles randomly to add ambience to our level.
When the Gaspod foliage blueprint is interacted with, the gaspod will explode and spew gas everywhere.
Because it has exploded, we no longer want it to randomly spew mud particles.
During the explosion function of the blueprint, it will attempt to find the nearest BP_GasPod_AmbientFX (the actor that was spawned with each foliage type).

It will attempt to find the nearest reference to this actor within 100 units of this specific foliage blueprint, which helps narrow the search.
It will then check if the result form the search Is Valid.
If it does not find anything in the search, it will return Is Not Valid and therefore should do nothing.
If the search finds a reference to BP_GasPod_AmbientFX, it will then destroy it.
Afterwards, it will run through the custom logic to play the destruction particle effect, and replace the Gaspod mesh with a broken Gaspod Mesh.
You can use this method (without the Destroy Actor node) to gain access to the associated additional blueprint alongside your foliage blueprint, and apply all sorts of effects.
Additional Example #
We used this feature in the Alien Tropical Jungle environment to place lights in the same location as our GlowBulb Plant.
This light blueprint enhanced our environment, but was also performant due to procedural swapping between a movable light and a “fake” decal light based on distance.

Issues? #
If your ambient effects blueprint is not being placed correctly, please ensure your foliages have the correct naming conventions.