플랫폼별 최적화
PC, 콘솔, 모바일 플랫폼별 오디오 스트리밍, 압축, Voice 관리 전략
플랫폼별 오디오 예산
각 플랫폼의 CPU, 메모리, Voice 예산 가이드라인
| 항목 | PC (고사양) | 콘솔 (PS5/XSX) | 모바일 | Switch |
|---|---|---|---|---|
| Max Channels | 64~128 | 48~64 | 16~24 | 24~32 |
| Audio CPU 예산 | <10% | <8% | <5% | <6% |
| 오디오 메모리 | 200~500MB | 150~300MB | 30~80MB | 50~100MB |
| 권장 샘플레이트 | 48kHz | 48kHz | 24~48kHz | 48kHz |
| HRTF 지원 | 전체 | 전체 | 제한적 | 제한적 |
UE5의 Platform Settings에서 플랫폼별로 Max Channels, 압축 품질, 샘플레이트 등을 개별 설정할 수 있습니다. 하나의 프로젝트에서 PC와 모바일을 동시에 타겟팅할 때 필수입니다.
압축과 포맷 최적화
플랫폼별 오디오 압축 포맷과 품질 설정
| 플랫폼 | 압축 포맷 | 특징 | 품질 권장 |
|---|---|---|---|
| PC / 콘솔 | OGG Vorbis | 범용 손실 압축, 좋은 품질/크기 비율 | 40~80 |
| iOS | ADPCM / AAC | 하드웨어 디코딩 지원, 낮은 CPU 부하 | 40~60 |
| Android | OGG Vorbis | 소프트웨어 디코딩, 범용 호환 | 30~60 |
| Switch | Opus / ADPCM | 낮은 메모리 사용 | 30~60 |
사운드 유형별 압축 전략
| 사운드 유형 | 압축 품질 | 샘플레이트 | 채널 | 로딩 |
|---|---|---|---|---|
| UI 효과음 | 60~80 | 48kHz | Mono | ForceInline |
| 발자국/충격 | 40~60 | 48kHz | Mono | ForceInline |
| 무기 발사 | 60~80 | 48kHz | Mono | RetainOnLoad |
| 환경 앰비언스 | 30~50 | 24~48kHz | Stereo | LoadOnDemand |
| 배경음악 | 40~60 | 48kHz | Stereo | LoadOnDemand |
| 대사 | 40~60 | 24~48kHz | Mono | LoadOnDemand |
모바일에서는 1) Mono를 최대한 활용 (스테레오의 절반 크기), 2) 배경음은 24kHz로 다운샘플링, 3) 짧은 효과음은 ADPCM으로 CPU 부하 최소화, 4) 긴 파일은 반드시 스트리밍으로 설정하세요.
Voice 관리와 폴리포니
제한된 Voice를 효율적으로 활용하는 전략
Voice 절약 기법
Sound Concurrency 활용
유형별 동시 재생 수를 제한. 자동 무기는 3~4개, 발자국은 2~3개로 제한
거리 컬링
Attenuation의 Falloff Distance 밖 사운드는 렌더링하지 않음. 가능한 짧은 Falloff 사용
가상화 활용
PlayWhenSilent로 먼 사운드를 가상화하고, 가까워지면 자동 재개
우선순위 정교화
대사 > 플레이어 무기 > NPC 무기 > 환경음 순으로 우선순위 설정
// DefaultEngine.ini
[Audio]
MaxChannels=64
// WindowsEngine.ini (PC 오버라이드)
[Audio]
MaxChannels=96
// AndroidEngine.ini (모바일 오버라이드)
[Audio]
MaxChannels=24
// SwitchEngine.ini
[Audio]
MaxChannels=32
스트리밍 최적화
오디오 스트리밍 설정과 I/O 병목 방지
스트리밍 최적화 체크리스트
| 항목 | 권장 설정 | 이유 |
|---|---|---|
| Streaming Chunk Size | 64~256 KB | 작을수록 메모리 효율적, 클수록 I/O 횟수 감소 |
| Streaming Cache Size | 32~64 MB (PC) / 8~16 MB (모바일) | 자주 사용되는 청크를 메모리에 캐싱 |
| 동시 스트리밍 요청 | 4~8 (SSD) / 2~4 (HDD) | 디스크 I/O 병목 방지 |
| Pre-loading | PrimeOnLoad 활용 | 첫 청크를 미리 로드하여 재생 지연 방지 |
HDD 기반 플랫폼(구형 콘솔, PC)에서는 동시 스트리밍 사운드 수를 제한해야 합니다. 많은 사운드가 동시에 스트리밍 요청을 보내면 디스크 시크 타임으로 인해 오디오 글리치가 발생합니다. 중요한 사운드는 ForceInline/RetainOnLoad로 메모리에 상주시키세요.
최종 최적화 체크리스트
- 사용하지 않는 Sound Wave 에셋이 로드되어 있지 않은지 확인
- 5초 이상 파일은 스트리밍으로 설정되어 있는지 확인
- 모든 SFX에 적절한 Sound Concurrency가 설정되어 있는지 확인
- Attenuation의 Falloff Distance가 불필요하게 크지 않은지 확인
- 모바일 빌드에서 Mono 변환이 가능한 사운드는 Mono로 설정
- 플랫폼별 Max Channels 오버라이드가 적절한지 확인
- MetaSounds의 복잡도(노드 수)가 모바일 예산 내인지 확인
핵심 요약
- 플랫폼별 오디오 예산(Voice, CPU, 메모리)을 사전에 정의하고 준수한다
- 사운드 유형별로 적절한 압축 포맷과 품질을 설정한다
- Sound Concurrency, 거리 컬링, 가상화, 우선순위로 Voice를 효율적으로 관리한다
- 스트리밍 청크 크기와 캐시를 플랫폼 스토리지 특성에 맞게 조정한다
- 최종 빌드 전 최적화 체크리스트를 통해 모든 항목을 검증한다
도전 과제
배운 내용을 직접 실습해보세요
Platform별 .ini 파일(WindowsEngine.ini, AndroidEngine.ini 등)에서 MaxChannels, Sample Rate, Buffer Size를 플랫폼에 맞게 설정하세요. 모바일은 16채널/24kHz, PC는 64채널/48kHz로 차별화하세요.
모바일 플랫폼용으로 Sound Wave의 Compression Quality를 40으로 설정하고, 긴 BGM은 Streaming을 활성화하세요. 압축 전후의 메모리 사용량과 청감 품질 차이를 비교하세요.
플랫폼별 오디오 메모리 예산과 CPU 예산을 정의하고, 런타임에서 예산을 모니터링하여 자동으로 품질을 조절하는 시스템을 구현하세요. 메모리 부족 시 낮은 우선순위 사운드 언로드, CPU 과부하 시 동시 재생 수 감소 등을 자동화하세요.