Procedural Sound Propagation

As a follow up to my previous post, i have completed the sound system that i have been working on, i have noticed that many developers do not see sound as an important thing in games and have been neglected for a while, in my current project of bringing a Rainbow Six Siege styled game to Roblox, i aspire to bring all the tech that comes with it. This system is called the Ambient Sound Service.
Ambient Sound Service includes:
-Procedural Reverb
-Procedural Diffraction
-Procedural Obstruction/Occlusion
-Procedural Sound Blending according to Source and Listener Location
-Respects FE Enabled
-Custom Doppler Effect/Handling
The reverberation is some what of a best guess right now, as Roblox doesnt provide a lot of tools and parameters that would make sound more realistic, etc High/Low Frequency Attenuation in Reverb Effects.
Hopefully things will change in the future as spatial sound releases.
(Note: video quality is not very good because i do not even have a decent laptop)
Environment Sounds

Character Sounds


you guys can see the video right?

1 Like

Sorry, that’s just me. Discord is blocked for me. If you could make it a file that’ll be great!

1 Like

sorry file is too large to be uploaded directly to roblox

1 Like


Glad to see someone is finally putting in some real interest into sound. The system you have in place seems pretty good.

Unfortunately there are a lot of limitations in roblox but this goes to show you can make do with a fair ammount of hackyness and workarounds

As per the sounds themselves, the outdoor layers are pretty good. In the large hallway however the tail seems more suited for an urban environment. I suggest finding a large echoey indoor tail like that of a concrete indoor shooting range but with more airyness per se to more suit the hallway


the reverb depends on the material of the walls, and im pretty the walls were drywall/smoothplastic, large echoey indoor tails, would not work with the reverb object without sounding very metalic, we dont have access to the frequency decay parameters, im trying to have things to be as dynamic as it can be, some things i cant change without effecting the other parts


@XXDLOLXDDILMOA: Creates a sophisticated custom sound service that I would probably suffer trying to replicate.

You deserve more.
In all seriousness:

I agree wholeheartedly in terms of sound, especially when it comes to music. Sound is basically half the game in terms of immersing your players.

On that note, your sound system seems very efficient. I listened to this with my headphones on, and it seemed much more refined than most of the Roblox games I play.

Keep up the good work! :+1:


About the metallic sounding issue, I’m sure there might be a workaround. How exactly are you handling reverb effects?

1 Like

Cool so far, I’ve done all this for my projects so feel free to dm if you get stuck on anything. Couple questions out of curiosity?

  1. How is performance? You’ve shown us all this but if you want real feedback it’d be helpful to give some benchmarks. Especially because it seems like you’re moving around at 20 frames per second here. This stuff can get tricky when you have a ton of sounds depending on how you’re doing things

  2. Is this calculated in real time based on world geometry(with cached cells until invalidation is necessary), or is it all based on pre-placed nodes? I’ve found certain advantages and drawbacks to both but personally I think the latter is sufficient

  3. You calculating reverb based on the listener’s position or the source? If you’re doing it based on the listener’s position, the source will probably sound a lot better. The developers of Hitman did this. I used a combination of their videos and some videos from the siege devs to replicate their systems


Let me guess…
You will raycast repeatedly from the source of sound to the player and adds the obstacle to a ignorelist until the ray hits the player…
And then you will decrease the reverb of the sound according to the length of the ignorelist…

For the player sound part…
you would create a region3 that returns the amount of parts that the player is next to…
And then according to its length, you decrease the reverb.

Am I correct?

Performance is very good, but due to my computer, it may not seem so when i am recording with OBS, (i dont have a graphics card), i havent done any bench marks yet, but i will soon. The performance should degrade linearly depending on the amount of sounds, but it should be able to handle more then enough needed for a FPS.

2, yes this is calculated in real time, based on world geometry, there isnt a cell system used here, it uses propagation nodes for diffraction though, which allows me to close and open it, allowing me to integrate it into my destructible environment system(sound coming from the hole you created with a shotgun).

3 Everything else is done according to world geometry, the reverb is based on both the source and listener location, most of the resources are allocated to the listener, as most sounds will be emitted from the players, this info is replicated so that it is only needed to be processed by one player.

I wonder if it is possible to improve the reverb quality? the limited parameters makes it very hard, how did you do implement your reverb system?

no…, that would be incredibly laggy, this is more sophisticated then that, i read alot of research papers to determine the best method(imo)
this works by literally propagating sound waves.

there isnt a work around except to use a very hacky solution that has some caveats. It sounds metallic because the high frequency attenuation parameters cant be changed, if Roblox lets us have access to the already implemented FMOD engine this would be solved.

1 Like

For #2 I was mostly talking about diffraction. Since it is possible to get performant real time diffraction(no pre placed nodes)

Oh, how? my diffraction system is the same as sieges system, can you explain how your reverb system works and also what system are you talking about that would be more performant for diffraction then nodes?

also, are you down to talk on discord instead maybe?

Never said more, but if you’re budgeting things correctly it should still be very fast.

Basically how my latest diffraction works is by voxelizing the world into cells(usually 3x3x3). You’d then do your typical pathfinding between the source and the listener as you’d do with pre placed nodes, but for these world cells instead. To determine if a cell is traversible, a ray is casted between cells. It is traversible if it doesn’t hit any world geometry.

This all caches too or course(the result between any two cells , etc.) . For destruction you’d just get all world cells around the destruction point in a given blast radius and wipe the cache for those cells

Yeah tyridge77#5390

added you, my username is a winky face, ill talk to you on discord rn

sorry. that was a bit vague, its ! ;D#6209

Would this system be suitable for this application:
My building has a fire alarm system with alarm sounders with different tones in different areas of the building. Since they use default roblox sound system when the alarm is activated you can hear every single sounder going off which sound both unrealistic and unpleasant.
Would this sound system be able to help with this problem and also have you got plans to release it for us to use on our games?

1 Like