Previous Post

Vercidium Audio - Unreal Engine

Next Post
Vercidium Audio - Unreal Engine
1 / 15
DESCRIPTION

Raytraced Audio has been ported to C and works great with Unreal Engine.

The video above shows my initial experiments, and below is an overview of how the plugin could work. Please let me know your feedback as I'm an Unreal Engine noob.

I've only tested with Unreal Engine 5.7 so far. Please let me know if you use other engine versions, I'm happy to add support for them.

Actors

The plugin has three actors you can add to your project:

VAudioWorld is a standalone raytraced world that contains primitives, emitters, materials and many customisable settings. You'd have one for each level in your game

VAudioEmitter casts different kind of rays:

reverb and ambience rays, to determine info about the environment around it

occlusion and permeation rays, to determine how muffled other emitters are

VAudioMaterial has properties for a specific material

For example I've created an Audio folder with two emitters, a world and three materials:

VAudioWorld Actor

The world has a few settings to customise:

world bounds and units

grouped EAX submixes

air absorption settings

Unreal Engine uses the scale of 1 unit = 1 centimeter, so ensure your meters per unit is set to 0.01 for accurate air absorption and reverb calculation.

Grouped EAX allows different areas to have different sounding reverb. For example you might have a few sounds playing in a large dome, and a few sounds playing in a small bathroom. Each area will have its own reverb submix, and the plugin will automatically handle the routing for you.

You can add as many submixes as you like (typically 3-5), but it may be expensive to run more in real time.

VAudioEmitter Actor

An emitter casts rays, and can either be a Source (plays a sound in a 3D location and can be muffled), or the Main Listener (follows your camera/player around).

There can only be one main listener emitter. It controls ambience volume and has its own reverb submix that applies to personal sounds, (e.g. footsteps and gunshots). Reverb directionality/volume is also calculated relative to this emitter.

To muffle other sounds, their emitters they must be added to the Target Emitters array on the main listener, and either occlusion or permeation rays must be enabled:

VAudioMaterial Actor

This actor holds absorption, scattering and transmission fields for a specific material. The name of the material, e.g. 'Concrete', 'Glass' is used to control which default material is being customised. You can set it to something else like 'Alien' to create a custom material.

Geometry

Currently I only support StaticMeshActors - are there other types that you use, e.g. moving objects for doors?

If the actor has a simplified box, sphere or cylinder collision mesh, it will be used in the raytracing simulation instead of the slower triangulated mesh.

Material Component

To add geometry to the raytracing world, add a VAudioMaterial component to it and select the world actor it belongs to.

This affects attached actors too - in the screenshot below I've set the material component on the Glass_Parent actor, rather than setting it manually on every StaticMeshActor within it.

Outliner - Feedback Wanted

How is this looking so far, and how should actors be associated with a world? I have a few conflicting approaches at the moment.

Currently materials are attached to the world like so:

But emitters and primitives use a dropdown instead:

Which do you prefer? I don't think it would be intuitive for you to have to move all your geometry inside the VAudioWorld actor in the outliner.

Currently I'm using the VAudioMaterial component to add this group of meshes to the world (see the 'Audio World' picker at the bottom). Is this intuitive?

Would love to hear your feedback on anything Unreal Engine related.

Debugging

The C SDK doesn't yet offer a debug rendering window like the C# SDK does.

As a workaround, you can click the 'Export World' button on the VAudioWorld to export its data (primitives, emitters, materials, settings) to a .va file.

You can then import this file into the C# SDK and render it:

Performance

Raytracing was initially taking about 4ms, which was pretty slow compared to 1.2ms with the C# SDK. I spent a while profiling with Intel VTune to find hot spots, cache misses, branch prediction errors and threading issues.

After much refactoring, it now takes 0.38ms to cast all rays every frame (note with ray caching not every ray needs to be cast every frame).

I applied the same optimisations to C#, which now takes 0.8ms (down from 1.2ms).

VTune also has threading profiling, which helped me improve how quickly threads fire when work is available. Previously it was running at about 30% utilisation, now it's up to 69%, which seems to be the ceiling. Curious to try on Linux and see if it's different.

Platforms

I was trying to figure out which Mac laptop to buy to test raytraced audio, when I discovered mini PCs! These are much easier to use than a laptop, and they sit comfortably on my desk.

I ordered a Minisforum UM890 Pro and a Mac Mini M4 - the Minisforum arrived a few weeks ago and the Mac arrived today.

Linux works great, its performance is identical to Windows. I haven't set up the Mac yet, I will report back with an update soon.

Thank you to the Patrons who helped fund these computers!

Launch Update

Everything is ready for launch - website, checkout, docs, legal... except for the code signing certificate. Still going through the slow process of verifying my identity and company, hopefully not much longer to go.

At this rate the C SDK and Unreal Engine 5.7 plugin will be ready for testing by the time we launch. The C SDK will be downloadable via the website, and the Unreal Engine plugin/wrapper will be open source on GitHub.

vercidium PATREON 2 favs
VIEWS1
FILES15 files
POSTEDJun 17, 2026
ARCHIVEDJun 17, 2026