PART 03 · 강의 3/3

Sound Concurrency

동시 재생 제한, 우선순위 시스템, Resolution Rule로 오디오 폴리포니를 관리합니다

01

Sound Concurrency란?

동일 유형 사운드의 동시 재생 수를 제한하는 시스템

Sound Concurrency(USoundConcurrency)는 특정 그룹의 사운드가 동시에 몇 개까지 재생될 수 있는지를 정의하고, 한도를 초과할 때 어떻게 처리할지를 결정합니다. 자동 무기의 발사음이 수십 개 쌓이거나, 발자국 소리가 과도하게 겹치는 것을 방지합니다.

핵심 프로퍼티

프로퍼티타입설명
MaxCountint32동시 재생 가능한 최대 사운드 수
bLimitToOwnerboolOwner(Actor) 단위로 제한할지 여부
Resolution RuleEMaxConcurrentResolutionRule한도 초과 시 처리 규칙
Volume Scalefloat한도에 가까울수록 적용할 볼륨 감쇠
Volume Scale ModeEConcurrencyVolumeScaleMode볼륨 스케일 적용 방식

Resolution Rule 옵션

규칙동작적합한 용도
PreventNew 새 사운드 재생을 거부 이미 충분한 사운드가 재생 중일 때
StopOldest 가장 오래된 사운드를 정지 연속 발사음, 반복적 효과음
StopFarthestThenPreventNew 가장 먼 사운드를 정지, 같으면 새로운 것 거부 공간적 우선순위가 중요한 사운드
StopFarthestThenOldest 가장 먼 것 우선 정지, 같으면 가장 오래된 것 정지 대부분의 3D 효과음에 적합
StopLowestPriority 가장 낮은 우선순위 사운드를 정지 우선순위 기반 시스템
StopQuietest 가장 조용한 사운드를 정지 볼륨 기반 자동 정리
02

실전 Concurrency 설정

게임 상황별 최적의 동시 재생 설정

카테고리별 권장 설정

사운드 유형MaxCountResolution RulebLimitToOwner
자동 무기 발사음 3~4 StopOldest true
발자국 2~3 StopOldest true
폭발 4~6 StopFarthestThenOldest false
대사 1 StopOldest true
배경음악 1~2 StopOldest false
UI 클릭 2 PreventNew false
환경 루프 8~12 StopFarthestThenOldest false
C++ - Concurrency 설정 적용
// Sound Concurrency 에셋 생성 및 설정 USoundConcurrency* WeaponConcurrency = NewObject<USoundConcurrency>(); WeaponConcurrency->Concurrency.MaxCount = 4; WeaponConcurrency->Concurrency.ResolutionRule = EMaxConcurrentResolutionRule::StopOldest; WeaponConcurrency->Concurrency.bLimitToOwner = true; // 재생 시 Concurrency 지정 FPlaySoundParams Params; Params.ConcurrencySet.Add(WeaponConcurrency); // 또는 Audio Component에 설정 AudioComp->ConcurrencySet.Add(WeaponConcurrency);
03

우선순위 시스템

Voice 한도 초과 시 어떤 사운드를 유지할지 결정하는 로직

UE5는 전체 Voice 한도(MaxChannels)를 초과하면 우선순위(Priority)에 기반하여 어떤 사운드를 재생하고 어떤 사운드를 정지할지 결정합니다.

우선순위 결정 요소

요소설정 위치영향
Base Priority Sound Wave / Sound Cue / MetaSound 에셋의 기본 우선순위 값
Priority Attenuation Attenuation Settings 거리에 따른 우선순위 감소
Sound Class Priority Sound Class 클래스 전체에 적용되는 우선순위 보정
Focus Factor Attenuation Settings 플레이어 시선 방향에 있을수록 높은 우선순위
최종 우선순위 계산

최종 Priority = Base Priority + Sound Class Priority - Distance Attenuation + Focus Bonus. 전체 Voice 한도 초과 시, 가장 낮은 최종 Priority를 가진 사운드가 정지됩니다.

04

가상화 (Virtualization)

Voice 한도 초과 시 사운드를 완전히 정지하지 않고 가상화하기

UE5의 가상화(Virtualization) 시스템은 Voice 한도를 초과한 사운드를 완전히 정지하지 않고, 렌더링만 멈춘 채 상태를 추적합니다. 조건이 충족되면(다른 사운드가 끝나거나 가까워지면) 자동으로 재개됩니다.

가상화 모드동작적합한 사운드
PlayWhenSilent 가상화 중에도 시간 진행 추적 (재개 시 올바른 위치) 루프 사운드, 환경 앰비언스
Restart 재개 시 처음부터 다시 재생 짧은 효과음
가상화 활용 시나리오

넓은 오픈월드에서 수백 개의 환경 사운드 소스가 배치되어 있을 때, 가까운 것만 실제 렌더링하고 나머지는 가상화합니다. 플레이어가 이동하면 가까워진 소스가 자동으로 렌더링을 재개하여, 끊김 없는 사운드스케이프를 구현합니다.

SUMMARY

핵심 요약

  • Sound Concurrency는 동일 그룹 사운드의 동시 재생 수를 제한하여 성능을 관리한다
  • Resolution Rule로 한도 초과 시 처리 방식(StopOldest, StopFarthest 등)을 지정한다
  • 우선순위는 Base Priority, 거리 감쇠, Focus 등으로 종합적으로 계산된다
  • 가상화를 활용하면 Voice 한도를 초과한 사운드도 상태를 유지하여 자연스러운 전환이 가능하다
  • 사운드 유형별로 적절한 MaxCount와 Rule을 설정하는 것이 게임 오디오 품질의 핵심이다
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Sound Concurrency 기본 설정

USoundConcurrency 에셋을 만들어 MaxCount=3, Resolution Rule=Stop Quietest로 설정하세요. 동일 사운드를 5번 빠르게 재생하여 3개만 동시 재생되고 가장 조용한 것이 중단되는지 확인하세요.

실습 2: 카테고리별 Concurrency 전략

발자국(MaxCount=2), 총소리(MaxCount=8), 환경음(MaxCount=4), 음악(MaxCount=1) 등 카테고리별 Concurrency 설정을 만들고, 각각에 적합한 Resolution Rule(Stop Oldest, Stop Farthest Away 등)을 선택하여 테스트하세요.

심화 과제: 동적 Concurrency 관리 시스템

플랫폼 성능에 따라 MaxCount를 동적으로 조절하는 시스템을 구현하세요. CPU 오디오 사용량이 임계값을 초과하면 우선순위가 낮은 카테고리의 MaxCount를 줄이고, 여유가 생기면 복원하는 적응형 관리를 구현하세요.