Explore: Steam Audio (ray-traced occlusion, reverb, pathing, HRTF) for in-world sounds #683

Open
opened 2026-10-11 12:24:33 +00:00 by sky_line · 3 comments
Owner

Explore: physically based / ray-traced audio for in-world sounds using Steam Audio (Valve). It is free and open source under Apache 2.0 (since 2024), which is compatible with our LGPL viewer. Prompted by Rye's note that modern games use RT audio.

What it would give us

  • Occlusion / obstruction / transmission: a wall muffles a sound (frequency-dependent), it doesn't just lower the volume; a half-open door lets more through.
  • Reflections + reverb ("room resonance"): reverb estimated from the real room shape and materials. A tiled bathroom rings, a soft-furnished club sounds dead, caves echo. Early reflections help localisation.
  • Pathing / diffraction: sound bends around corners and through doorways.
  • HRTF spatialisation: proper 3D placement (height, front/back) on headphones.

Questions to answer

  1. Integration point: our audio stack is OpenAL (LLAudioEngine_OpenAL). Do we use Steam Audio's effects (binaural, direct, reflection, path) on OpenAL sources via an effect/mixing stage, or move the mix to our own mixer with Steam Audio applied per source? What is the latency and CPU cost per source?

  2. Geometry: Steam Audio wants a scene (its own BVH, or Embree / Radeon Rays). Options:

    • feed it simplified region geometry (terrain + prims, physics shapes or low LOD)
    • use its custom ray-tracer callback to trace against our existing Vulkan RT TLAS (GPU) instead of a second copy of the world
    • per-region static scenes plus dynamic instanced meshes for moving objects

    SL geometry changes constantly. Measure scene build/update cost.

  3. Materials: SL surfaces have no acoustic properties. Use one default material, a heuristic from texture/material names or PBR properties (metallic/rough → reflective), or a per-parcel / per-object override (a viewer-side setting or script-readable hint).

  4. Scale: busy venues have many simultaneous sounds plus streaming music. Which sources get simulated (nearest N, priority by volume)? Parcel audio streams and voice stay dry by default; consider applying reverb to voice optionally.

  5. Fallbacks: CPU path without RT hardware, a quality tiers setting, and off by default until proven.

  6. Platforms: Linux / Windows / macOS builds of the Steam Audio SDK (prebuilt binaries vs source build), and their licence notices.

Deliverable

A prototype behind a setting: occlusion + reverb for in-world sounds in one test region, with measured CPU/GPU cost, then a go/no-go and an implementation plan.

**Explore:** physically based / ray-traced audio for in-world sounds using **Steam Audio** (Valve). It is free and open source under **Apache 2.0** (since 2024), which is compatible with our LGPL viewer. Prompted by Rye's note that modern games use RT audio. ## What it would give us - **Occlusion / obstruction / transmission:** a wall muffles a sound (frequency-dependent), it doesn't just lower the volume; a half-open door lets more through. - **Reflections + reverb ("room resonance"):** reverb estimated from the real room shape and materials. A tiled bathroom rings, a soft-furnished club sounds dead, caves echo. Early reflections help localisation. - **Pathing / diffraction:** sound bends around corners and through doorways. - **HRTF spatialisation:** proper 3D placement (height, front/back) on headphones. ## Questions to answer 1. **Integration point:** our audio stack is OpenAL (`LLAudioEngine_OpenAL`). Do we use Steam Audio's effects (binaural, direct, reflection, path) on OpenAL sources via an effect/mixing stage, or move the mix to our own mixer with Steam Audio applied per source? What is the latency and CPU cost per source? 2. **Geometry:** Steam Audio wants a scene (its own BVH, or Embree / Radeon Rays). Options: - feed it simplified region geometry (terrain + prims, physics shapes or low LOD) - use its **custom ray-tracer callback** to trace against our existing Vulkan RT TLAS (GPU) instead of a second copy of the world - per-region static scenes plus dynamic instanced meshes for moving objects SL geometry changes constantly. Measure scene build/update cost. 3. **Materials:** SL surfaces have no acoustic properties. Use one default material, a heuristic from texture/material names or PBR properties (metallic/rough → reflective), or a per-parcel / per-object override (a viewer-side setting or script-readable hint). 4. **Scale:** busy venues have many simultaneous sounds plus streaming music. Which sources get simulated (nearest N, priority by volume)? Parcel audio streams and voice stay dry by default; consider applying reverb to voice optionally. 5. **Fallbacks:** CPU path without RT hardware, a quality tiers setting, and off by default until proven. 6. **Platforms:** Linux / Windows / macOS builds of the Steam Audio SDK (prebuilt binaries vs source build), and their licence notices. ## Deliverable A prototype behind a setting: occlusion + reverb for in-world sounds in one test region, with measured CPU/GPU cost, then a go/no-go and an implementation plan.
sky_line added this to the Slipstream project 2026-10-11 12:24:33 +00:00
Author
Owner

Follow-ups filed:

  • #857: per-source room estimate (sources in another room get their own reverb and send level).
  • #858: approximate diffraction via first-bounce visibility (sound around corners and through doorways).

Also related:

  • #856: non-RT fallback via a GPU voxel grid (exploration).
  • #852: image model for surface acoustic material (exploration).

The full multi-bounce per-source echograms (Steam-Audio-class) remain this ticket's Phase 1 question.

**Follow-ups filed:** - #857: per-source room estimate (sources in another room get their own reverb and send level). - #858: approximate diffraction via first-bounce visibility (sound around corners and through doorways). **Also related:** - #856: non-RT fallback via a GPU voxel grid (exploration). - #852: image model for surface acoustic material (exploration). The full multi-bounce per-source echograms (Steam-Audio-class) remain this ticket's Phase 1 question.
Author
Owner

Shipped in 1.4.0 Beta 1. Closing; reopen if it misbehaves.

Shipped in 1.4.0 Beta 1. Closing; reopen if it misbehaves.
sky_line 2026-10-20 15:03:21 +00:00
sky_line reopened this issue 2026-10-20 16:38:43 +00:00
Author
Owner

Reopened: closed by mistake in a board sweep. The room acoustics shipped in Beta 1, but this ticket still has its Phase 1 question open: full multi-bounce reverb calculated per sound source. Follow-ups: #857, #858, #856, #852, #892.

Reopened: closed by mistake in a board sweep. The room acoustics shipped in Beta 1, but this ticket still has its Phase 1 question open: full multi-bounce reverb calculated per sound source. Follow-ups: #857, #858, #856, #852, #892.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#683
No description provided.