top of page
Search

MetaSound Driving Light Intensity

  • Dec 26, 2025
  • 3 min read

Updated: Jan 1

As I continue work on the BOT vs BOTS project, I wanted to have some VO for the enemies to give them a bit more personality. But then I wondered about having some sort of visual effect representing that voice coming out of the enemy drones.

So this is a short overview of my implementation of that system (using ready voice samples for testing purposes).


So my first step was to think of what kind of visual effect I wanted to have. The most simple (and probably cliche approach) was to have a light on the enemy with it's intensity parameter changing as the voice plays.

Since I wanted something simple that could work with the drone asset I just added a point light on the "face" of the drone mesh and played around with the settings until I was happy enough with the result.


Enemy actor's light component setup in Unreal Engine 5.


Next I created the MetaSound Source to have my sounds ready to play (not using Dialogue Voice or Wave right now as I'm just setting up the sound reactive system).


I used a Random Get (WaveAsset:Array) to have random voices playing every time the sound is triggered. These are being sent to a Wave Player (1.0, Mono), using the On Finished output to be able to wait for the VO to finish before retriggering the next audio file and finally I'm using an Envelope Follower node with it's Envelope promoted to a Graph Output, to be able to monitor the output loudness of the voice files.


For the Envelope Follower I found that having an instant Attack and Release time (of zero) along with a MS peak mode seemed to work better as it felt it was synced to the sound.


Meta Sound setup in Unreal Engine 5 for reactive light intensity.


Having the MetaSound Source ready I started to implement the function in the enemy's blueprint.

I added an Audio component to the enemy's mesh (positioned on the "face" of the drone) and assigned it the MetaSound Source.


Enemy actor's audio component setup in Unreal Engine 5.


To be able to access the output I added a Meta Sound Output Subsystem node from which I could connect the Watch Output node. There I added the previously promoted output variable of the Envelope Follower: VO Loudness.


Enemy actor's Watch Output blueprint setup in Unreal Engine 5.

The Play VO Sound node is just there for testing purposes which loops on itself to make sure the sound works.


With the Watch Output set I then created a custom event connected to the On Output Value Changed, which as it states will fire off the custom event when there is a value change in the output of the VOLoudness variable.


Enemy actor's changing light intensity based on sound loudness blueprint setup in Unreal Engine 5.


From that custom event I get the VOLoudness with the Get Float node connected to the Output. From there I am getting the VOLoudness float and multiplying it by a large number so the value can correspond to the light intensity value (Unitless in this case).

hen that is being interpolated from zero up to the amount of the actual VO Loudness - zero meaning there is no light intensity and the higher volume output bringing the light intensity up.

Lastly I am using a Set Intensity node to change the actual Light intensity which gives us the following result:



What's interesting is that each sound file has a different degree of noise which affects the loudness and as a result the lighting intensity. So different visual responses are triggered based on what kind of sound fluctuations are fed into the blueprint nodes.


Next step will be to have a system of barks during fight so we can have voice reactions from the enemies as they attack and get hurt.

 
 
bottom of page