1. 개요
- 목표:
- 반복 루프(Loop)로 인한 CPU·메모리 과다 사용 문제 해결
- 게임 루프 최적화 설계
- 프로파일러 활용 및 비동기 로딩 적용으로 프레임 드롭 방지
2. 주요 이슈 & 원인 분석
이슈 | 원인 |
도끼 함정 루프 사운드 재생 시 렉 발생 | Loop 처리로 사운드 인스턴스가 매 프레임 재생→삭제를 반복하며 리소스 과다 소모 |
게임 루프 내 오디오·오브젝트 매 프레임 생성·삭제 | 상태 변화 없이도 매 틱마다 처리 로직이 호출되어 CPU 사용률 급증 |
3. 해결 방법
- Trigger 방식으로 전환
- Loop 컨테이너 대신, Sequence Container나 One–Shot Trigger 방식을 사용해 한 번만 재생
- 블루프린트에서 조건 발생 시 PostEvent 호출
- 프로파일러 활용
- 언리얼 "Stat Audio" / Wwise "Profiler"로 CPU 시간, 메모리 사용량, 오디오 인스턴스 수 모니터링
- 병목 구간(Function Call Duration 등)을 정확히 파악
- 최적화된 게임 루프 설계
- State Change가 있을 때만 사운드·이펙트 처리
- 불필요한 Tick 및 반복 체크 제거
- 비동기(Async) 처리
- 오디오 뱅크(Bank) 로딩, 대용량 사운드 파일 읽기 등을 비동기 호출로 분리
- 메인 스레드 부하 최소화
4. 샘플 워크플로우
[플레이어 함정 접촉]
↓
[블루프린트 Trigger Event]
↓
[PostEvent("SFX_Axe_Swing_OneShot")] ← Sequence Container 사용
↓
[Profiler로 재생 확인]
↓
[다음 조건 충족 시만 재생 로직 진입]
5. 배운 점 정리
- Loop 컨테이너 남용 금지: 반복 효과는 게임 퍼포먼스에 직결되므로 필요 시에만 사용
- 프로파일러 우선 점검: 시각화된 지표를 통해 '어디서' 지연이 일어나는지 파악하는 것이 핵심
- State-Based 처리: Tick 의존 로직을 State Change 이벤트 기반으로 전환하면 CPU 사용량을 크게 줄일 수 있음
- 비동기 로딩을 적극 활용해 메인 루프 스파이크를 방지
6. 추가 팁
- Wwise에서 "Garbage Collection" 주기를 늘려 불필요한 인스턴스 삭제 비용 최소화
- RTPC나 Switch 사용 시에도 과도한 값 업데이트를 피하고, 변경점이 있을 때만 호출하도록 설계
- 자주 쓰는 SoundBank는 미리 로드(Preload)하고, 사용 빈도가 낮은 뱅크는 레벨 스트리밍과 연동해 필요 시에만 로드
'Dev. > Wwise 와이즈' 카테고리의 다른 글
상태에 따른 음향 변화 (0) | 2025.05.19 |
---|---|
RTS 사운드 구현 (0) | 2025.05.19 |
Wwise와 Unreal 연동 가이드(3) : 연결 (0) | 2025.05.09 |
[TIL_250503] Wwise와 Unreal 연동 가이드(2) : Event 만들기 (0) | 2025.05.03 |
[TIL_250425] Wwise와 Unreal 연동 가이드(1) : Wwise 기본 세팅 (0) | 2025.04.25 |