본문으로 건너뛰기

SoundTrace SDK for Unreal Engine

SoundTrace Unreal Engine SDK는 Unreal의 오디오 소스, 리스너와 메시를 STCoreV2에 연결하는 실시간 공간 음향 플러그인입니다. 프로젝트 전역 설정과 Actor Component를 통해 음향 경로, 재질, HRTF와 GPU 연산을 구성합니다.

요구 사항과 플랫폼​

항목요구 사항 / 지원 범위
Unreal Engine5.6 이상
지원 플랫폼Windows x64, macOS, Linux, Android, iOS

설치​

  1. Unreal Editor와 대상 프로젝트를 닫습니다.
  2. SDK의 Plugins/SoundTracing을 대상 프로젝트의 Plugins/ 아래에 복사합니다.
  3. .uproject를 열고 SoundTracing plugin을 활성화합니다.
  4. C++ module compile을 완료하고 Editor를 다시 시작합니다.
  5. Project Settings > Plugins > SoundTracing에서 전역 설정을 확인합니다.
YourProject/
└─ Plugins/
└─ SoundTracing/
├─ Content/
├─ Source/
└─ ThirdParty/

Plugin 폴더만 배포할 때도 Content/STData와 ThirdParty/STCoreV2를 함께 유지하십시오. Material preset, HRTF와 native runtime이 이 경로를 사용합니다.

Unreal 에디터 설정​

  1. Edit > Project Settings > Platforms에서 대상 플랫폼의 Audio 설정을 엽니다.
  2. Spatialization Plugin을 SoundTracing으로 설정합니다.
  3. Source Data Override Plugin을 SoundTracing으로 설정합니다.
  4. 에디터를 다시 시작합니다.
  5. Project Settings > Plugins > SoundTracing을 열어 전역 설정을 확인합니다.

Project Settings에서 SoundTracing 선택

Windows 프로젝트는 아래 값으로 시작한 뒤 오디오 부하에 맞춰 조정할 수 있습니다.

설정시작 값
Audio Sample Rate48000 Hz
Callback Buffer Frame Size1024
Buffers To Enqueue2

오디오 에셋 임포트 설정 — 모노​

일반 Sound Wave와 모노 Sound Wave 에셋

SoundTrace로 공간화할 음원은 모노(1채널)로 준비합니다.

  1. 오디오 편집 도구에서 원본을 모노 PCM WAV 파일로 내보냅니다.
  2. Content Browser의 Import로 파일을 가져옵니다. 가져온 파일은 Sound Wave 에셋으로 생성됩니다.
  3. Sound Wave의 채널 수가 1인지 확인합니다.
  4. Audio Component의 Sound에 이 에셋을 지정합니다.

모노는 입력 음원의 채널 구성입니다. 헤드폰 방향감은 SoundTrace가 리스너를 기준으로 렌더링합니다. 오디오 파일을 가져오는 기본 절차는 Unreal 오디오 임포트 안내를 참고하십시오.

가장 빠른 시작​

  1. Project Settings > Plugins > SoundTracing에서 Quality Preset = Fast로 시작합니다.
  2. Content Browser의 Sounds > SoundTracing > SoundTracing Audio Spatialization Settings에서 소스 설정 에셋을 만듭니다.
  3. Sound Attenuation 에셋을 만들고 Enable Spatialization을 켭니다. Spatialization Method는 Plugin-Spatialized로 선택하고, Spatialization Plugin Settings 배열에 앞서 만든 소스 설정 에셋을 넣습니다.
  4. Audio Component에 모노 Sound Wave를 지정합니다. Allow Spatialization을 켜고, Override Attenuation을 끈 뒤 Attenuation Settings에 Sound Attenuation 에셋을 넣습니다.
  5. 음향 지오메트리로 사용할 StaticMeshComponent 또는 SkinnedMeshComponent의 바로 아래에 SoundTracingObjectComponent를 자식 컴포넌트로 추가합니다.
  6. Object의 Auto Set Materials를 실행하고 필요한 재질 슬롯을 조정합니다.
  7. PIE를 실행하고 Audio Component를 재생합니다. SoundTracing.Status로 런타임 준비 상태와 경로 수를 확인합니다.
  8. 경로를 보려면 Actor에 SoundTracingPathVisualizerComponent를 추가합니다.

프로젝트 전역 설정은 SoundTracing 플러그인 세팅에서 관리하며, 런타임 상태는 SoundTracingSubsystem으로 조회합니다. Listener Component를 추가하지 않으면 Unreal 오디오 리스너의 위치와 프로젝트의 기본 리스너 설정을 사용합니다.

컴포넌트 개요​

구성요소Unreal Engine SDK역할
사운드트레이싱 플러그인 세팅SoundTracingSettings, SoundTracingSubsystem프로젝트 설정, 런타임 상태 조회와 제어
리스너SoundTracingListenerComponent리스너 품질·출력 설정과 위치 재정의
소스SoundTracingSourceSettings + Audio Component소스별 방사 강도, 음향 경로와 감쇠 설정
사운드 오브젝트SoundTracingObjectComponent메시, BVH와 재질 슬롯 등록
사운드 재질SoundTracingMaterialPresetLibrary재질 프리셋과 대역별 반사·흡수·투과 설정
사운드 패스 비주얼SoundTracingPathVisualizerComponentNiagara로 음향 경로 표시

사운드트레이싱 플러그인 세팅​

SoundTracing 런타임과 기본 리스너 설정

SoundTracing 소스 상한, 감쇠, 재질과 경로 설정

Detail Properties​

SoundTracingSettings에서 전역 설정을 관리하고 SoundTracingSubsystem에서 런타임을 제어합니다. 전역 설정은 Project Settings > Plugins > SoundTracing에서 편집합니다. 표는 SDK 기본값을 나타내며, 이미지의 값은 설정 예시입니다.

필드기본값설명
Propagation Thread Count-1-1..64. -1은 논리 코어 수를 기준으로 자동 설정하며 0과 1은 단일 스레드입니다. 변경 후 재시작합니다.
Use GPU Backend꺼짐GPU 연산을 요청합니다. 초기화할 수 없으면 CPU로 실행합니다. 변경 후 재시작합니다.
Path Cache Size2560..1024. 활성 소스가 공유하는 경로 캐시 크기입니다. 0은 캐시를 끕니다.
Propagation Interval (ms)00..500. 연산 요청의 최소 간격입니다. 0은 매 게임 tick에 요청하며 실행 중 요청은 합쳐집니다.
Quality Preset, Listener Rays, HRTF, Render QualityFast기본 리스너 프로필입니다. 아래 리스너 Detail Properties 표에서 각 항목을 설명합니다.
Source Ray Resolution Cap00..32. 소스별 리버브 ray 해상도의 전역 상한입니다. 0은 추가 제한을 두지 않습니다.
Source Ray Depth Cap00..16. 소스별 리버브 ray 깊이의 전역 상한입니다. 0은 추가 제한을 두지 않습니다.
경로별 Strength각각 1.0Direct, Reflection, Diffraction, Reverb, Transmission의 감쇠 강도입니다. 0.5..1.5이며 프로젝트 감쇠 설정을 사용하는 소스에 적용합니다. 값이 클수록 같은 거리에서 더 빠르게 감쇠합니다.
Material Preset Library미지정비워 두면 번들 라이브러리를 사용합니다. 다른 라이브러리를 지정하면 재시작합니다.
Paths, Air Absorption활성화기본 리스너의 경로 종류와 공기 흡수 설정입니다.

공개 메서드​

Blueprint에서는 Get World Subsystem으로 SoundTracingSubsystem을 가져옵니다. C++에서는 USoundTracingSubsystem::Get(WorldContextObject)를 사용할 수 있습니다.

메서드반환값 / 동작
Get(const UObject* WorldContextObject)C++ 정적 메서드입니다. 해당 World의 Subsystem을 반환합니다.
IsNativeRuntimeReady()bool. 네이티브 라이브러리, 씬과 리스너가 준비되었는지 반환합니다.
IsGpuPropagationActive()bool. GPU 연산이 실제 활성화되었는지 반환합니다.
GetGpuBackendStatus()FString. GPU active, CPU 또는 전환 사유가 포함된 CPU fallback (...)입니다. 런타임에 접근할 수 없으면 Unavailable입니다.
GetLastValidPathCount()int32. 최근 완료된 연산의 유효 경로 수입니다.
GetLastNativeError()FString. 최근 네이티브 오류입니다. 최근 프레임이 성공하면 빈 문자열입니다.
GetNativeVersion()FString. 네이티브 라이브러리의 major.minor.revision 버전입니다.
GetRegisteredObjectCount()int32. 현재 World에 등록된 오브젝트 수입니다.
GetActiveListenerSettings()FSoundTracingListenerSettings. 실제 적용 중인 리스너 설정입니다.
ResetMotionState()순간이동이나 레벨 전환 뒤 리스너와 소스의 이동 이력을 초기화합니다.
RequestPropagationFrame()정규 갱신 주기 외에 음향 연산을 요청합니다.

공개 프로퍼티​

다음은 USoundTracingSettings의 C++ 설정 멤버입니다. GetDefault<USoundTracingSettings>()로 프로젝트 설정을 읽을 수 있습니다.

프로퍼티타입설명
PropagationThreadCountint32설정된 연산 스레드 수입니다.
bEnableGpuPropagationboolGPU 사용 요청입니다. 실제 활성 상태는 IsGpuPropagationActive()로 확인합니다.
PathCacheSizeint32경로 캐시 크기입니다.
PropagationIntervalMsint32연산 요청 최소 간격(ms)입니다.
DefaultListenerSettingsFSoundTracingListenerSettings프로젝트의 기본 리스너 프로필입니다.
SourceRayResolutionCap, SourceRayDepthCapint32소스 ray의 전역 해상도·깊이 상한입니다.
DefaultSourceAttenuationStrengthsFSoundTracingAttenuationStrengths경로별 기본 거리 감쇠 강도입니다.
MaterialPresetLibraryTSoftObjectPtr<USoundTracingMaterialPresetLibrary>시작 시 등록할 재질 라이브러리입니다.

리스너​

기본 리스너 프로필 설정

SoundTracingListenerComponent를 Pawn이나 Camera에 추가하여 Project Settings의 Listener profile을 Level별로 바꾸거나, Unreal audio-device listener 대신 이 component의 transform을 사용할 수 있습니다.

Detail Properties​

리스너 프로필의 공통 설정은 Project Settings와 Listener Component에서 같습니다. 위 이미지는 Project Settings의 기본 리스너 프로필입니다. 컴포넌트에서는 아래 재정의 옵션을 함께 설정합니다.

필드기본값동작
Override Project Listener Settings켜짐Listener Settings를 Project Settings 대신 적용합니다.
Listener SettingsFastQuality, HRTF, output mode, path와 air absorption 설정입니다.
Drive Listener Transform꺼짐이 component의 world transform과 velocity를 native listener에 전달합니다.

한 World에서는 하나의 Listener Component만 active listener를 구동합니다. 둘 이상이 Begin Play되면 나중 component가 이전 component를 교체하고 Output Log에 경고를 남깁니다.

리스너 프로필 필드기본값설명
Quality PresetFastCustom, Fast, Middle, Quality 중 선택합니다.
Ray Resolution, Ray Depth16, 4각각 1..32, 1..16. 경로 탐색 해상도와 깊이이며 Custom에서 편집합니다.
Output ModeHeadphones헤드폰 또는 스피커 출력을 선택합니다.
Hrtf ModeHRIR Interpolated아래 HRTF 표를 참고하십시오.
Custom HRTF Relative Path빈 문자열플러그인 Content 기준의 사용자 HRTF 경로입니다. 비워 두면 내장 테이블을 사용합니다.
HRTF Path Budget11..32. 방향별 HRTF를 적용할 상위 경로 수입니다.
Diffuse Enabled, Diffuse Quality꺼짐, Low초기 산란음과 품질을 설정합니다. Low/Medium/High는 최대 128/512/1024개의 산란 경로를 유지합니다.
Delay InterpolationLinearLinear, Cubic Lagrange, Lagrange 6 지연 보간을 선택합니다.
Early Path Budget1280..4096. 전체 이동 지연 처리를 적용할 초기 간접 경로 수입니다. 0은 제한을 해제합니다.
Render Band TierMerged4Merged4 또는 Full8로 렌더링 대역 수를 선택합니다.
경로별 Enable … Path모두 켜짐Direct, Reflection, Diffraction, Reverb, Transmission 경로를 각각 켜거나 끕니다.
Air Absorption Enabled켜짐공기 흡수에 의한 감쇠를 적용합니다.
Temperature Celsius20-40..60 °C. 공기 온도입니다.
Relative Humidity Percent500..100%. 상대습도입니다.
Pressure Pa10132550000..120000 Pa. 기압입니다.

Quality Preset​

Fast, Middle, Quality를 선택하면 ray와 고급 render 품질 값이 함께 적용됩니다. 직접 편집하려면 Custom을 선택하십시오.

프리셋Ray ResolutionRay DepthHRTF Path BudgetDiffuseDelay InterpolationEarly Path Budget
Custom저장된 값저장된 값저장된 값저장된 값저장된 값저장된 값
Fast1641꺼짐 / LowLinear128
Middle2481켜짐 / MediumCubic Lagrange128
Quality32121켜짐 / HighLagrange 6128

HRTF Path Budget은 full directional HRTF voice를 받을 상위 path 수입니다. 기본 preset은 audio-thread 여유를 위해 모두 1을 사용합니다. Custom에서 값을 크게 올리면 source가 많은 scene에서 dropout이 발생할 수 있습니다.

HRTF와 출력 모드​

HRTF 모드필요한 asset설명
Band8없음8-band magnitude와 ITD를 사용하는 경량 모드
HRIRSTCoreV2 embedded table측정 HRIR의 가장 가까운 방향을 사용
HRIR InterpolatedSTCoreV2 embedded table측정 HRIR을 방향에 따라 보간하는 기본 모드

Custom HRTF Relative Path에는 plugin Content 기준의 MPI1, SAH1, BPH1 table 경로를 지정할 수 있습니다. 비워 두면 STCoreV2에 내장된 table을 사용합니다.

Output Mode설명
HeadphonesBinaural HRTF 출력
Speaker내부 Ambisonic stereo decode 출력

Advanced 설정의 Render Band Tier는 Merged4가 권장 기본값이며, Full8은 path별 audio-thread band 연산을 늘립니다. Air Absorption 기본값은 20 °C, 상대습도 50%, 101325 Pa이고 ISO 9613-1 감쇠에 사용됩니다.

공개 메서드​

메서드동작
ApplyListenerSettings()현재 Detail Properties 값을 native listener에 다시 적용합니다.
SetQualityPreset(Preset)Quality preset을 변경하고 즉시 적용합니다.
SetHrtfMode(Mode)HRTF mode를 변경하고 즉시 적용합니다.
SetOutputMode(Mode)Headphones/Speaker를 변경하고 즉시 적용합니다.
ResetMotionState()Teleport, respawn 뒤 listener/source velocity history를 초기화합니다.
GetListenerSettings()현재 component의 listener settings를 반환합니다.
static GetActiveListener(const UWorld* World)C++에서 해당 World의 활성 Listener Component를 반환합니다.

공개 프로퍼티​

프로퍼티타입 / 접근설명
bOverrideProjectListenerSettingsbool / 읽기·쓰기컴포넌트의 리스너 프로필 사용 여부입니다.
ListenerSettingsFSoundTracingListenerSettings / 읽기·쓰기컴포넌트의 품질·출력·경로 설정입니다. 런타임에서 직접 변경하면 ApplyListenerSettings()로 반영합니다.
bDriveListenerTransformbool / 읽기·쓰기컴포넌트의 위치와 방향으로 리스너를 구동할지 지정합니다.

소스​

소스 설정 에셋 Detail Properties

Content Browser에서 Sounds > SoundTracing > SoundTracing Audio Spatialization Settings를 만들고 같은 역할의 source가 공유하도록 구성합니다. Audio Component마다 asset을 복제할 필요는 없습니다.

Detail Properties​

필드기본값범위/동작
Intensity1.00..10. 모든 path에 곱하는 linear emission gain
Gain Boost Db0 dB-24..24 dB. Intensity 위에 적용하는 추가 gain
Reverb Send Db0 dB-24..24 dB. Late reverb send
Reflection Send Db0 dB-24..24 dB. Early reflection send
Ray PresetCustomCustom, Fast(8×8, depth 4), Middle(16×16, depth 4), Quality(24×24, depth 4). Custom이 아니면 아래 두 값을 preset 값으로 덮어씁니다. Unity SoundTraceSource의 Reverb Ray Resolution에 해당하며, asset을 공유하는 모든 source에 적용됩니다.
Ray Resolution240..32. 0은 Listener의 ray grid를 상속하고 그 외 값은 N × N source reverb ray를 사용
Ray Depth40..16. 0은 Listener의 depth를 상속
경로별 … Path Enabled모두 켜짐Direct, Reflection, Diffraction, Reverb, Transmission 경로를 소스별로 켜거나 끕니다.
Override Project Attenuation Strengths켜짐꺼지면 Project Settings의 기본 attenuation을 사용
path별 Strength1.00.5..1.5. 값이 클수록 같은 거리에서 더 빠르게 감쇠
Max Delay Seconds1.0 s0.01..5 s. Renderer가 유지하는 최대 propagation delay
Path Fade Time Seconds0.066 s0.001..0.5 s. Path 진입/제거 fade
Path Hold Time Seconds0.120 s0..1 s. 사라진 non-direct path를 fade 전에 유지. 0은 hold 끄기
Max Delay Rate0.10.001..0.999. Sample마다 허용하는 최대 delay 변화량
Bypass꺼짐SoundTrace spatial rendering을 건너뛰고 입력을 그대로 통과

Audio Component에 연결​

소스 설정 에셋을 Sound Attenuation에 연결하고, 이 Attenuation 에셋을 Audio Component에 지정합니다. 같은 종류의 음원은 두 에셋을 공유할 수 있습니다.

Sound Attenuation의 Spatialization Plugin Settings에 소스 설정 에셋 지정

Enable Spatialization을 켜고 플러그인 공간화 방식을 선택합니다. Spatialization Plugin Settings 배열에 SoundTracing Audio Spatialization Settings 에셋을 추가합니다.

Audio Component의 Attenuation Settings에 Sound Attenuation 지정

Audio Component의 Allow Spatialization을 켜고 Override Attenuation을 끕니다. Attenuation Settings에 앞서 만든 Sound Attenuation을 지정합니다.

공개 메서드​

USoundTracingSourceSettings가 제공하는 C++ 메서드입니다. 재생·정지 제어에는 Audio Component의 Play()와 Stop()을 사용합니다.

메서드반환값 / 동작
GetEffectiveAttenuationStrengths()FSoundTracingAttenuationStrengths. 재정의 여부에 따라 소스 또는 프로젝트의 감쇠 강도를 반환합니다.
ApplyRayPreset()RayPreset에 맞춰 RayResolution과 RayDepth를 갱신합니다. Custom에서는 값을 유지합니다.

사운드 오브젝트​

SoundTracingObjectComponent Detail Properties

SoundTracingObjectComponent는 immediate parent의 StaticMeshComponent 또는 SkinnedMeshComponent를 음향 geometry로 등록합니다. Actor의 임의 위치에 두는 것이 아니라 대상 mesh component의 바로 아래 child로 추가해야 합니다.

Detail Properties​

필드기본값설명
Auto Register Native Object켜짐Begin Play에서 native object를 자동 등록
Sync Transform On Tick켜짐Parent transform이 바뀔 때만 native transform 갱신
Auto Sync Materials켜짐Parent render material이 바뀌면 slot 목록 갱신
Update TypeStaticGeometry update policy
BVH TypeLBVH SIMD8Native acceleration structure builder
BVH Max Depth121..32
Primitives Per Leaf161..128
Sync Skinned Vertices On Tick꺼짐Refit에서 현재 skeletal pose를 매 tick 업로드
Sound Material Slots자동 생성Render material slot과 SoundTrace preset의 mapping
Visualize BVH꺼짐Editor component visualizer로 BVH line 표시
BVH Visualization Color하늘색BVH 표시 색상입니다.
Native Object Id, Native Mesh Id-1등록된 네이티브 ID입니다. 읽기 전용이며 미등록 상태는 -1입니다.

Static Mesh는 Forced LOD가 있으면 그 LOD를, 없으면 LOD 0을 올립니다. Skinned Mesh도 Forced LOD를 우선하고 현재 pose의 vertex를 등록합니다.

Geometry와 BVH​

BVH TypeRefitGPU backend설명
HKDTree지원미지원KD split 기반. Refit 뒤 BVH-style fallback traversal 사용
LBVH지원미지원Scalar Morton LBVH
LBVH SIMD4지원지원4-wide leaf intersection
LBVH SIMD8지원지원현재 기본값
LBVH SIMD16지원지원16-wide leaf intersection

GPU backend를 요청했는데 HKDTree나 scalar LBVH를 선택하면 plugin은 upload 가능한 LBVH SIMD8로 native builder를 대체합니다.

Update Type사용 대상
Static움직이지 않는 level geometry
DynamicTransform만 변하는 door, prop. TLAS instance 갱신
RefitVertex pose가 변하고 topology는 유지되는 Skinned Mesh
RebuildTriangle topology가 바뀌어 BVH를 다시 만들어야 하는 geometry

Skinned animation을 반영하려면 Update Type = Refit과 Sync Skinned Vertices On Tick = true를 함께 사용하십시오. Plugin은 current pose vertex를 업로드하고 native mesh를 refit합니다. 매 tick CPU skinning과 vertex upload가 발생하므로 대상이 많은 scene에서는 update 대상과 LOD를 제한하십시오.

같은 Static Mesh, LOD, material mapping과 BVH 설정을 쓰는 object는 하나의 native BVH를 공유합니다. Skinned Mesh cache key에는 component path가 포함되어 서로 다른 pose가 같은 native mesh를 덮어쓰지 않습니다.

공개 메서드​

메서드동작
RegisterNativeObject()Parent geometry를 native scene에 등록합니다.
UnregisterNativeObject()Native object 등록을 해제합니다.
SyncNativeTransform()현재 parent transform을 즉시 반영합니다.
RefreshNativeMesh()Mesh 또는 material 변경 뒤 geometry를 다시 업로드합니다.
SyncMaterialsFromParent() (Auto Set Materials)Parent render material 이름과 alias로 preset을 자동 매칭합니다.
SetMaterialPresetIndex(Slot, Preset)한 slot의 preset index를 변경합니다.
SetMaterialPresetForAllSlots(Preset)모든 slot에 같은 preset을 적용합니다.
SetUpdateType(Type)Native object의 update policy를 변경합니다.
GetResolvedMeshLodIndex()실제 업로드한 LOD index를 반환합니다.
GetUploadedTriangleCount()마지막 업로드의 triangle 수를 반환합니다.
IsRegistered()Native object와 mesh가 모두 유효한지 반환합니다.
GetNativeObjectId(), GetNativeMeshId()등록된 네이티브 ID를 반환합니다. 미등록 상태에서는 -1입니다.
GetTargetMeshComponent()등록 대상인 바로 위 부모 메시 컴포넌트를 반환합니다.
static IsGpuCompatibleBvhType(ESoundTracingBvhType InBvhType)SIMD LBVH 계열이면 true를 반환합니다.
GetBvhMaxDepth(), GetPrimitivesPerLeafNode(), GetBvhType()C++에서 BVH 설정을 조회합니다.
GetSoundMaterialSlots()C++에서 사운드 재질 슬롯 배열의 읽기 전용 참조를 반환합니다.
BuildNativeBvhDebugLineSegments(TArray<FVector>& OutLocalLinePoints)C++에서 BVH 디버그 선분을 로컬 좌표로 얻습니다.
ShouldVisualizeBvh(), GetBvhVisualizationColor()Editor 전용 C++ 메서드로 BVH 표시 여부와 색상을 조회합니다.

사운드 재질과 Transmission​

SoundTracing Material Preset Library Detail Properties

Detail Properties​

기본 library는 plugin의 Content/STData/Material/SoundTraceMaterialPresetLibrary.uasset이며, 현재 Unity/Web SDK와 같은 22개 material table을 포함합니다.

Custom library는 Content Browser의 Sounds > SoundTracing > SoundTracing Material Preset Library에서 만듭니다. 새 asset은 현재 기본 library를 복제하며, Project Settings의 Material Preset Library에 지정한 뒤 Editor를 다시 시작해야 합니다.

필드설명
Presets사운드 재질 목록입니다.
Display Name, Aliases선택 목록의 이름과 렌더 재질 자동 매칭에 사용할 별칭입니다.
Material Index네이티브 재질 인덱스입니다. 목록 순서에 맞춰 관리됩니다.
Scattering0..1. 정반사와 산란 비율입니다.
Reflection, Absorption, Transmission8개 대역의 반사·흡수·투과 에너지 계수입니다. 각 값은 0..1입니다.
Transmission ModelSurface 또는 Solid Distance를 선택합니다.
Thickness to -30 dB (m)Solid Distance의 대역별 감쇠 기준 거리입니다.
ResetToBundledJson프리셋 목록을 번들 JSON의 값으로 되돌립니다.

주파수 대역 중심은 67.5, 125, 250, 500, 1000, 2000, 4000, 8000 Hz입니다. Editor의 band graph를 클릭하거나 drag하여 각 값을 편집할 수 있습니다.

Transmission Model​

모델입력Geometry 조건
Surface표면을 한 번 통과한 뒤 남는 대역별 energy coefficient 0..1열린 면과 얇은 surface에 사용 가능
Solid Distance전송 energy가 -30 dB가 되는 대역별 material 기준 거리(m)닫힌 volume과 일관된 face 방향 필요

Solid Distance 값은 object의 실제 두께가 아닙니다. Runtime이 ray가 geometry 내부를 이동한 실제 거리를 계산해 이 기준 거리로 감쇠합니다. 0은 해당 band를 완전히 차단합니다.

Library의 ImportFromJson, ExportToJson, ResetToBundledJson은 Unity/Web SDK와 같은 soundMaterial.json 형식을 사용합니다. transmissionDistanceToMinus30DbMeters가 없으면 Surface, 유효한 8개 값이 있으면 Solid Distance입니다.

공개 메서드​

메서드반환값 / 동작
NormalizePresets()프리셋 인덱스와 대역별 값을 정규화합니다.
GetPresetCount()프리셋 수를 반환합니다.
FindBestPresetIndexByName(const FString& RenderMaterialName)렌더 재질 이름과 별칭에 맞는 프리셋 인덱스를 찾습니다.
GetPresetDisplayName(int32 PresetIndex)프리셋의 표시 이름을 반환합니다.
ResetToBundledJson()목록을 번들 JSON으로 교체합니다. 에디터 버튼 또는 C++에서 호출합니다.
ExportToJson()soundMaterial.json 형식의 문자열을 반환합니다.
ImportFromJson(const FString& JsonText)JSON으로 목록을 교체합니다. 읽을 수 있는 재질이 없으면 false를 반환합니다.
FindBestPresetIndex(const UMaterialInterface* RenderMaterial)C++에서 렌더 재질에 맞는 프리셋을 찾습니다.
FindPresetIndexByToken(const FString& Token, int32 FallbackIndex)C++에서 토큰으로 프리셋을 찾습니다. 없으면 fallback 인덱스를 사용합니다.
static GetFrequencyBandCentersHz()C++에서 8개 중심 주파수 배열의 읽기 전용 참조를 얻습니다.
static LoadDefaultLibrary()C++에서 프로젝트가 지정한 라이브러리 또는 기본 라이브러리를 로드합니다.
static MakeFallbackPresets()C++에서 기본 대체 프리셋 배열을 생성합니다.
static ParseSoundMaterialJson(const FString& JsonText, TArray<FSoundTracingMaterialPreset>& OutPresets)C++에서 JSON을 프리셋 배열로 읽습니다.
static SerializeSoundMaterialJson(const TArray<FSoundTracingMaterialPreset>& InPresets)C++에서 프리셋 배열을 JSON 문자열로 변환합니다.
static LoadBundledJson(FString& OutJson)C++에서 번들 JSON 문자열을 읽고 성공 여부를 반환합니다.

공개 프로퍼티​

프로퍼티타입 / 접근설명
PresetsTArray<FSoundTracingMaterialPreset> / 읽기·쓰기라이브러리에 저장된 프리셋 배열입니다.
FrequencyBandCountstatic constexpr int32 / 상수주파수 대역 수이며 8입니다.

사운드 패스 비주얼​

컴포넌트 추가 검색 결과의 Sound Tracing Path Visualizer

Actor의 Add Component에서 Sound Tracing Path Visualizer를 검색해 추가합니다. 이 컴포넌트는 C++로 구현되어 있으며 경로 렌더링에 필요한 Niagara 컴포넌트를 생성합니다.

NS_Arrow를 사용하는 Niagara 컴포넌트의 Detail Properties

Actor에 SoundTracingPathVisualizerComponent를 추가하면 Niagara line segment로 마지막 propagation frame의 path를 표시합니다.

:::note NS_Arrow 내장 에셋 경로 Niagara System Asset은 플러그인 내장 에셋인 NS_Arrow를 사용합니다. 기본 경로는 /SoundTracing/FX/NS_Arrow.NS_Arrow입니다. 함께 사용하는 재질은 /SoundTracing/Materials/MAT_ArrowLine에 있습니다. 플러그인을 설치하거나 옮길 때 Content/FX와 Content/Materials를 함께 유지하고, Niagara 시스템과 재질 참조가 끊기지 않았는지 확인하십시오. :::

Detail Properties​

필드기본값설명
Visualization Enabled켜짐Path 표시 여부
Refresh Interval Ms50시각화 갱신 최소 간격. Propagation 주기에는 영향 없음
Max Visualized Paths1024표시할 최대 path 수. 범위 16..5000
Path Alpha Intensity0.5Segment alpha 강도. 범위 0.01..2.0
Niagara System비어 있음비어 있으면 plugin의 default Niagara system 사용

색상은 Direct=빨강, Reflection=주황, Diffraction=초록, Transmission=하늘색, Reverb=보라입니다. 성능 측정에서는 시각화를 비활성화하십시오.

공개 메서드​

메서드반환값 / 동작
SetVisualizationEnabled(bool bEnabled)런타임에서 경로 표시를 켜거나 끕니다.
GetActivePathCount()int32. 시각화가 유지하는 현재 경로 수를 반환합니다.

샘플 데모 설명​

Unity SDK의 세 샘플과 같은 구성을 Unreal 레벨과 블루프린트로 제공합니다. Content Browser에서 Settings > Show Plugin Content를 켠 뒤 SoundTracing Content > Samples > Maps의 레벨을 열고 Play를 누릅니다. 각 레벨에는 전용 GameMode와 카메라가 설정되어 있으며, 실행하면 오디오가 자동으로 재생됩니다.

세 데모의 공통 UI는 다음과 같습니다.

버튼키보드동작
PlayP음악 또는 대화를 처음부터 재생합니다.
Pause / ResumeSpace재생을 일시정지하거나 이어서 재생합니다.
StopX재생을 정지합니다.
ResetR데모를 다시 시작합니다. 02에서는 위치와 재질도 초기화합니다.
Show / hide UI—왼쪽 조작 패널을 숨기거나 표시합니다.

레벨 경로는 /SoundTracing/Samples/Maps, 동작과 UI 블루프린트는 /SoundTracing/Samples/Blueprints에 있습니다. 음원별 설정은 /SoundTracing/Samples/Audio/Settings에서 편집합니다.

ST_SampleScene01​

ST_SampleScene01 — 방 안의 단일 음원과 리스너

10m 크기의 방에서 음원 하나와 고정 리스너로 기본 공간 음향을 확인합니다. 음악을 들어보며 방의 지오메트리와 음향 재질에 따른 소리 변화를 시각화된 경로와 비교할 수 있습니다.

SoundTrace / Unreal dry 버튼으로 SoundTrace 출력과 Unreal의 일반 출력을 전환합니다. 두 출력은 재생 위치를 맞춰 유지하므로 같은 구간을 이어 들으며 공간감과 잔향을 비교할 수 있습니다.

동작 블루프린트는 BP_Sample01, UI는 WBP_Sample01입니다.

ST_SampleScene02​

ST_SampleScene02 — 악기 음원과 리스너를 이동하는 탑뷰 데모

탑뷰에서 기타·베이스·드럼·신스의 좌우 음원 8개와 헤드폰 모양의 리스너를 이동합니다. 음악은 Quartz로 동기 재생되며, 배치와 음향 재질을 바꾸면서 방향감과 공간 응답을 비교할 수 있습니다.

조작동작
아이콘 드래그마우스 왼쪽 버튼 또는 첫 번째 터치로 음원·리스너를 이동합니다. 높이와 처음 잡은 위치의 오프셋을 유지합니다.
Mirror: ON / OFF음원을 드래그할 때 반대쪽 짝도 좌우 대칭으로 이동합니다. 켜는 순간에는 위치를 다시 정렬하지 않습니다.
SoundTrace / Unreal dry재생 위치를 유지하면서 SoundTrace 출력과 Unreal의 일반 출력을 전환합니다.
Acoustic material (floor + dome)바닥과 돔의 음향 재질을 함께 변경합니다. 초기 프리셋은 Glass이며 화면에 보이는 시각적 머티리얼과는 별개입니다.
Reset / R음원·리스너 위치, Mirror: ON, 음향 재질 Glass를 복원하고 다시 재생합니다.
Record / save / F9출력 녹음을 시작합니다. 녹음 중 다시 누르면 WAV로 저장하고 녹음을 종료합니다.
Save WAV / F10진행 중인 녹음을 WAV로 저장하고 종료합니다.

녹음 파일은 프로젝트의 Saved/BouncedWavFiles에 고유한 이름으로 저장됩니다. Unreal에서는 WAV 저장 시 현재 녹음이 종료됩니다. Unity의 녹음 중 스냅샷 내보내기와 조작 방식이 다릅니다. UI 위나 화면 가장자리 24px에서 시작한 드래그는 처리하지 않으므로 아이콘 안쪽에서 드래그를 시작합니다.

동작 블루프린트는 BP_Sample02, UI는 WBP_Sample02입니다.

ST_SampleScene03​

ST_SampleScene03 — 벽과 칸막이 사이의 남녀 음성 데모

벽과 칸막이가 있는 공간에서 남성·여성 음원 두 개가 음성 클립 8개를 번갈아 반복 재생합니다. 카메라와 함께 리스너를 이동하며 벽에 의한 차폐, 반사, HRTF 방향감과 공간의 잔향 변화를 확인합니다.

조작동작
WASD앞뒤·좌우로 이동합니다.
Q / E하강·상승합니다.
마우스 이동시점을 회전합니다.
Esc시점 조작을 해제하고 UI를 조작합니다. 에디터 PIE에서 커서를 해제하려면 Shift+F1을 사용합니다.
마우스 오른쪽 클릭시점 조작을 다시 시작합니다.
Reset / R현재 카메라 위치에서 대화를 처음부터 다시 재생합니다.

에디터 PIE에서는 Esc가 플레이 종료에 사용됩니다. 동작 블루프린트는 BP_Sample03, UI는 WBP_Sample03입니다.

트러블슈팅 팁​

증상확인할 것
플러그인이 Audio 선택 목록에 없음SoundTracing 활성화, C++ 모듈 빌드, 대상 플랫폼의 Audio 설정과 에디터 재시작을 확인합니다.
네이티브 라이브러리 로드 또는 ABI 오류설치한 SDK의 플러그인과 네이티브 라이브러리를 함께 사용하고 패키징에 ThirdParty 파일이 포함되는지 확인합니다.
소리가 나지 않거나 공간화되지 않음모노 Sound Wave, Audio Component 재생, 두 전역 Audio 플러그인, Spatialization 활성화와 에셋 연결을 확인합니다.
소스 설정이 적용되지 않음Audio Component → Sound Attenuation → SoundTracing Source Settings 연결과 Override Attenuation 설정을 확인합니다.
리스너 위치가 다름Drive Listener Transform이 켜지면 컴포넌트 위치를, 꺼지면 Unreal 오디오 리스너 위치를 사용합니다.
리스너 교체 경고한 World의 활성 Listener Component를 하나로 유지합니다.
지오메트리가 반영되지 않음Object Component가 지원 메시의 바로 아래 자식인지, 메시 데이터와 삼각형이 있는지 확인합니다.
스킨 애니메이션이 반영되지 않음Update Type = Refit, Sync Skinned Vertices On Tick = true와 LOD를 확인합니다.
GPU가 활성화되지 않음GetGpuBackendStatus()와 Output Log를 확인합니다. Windows에서는 exaSound.dll과 webgpu_dawn.dll이 함께 배포되어야 합니다.
경로가 보이지 않음Niagara 활성화, Visualization Enabled, 소스·리스너 경로 설정과 GetLastValidPathCount()를 확인합니다.
순간이동 뒤 피치가 튐위치 변경 직후 Listener 또는 Subsystem의 ResetMotionState()를 호출합니다.
음원이 많을 때 소리가 끊김아래 순서로 연산과 오디오 버퍼를 조정합니다.

음원이 많을 때 소리가 끊김​

  1. Propagation Interval (ms)를 50으로 설정하여 연산 요청 빈도를 낮춥니다.
  2. Source Ray Resolution Cap을 8..16으로 낮추거나 소스의 Ray Preset을 Fast로 설정합니다.
  3. 리스너의 Quality Preset = Fast, HRTF Path Budget = 1, Render Band Tier = Merged4로 시작합니다.
  4. Propagation Thread Count를 2..3으로 설정한 뒤 재시작하여 게임·렌더·오디오 스레드에 실행 여유를 둡니다.
  5. Buffers To Enqueue를 2 이상으로 설정합니다. 필요하면 Callback Buffer Frame Size도 조정합니다.
  6. 경로 시각화를 끄고 한 번에 하나의 설정을 바꿔 비교합니다.

런타임 상태 확인​

SoundTracing.Status
SoundTracing.DumpGpuPropagationStats

SoundTracing.Status는 네이티브 버전, 준비 상태, 연산 방식, 오브젝트·경로 수와 리스너 설정을 출력합니다. SoundTracing.DumpGpuPropagationStats는 GPU 실행과 CPU 전환 통계를 출력합니다.

다음 문서​