Modernizing Unreal Engine's Steam Audio Plugin (merged in UE 4.24)
- Doğa

- Oct 30, 2019
- 2 min read
Updated: Jul 12
Overview
Unreal Engine's Steam Audio plugin had fallen out of maintenance and was broken against the current Steam Audio release. Because of the spatial-audio requirements on Project Borealis, I reworked the plugin from the ground up: updated it to the latest Steam Audio version, rebuilt the parts broken by the major API change, added missing features, and fixed a range of long-standing bugs.
The work was merged into Unreal Engine 4.24 (PR #6203) after Valve's Steam Audio developer picked it up, reviewed it, and refined it for the merge. Valve credited the contribution in their official Steam Audio announcement. The plugin has shipped in a fully functional state since 4.24.
Note: the GitHub PR links require Unreal Engine repository access to view. The Valve announcement above is public.
Quick demonstration of the updated plugin running in Project Borealis:
What the work involved
I started from the outdated plugin, opened an initial PR (#5940), and flagged it to Valve's plugin developer for review. After a few weeks it was picked up, improved further, and merged as #6203 for Unreal Engine 4.24.
The changes broke down into five areas:
Intel Embree / TBB support. Steam Audio had recently added Intel Embree and TBB for faster parallel computation of reverb and occlusion (both real-time and baked). I modified the plugin to inject the TBB/Embree DLLs at runtime and perform the required calculations.
Unity / Unreal Engine feature parity. The Unreal plugin lagged well behind the Unity version. I reverse-engineered the missing features from the Unity plugin and adapted them to Unreal Engine's audio pipeline, extending them where the pipeline allowed.
Performance optimizations. The old plugin created and retrieved configuration values in a way that could get expensive at runtime. I added caching for configuration values to cut that cost across common cases.
Bug fixes. The plugin incorrectly tagged geometry as Phonon objects in some cases and had reverberation artifacts caused by a faulty audio-buffer read/write implementation. I resolved both during the API update.
Level transition support. The old plugin didn't handle level changes and stopped working whenever a new level loaded. I fixed this in the engine's audio module.


Hồi trước mình hay chọn số kiểu hứng lên là chọn, nghe người này người kia mách gì thì làm theo nên kết quả lúc được lúc không, đôi khi còn bị tâm lý đám đông kéo đi. Về sau mình tự ép mình ghi chú lại vài lần đã chọn, kèm theo lý do tại sao mình nghiêng về con đó, rồi nhìn lại xem có phải mình đang tự hợp thức hóa cảm giác của mình không. Tình cờ đọc mấy bài nói về Giờ vàng chốt số, mình thấy điểm hay là nó nhắc mình giữ kỷ luật, bám theo một cách nghĩ ổn định thay vì đổi liên tục theo cảm xúc. Dù vậy mình vẫn…