Files
UE5-Modular-Game-Framework/docs/blueprints/14-data-assets/135_DA_RoomAcousticPreset.md
Lefteris Notas 411edea8ce add blueprints
2026-05-19 13:22:27 +03:00

306 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 135 — Room Acoustic Preset Data Asset (`DA_RoomAcousticPreset`)
## Purpose
Data Asset that defines the acoustic properties of a room or environment. Contains reverb parameters (density, decay time, wet/dry mix), occlusion settings, and per-bus application flags. Used by `BP_RoomAudioZone` and `SS_AudioManager` to configure room reverb when the player enters a new acoustic zone.
## Dependencies
- **Requires:** `SS_AudioManager` (132 — applies reverb to buses), `BP_RoomAudioZone` (133 — assigns preset to zone volume)
- **Required By:** `BP_RoomAudioZone` (133 — direct assignment), `SS_AudioManager` (132 — room transition interpolation), Sound Design Team (primary editor target)
- **Engine/Plugin Requirements:** MetaSounds plugin (reverb parameters), GameplayTags plugin
## Class Info
| Property | Value |
|----------|-------|
| **Parent Class** | `PrimaryDataAsset` |
| **Class Type** | Data Asset |
| **Asset Path** | `Content/Framework/Audio/RoomPresets/DA_RoomAcousticPreset.uasset` |
| **Implements Interfaces** | *(none)* |
---
## 1. Enums
*Uses E_AudioBusCategory from `SS_AudioManager` (132).*
---
## 2. Structs
*Uses `S_RoomAcousticProfile` from `SS_AudioManager` (132). Field reference:*
| Field | Type | Description |
|-------|------|-------------|
| `RoomPresetName` | `FName` | Identifier for this room preset |
| `ReverbDensity` | `Float` (01) | How dense the reverb reflections are |
| `ReverbDecayTime` | `Float` (seconds) | RT60 decay time |
| `ReverbWetLevel` | `Float` (01) | Wet/dry mix for reverb |
| `ReflectionsDelay` | `Float` (ms) | Pre-delay before reflections start |
| `RoomSizeScale` | `Float` (0.53.0) | Perceived room size |
| `OcclusionMultiplier` | `Float` (01) | How much walls occlude sound (0=open, 1=blocked) |
| `LowPassCutoff` | `Float` (Hz) | Low-pass filter cutoff (simulates wall filtering) |
| `bApplyToSFX` | `Boolean` | Apply reverb to SFX bus |
| `bApplyToAmbience` | `Boolean` | Apply reverb to Ambience bus |
| `bApplyToDialogue` | `Boolean` | Apply reverb to Dialogue bus |
| `TransitionTime` | `Float` (seconds) | Crossfade time when entering this room |
---
## 3. Variables
### Acoustic Profile (Instance Editable)
| Variable | Type | Default | Category | Description |
|----------|------|---------|----------|-------------|
| `AcousticProfile` | `S_RoomAcousticProfile` | *(preset-specific)* | `Acoustic` | Complete acoustic profile struct (see below for per-preset values) |
### Meta (Instance Editable)
| Variable | Type | Default | Category | Description |
|----------|------|---------|----------|-------------|
| `PresetDisplayName` | `Text` | `"Unnamed Preset"` | `Meta` | Human-readable name shown in editor dropdowns |
| `PresetDescription` | `Text` | `""` | `Meta` | Description of what this preset is for |
| `bIsDefaultFallback` | `Boolean` | `false` | `Meta` | Is this the default/fallback preset? (Outdoor should be true) |
---
## 4. Default Preset Values
### `DA_RP_Outdoor` (Default Fallback)
| Field | Value |
|-------|-------|
| `RoomPresetName` | `Outdoor` |
| `ReverbDensity` | `0.05` |
| `ReverbDecayTime` | `0.3` |
| `ReverbWetLevel` | `0.05` |
| `ReflectionsDelay` | `5.0` |
| `RoomSizeScale` | `3.0` (max — open space) |
| `OcclusionMultiplier` | `0.0` (no occlusion) |
| `LowPassCutoff` | `20000` (no filtering) |
| `bApplyToSFX` | `true` |
| `bApplyToAmbience` | `true` |
| `bApplyToDialogue` | `true` |
| `TransitionTime` | `1.0` |
### `DA_RP_SmallRoom`
| Field | Value |
|-------|-------|
| `RoomPresetName` | `SmallRoom` |
| `ReverbDensity` | `0.4` |
| `ReverbDecayTime` | `0.6` |
| `ReverbWetLevel` | `0.25` |
| `ReflectionsDelay` | `15.0` |
| `RoomSizeScale` | `0.8` |
| `OcclusionMultiplier` | `0.3` |
| `LowPassCutoff` | `8000` |
| `bApplyToSFX` | `true` |
| `bApplyToAmbience` | `true` |
| `bApplyToDialogue` | `true` |
| `TransitionTime` | `1.5` |
### `DA_RP_LargeHall`
| Field | Value |
|-------|-------|
| `RoomPresetName` | `LargeHall` |
| `ReverbDensity` | `0.7` |
| `ReverbDecayTime` | `3.0` |
| `ReverbWetLevel` | `0.5` |
| `ReflectionsDelay` | `40.0` |
| `RoomSizeScale` | `2.5` |
| `OcclusionMultiplier` | `0.1` |
| `LowPassCutoff` | `10000` |
| `bApplyToSFX` | `true` |
| `bApplyToAmbience` | `true` |
| `bApplyToDialogue` | `true` |
| `TransitionTime` | `2.0` |
### `DA_RP_Cave`
| Field | Value |
|-------|-------|
| `RoomPresetName` | `Cave` |
| `ReverbDensity` | `0.8` |
| `ReverbDecayTime` | `4.5` |
| `ReverbWetLevel` | `0.65` |
| `ReflectionsDelay` | `60.0` |
| `RoomSizeScale` | `2.0` |
| `OcclusionMultiplier` | `0.6` |
| `LowPassCutoff` | `4000` |
| `bApplyToSFX` | `true` |
| `bApplyToAmbience` | `true` |
| `bApplyToDialogue` | `true` |
| `TransitionTime` | `2.5` |
### `DA_RP_VoidSpace`
| Field | Value |
|-------|-------|
| `RoomPresetName` | `VoidSpace` |
| `ReverbDensity` | `0.15` |
| `ReverbDecayTime` | `8.0` |
| `ReverbWetLevel` | `0.8` |
| `ReflectionsDelay` | `120.0` |
| `RoomSizeScale` | `3.0` |
| `OcclusionMultiplier` | `0.0` (ethereal — no occlusion) |
| `LowPassCutoff` | `3000` |
| `bApplyToSFX` | `true` |
| `bApplyToAmbience` | `true` |
| `bApplyToDialogue` | `true` |
| `TransitionTime` | `3.0` (dramatic slow transition) |
### `DA_RP_Industrial`
| Field | Value |
|-------|-------|
| `RoomPresetName` | `Industrial` |
| `ReverbDensity` | `0.6` |
| `ReverbDecayTime` | `2.0` |
| `ReverbWetLevel` | `0.4` |
| `ReflectionsDelay` | `25.0` |
| `RoomSizeScale` | `2.2` |
| `OcclusionMultiplier` | `0.4` |
| `LowPassCutoff` | `6000` |
| `bApplyToSFX` | `true` |
| `bApplyToAmbience` | `true` |
| `bApplyToDialogue` | `true` |
| `TransitionTime` | `1.5` |
### `DA_RP_Bathroom`
| Field | Value |
|-------|-------|
| `RoomPresetName` | `Bathroom` |
| `ReverbDensity` | `0.9` |
| `ReverbDecayTime` | `1.2` |
| `ReverbWetLevel` | `0.55` |
| `ReflectionsDelay` | `8.0` |
| `RoomSizeScale` | `0.6` |
| `OcclusionMultiplier` | `0.7` |
| `LowPassCutoff` | `7000` |
| `bApplyToSFX` | `true` |
| `bApplyToAmbience` | `true` |
| `bApplyToDialogue` | `true` |
| `TransitionTime` | `1.0` |
---
## 5. Functions
### Public Functions
#### `GetProfileName` → `FName`
- **Description:** Returns the `RoomPresetName` from the acoustic profile. Used for debug display and logging.
- **Parameters:** *(none)*
- **Blueprint Authority:** Any (Pure)
#### `GetTransitionTime` → `Float`
- **Description:** Returns the crossfade duration. Used by `SS_AudioManager` for transition interpolation.
- **Parameters:** *(none)*
- **Blueprint Authority:** Any (Pure)
#### `ShouldApplyToBus` → `Boolean`
- **Description:** Returns whether this preset should apply reverb to a specific bus category.
- **Parameters:**
| Param | Type | Description |
|-------|------|-------------|
| `Bus` | `E_AudioBusCategory` | Which bus to check |
- **Blueprint Authority:** Any (Pure)
---
## 6. Blueprint Graph Logic Flow
### Room Preset Application (in SS_AudioManager)
```mermaid
flowchart TD
A[Enter Room Audio Zone] --> B[BP_RoomAudioZone.OnBeginOverlap]
B --> C[SS_AudioManager.SetRoomPreset: DA_RoomAcousticPreset]
C --> D[Read AcousticProfile fields]
D --> E{bApplyToSFX?}
E -->|Yes| F[Apply reverb to SFX Bus]
E -->|No| G[Skip SFX Bus]
F --> H{bApplyToAmbience?}
G --> H
H -->|Yes| I[Apply reverb to Ambience Bus]
H -->|No| J[Skip Ambience Bus]
I --> K{bApplyToDialogue?}
J --> K
K -->|Yes| L[Apply reverb to Dialogue Bus]
K -->|No| M[Skip Dialogue Bus]
L --> N[Begin crossfade over TransitionTime]
M --> N
N --> O[Room transition complete]
```
---
## 7. Data Asset Edibility Notes
### Sound Designer Workflow
1. Create a new Data Asset: `Miscellaneous → Data Asset → DA_RoomAcousticPreset`
2. Name it with the `DA_RP_` prefix (e.g., `DA_RP_ConcertHall`)
3. Fill in the `AcousticProfile` struct with desired reverb values
4. Set `PresetDisplayName` and `PresetDescription` for editor clarity
5. Set `TransitionTime` based on how dramatic the room change should feel
6. Assign the preset to `BP_RoomAudioZone.RoomPreset` in level
### Creating a New Room Preset
1. Duplicate the closest existing preset (e.g., copy `DA_RP_SmallRoom` for a closet)
2. Adjust values:
- Smaller room → higher `ReverbDensity`, lower `ReverbDecayTime`, lower `RoomSizeScale`
- Larger room → lower `ReverbDensity`, higher `ReverbDecayTime`, higher `RoomSizeScale`
- Outdoor → near-zero `ReverbWetLevel`, minimal `ReflectionsDelay`
- Cave/underground → high `ReverbDecayTime`, high `OcclusionMultiplier`, low `LowPassCutoff`
3. Use `bApplyToSFX` / `bApplyToAmbience` / `bApplyToDialogue` to selectively apply reverb (e.g., dialogue through a radio should NOT get room reverb)
### Tuning Guidelines
| Parameter | Small Room | Medium Room | Large Hall | Outdoor | Cave |
|-----------|-----------|-------------|------------|---------|------|
| `ReverbDensity` | 0.40.6 | 0.30.5 | 0.60.8 | 0.00.1 | 0.70.9 |
| `ReverbDecayTime` | 0.30.8s | 0.82.0s | 2.04.0s | 0.10.5s | 3.06.0s |
| `ReverbWetLevel` | 0.150.3 | 0.20.4 | 0.40.6 | 0.00.1 | 0.50.8 |
| `ReflectionsDelay` | 520ms | 1540ms | 3060ms | 210ms | 4080ms |
| `RoomSizeScale` | 0.51.0 | 1.02.0 | 2.03.0 | 3.0 | 1.52.5 |
| `LowPassCutoff` | 500010000Hz | 600012000Hz | 800016000Hz | 20000Hz | 20005000Hz |
---
## 8. Communication Matrix
| Who Talks | How | What Is Sent |
|-----------|-----|-------------|
| `BP_RoomAudioZone` (133) | `Direct: Reference` | Holds a `DA_RoomAcousticPreset` as `RoomPreset` variable |
| `SS_AudioManager` (132) | `Function Call: SetRoomPreset(Preset)` | Receives preset, interpolates reverb parameters |
| `SS_AudioManager` (132) | `Function Call: PopRoomPreset()` | Restores previous preset from stack |
| Sound Design Team | Data Asset Editor | Edits reverb profiles, transition times |
---
## 9. Validation / Testing Checklist
- [ ] All 7 default presets exist in `Content/Framework/Audio/RoomPresets/`
- [ ] Each preset has a unique `RoomPresetName`
- [ ] `ReverbDensity`, `ReverbWetLevel`, `OcclusionMultiplier` values between 0.0 and 1.0
- [ ] `ReverbDecayTime` > 0.1 (minimum audible)
- [ ] `ReflectionsDelay` between 0 and 200ms
- [ ] `RoomSizeScale` between 0.5 and 3.0
- [ ] `LowPassCutoff` between 1000 and 20000 Hz
- [ ] `TransitionTime` between 0.5 and 5.0 seconds
- [ ] `bApplyToSFX` is true for all presets (SFX should always get room reverb)
- [ ] `DA_RP_Outdoor` has `bIsDefaultFallback = true`
- [ ] `DA_RP_VoidSpace` has longer `TransitionTime` (dramatic effect)
- [ ] At least one preset has `bApplyToDialogue = false` (for testing isolated dialogue bus)
- [ ] Edge case: Switching to a preset with `TransitionTime = 0` applies instantly
- [ ] Edge case: `RoomSizeScale = 3.0` (Outdoor) — no audible "room" reflection artifacts
- [ ] Edge case: `ReverbDecayTime = 8.0` (VoidSpace) — long tail sounds ethereal, not glitchy
---
## 10. Reuse Notes
- Create as many presets as needed per level. Presets are small Data Assets — negligible memory cost.
- `bApplyToAmbience = false` is useful for "music-only" zones (e.g., boss arenas where ambient reverb would muddy the music).
- `bApplyToDialogue = false` is useful for radio/phone conversations — the EQ toggle on the Dialogue bus handles the "radio voice" effect, not room reverb.
- The `TransitionTime` field should be tuned carefully: too fast sounds abrupt; too slow feels laggy. 1.01.5s is a safe default.
- For open-world streaming, assign the outdoor preset as the global default and place room zones only around enclosed spaces — this minimizes active zone overlap.
---
*Blueprint Spec: DA_RoomAcousticPreset — Room acoustic profile Data Asset. Architecture document: [`metasounds-audio-system.md`](../../architecture/metasounds-audio-system.md)*