3 개의 강의

목차

압축된 데이터 디코딩하기

최적화는 보통 게임 제작 후반부에 이뤄지는 경우가 많습니다. 게임의 프레임 레이트가 떨어질 경우 전반적인 경험에 큰 타격을 주기 때문에 최적화는 정말 중요한 요소라고 할 수 있습니다. 플레이 중에 게임 시스템이 처리해야 하는 작업은 수도 없이 많습니다. Vorbis로 인코딩된 미디어를 압축 해제하는 것도 처리해야 하는 작업 중 하나죠. Vorbis로 인코딩된 미디어의 압축을 푸는 데에 필요한 처리량을 줄이려면 AkBank 컴포넌트에서 제공하는 Decode compressed data (압축된 데이터 디코딩하기) 기능을 사용하실 수 있습니다.

이 기능은 SoundBank를 로딩할 때 Vorbis로 인코딩된 모든 미디어를 디코딩하기 때문에, 게임이 동일한 Event를 다시 게시하더라도 리소스를 더 사용할 필요가 없습니다. 이 옵션을 사용하면 사용하지 않을 때보다 메모리에서 SoundBank의 크기가 커져서 처음부터 PCM 인코딩을 사용하는 것과 동일한 크기가 됩니다. 그렇다면 왜 처음부터 PCM을 사용하지 않는 걸까요? 예를 들어 다운로드용 게임에서는 배포를 쉽게 하기 위해서 SoundBank의 크기를 작게 유지한 다음 게임이 로드된 후 SoundBank가 디코딩되도록 하는 것이 좋겠죠. SoundBank의 디코딩된 크기는 변환 후 SoundBank Manager에서 확인하실 수 있습니다.

Dungeon SoundBank는 압축 해제 후 데이터 크기가 가장 많이 변하는 Region SoundBank이기 때문에 이 SoundBank의 압축을 풀어서 크기를 비교해봅시다. 다음 단계에서는 먼저 압축을 풀기 전의 데이터 크기를 모니터링한 다음 Decode compressed data 옵션을 활성화해서 변경된 데이터 크기를 모니터링해봅시다.

  1. Unity 메뉴에서 Audiokinetic > Certification > 301 > Lesson 3으로 가서 Decompressing SoundBanks를 선택하세요.

    SoundBank가 압축된 데이터를 디코딩하도록 설정하기 전에 먼저 현재 메모리 사용량을 프로파일링해봅시다.

  2. Wwise에서 Remote…를 클릭하세요.

  3. Remote Connections 창에서 Wwise Adventure Game (Editor) 를 선택한 후 Connect를 클릭하세요.

  4. Unity에서 Play를 클릭하세요.

    게임이 초기화되면 Play 모드를 다시 종료하세요.

  5. ESC를 눌러 WAG 메뉴를 연 후 Play를 다시 클릭해서 Play 모드를 종료하세요.

  6. Wwise 메뉴에서 Layouts를 클릭하고 Profiler를 선택하세요.

  7. Advanced Profiler에서 Memory 탭을 선택하세요.

  8. Performance Monitor에서 시간 커서를 몇 초 정도 뒤로 드래그하세요.

    Dungeon SoundBank의 Peak Used가 약 2.4 MB의 메모리를 사용하는 것이 보이실 것입니다.

    이제 로드가 된 후 SoundBank를 디코딩해봅시다. Dungeon SoundBank는 L3_2 - Dungeon Audio Environment Scene에 있는 Wwise 게임 오브젝트에서 찾으실 수 있습니다.

  9. Unity의 Hierarchy에서 L3_2 - Dungeon Audio Environment Scene으로 간 후 Wwise 게임 오브젝트를 선택하세요.

  10. Inspector의 AkBank 컴포넌트에서 Decode compressed data를 선택하세요.

    경고 창이 뜹니다.

  11. OK를 클릭해서 대화창을 종료하세요.

    이제 Decode compressed data 옵션이 활성화됩니다. 그 아래 'Save decoded bank' 매개 변수(parameter)가 보이는데, 이 매개 변수는 비활성화한 채로 유지해야 합니다.

    SoundBank를 디코딩하면 디코딩된 데이터가 Prepare Pool로 옮겨집니다. Prepare 풀의 크기를 설정하는 프로퍼티는 AkInitializer 컴포넌트의 Initialization Settings 안에 있으며 'AkWwiseInitalizationSettings'라고도 불립니다.

    [작은 정보]

    AkWwiseInitalizationSettings Asset 파일은 게임 싱크, 소리의 위치, 압축 해제 등을 추적하는 등 게임 초기화 관리를 위해 게임 메모리 풀을 할당하는 데에 사용됩니다. 메모리 풀 설정하기에 대한 더 자세한 설명은 제 9강이나 Wwise-251 자격증 과정의 '예약된 메모리 관리하기' 섹션을 참고해 주세요.

    이 풀은 준비된 (디코딩된) SoundBank용으로 Wwise가 예약한 메모리의 양을 정의합니다. 이제 Prepare Pool의 크기를 디코딩된 General SoundBank의 크기로 조정해봅시다.

    [참고]

    Decode compressed data 옵션은 SoundBank에서 Vorbis로 설정된 음원만 디코딩할 수 있습니다. SoundBank에서 Vorbis로 인코딩된 미디어가 없을 경우 아무 효과가 없습니다.

  12. Hierarchy에서 WwiseInitializer 게임 오브젝트를 선택하세요.

  13. Inspector에서 AkWwiseInitalizationSettings Asset 파일을 더블 클릭하세요.

    Dungeon SoundBank가 디코딩되면 Prepare Pool로 전송되기 때문에 Prepare Pool의 크기를 디코딩된 Dungeon SoundBank의 크기로 설정해야 합니다. 이 정보는 Wwise의 SoundBank Manager 뷰에서 확인하실 수 있습니다.

    Dungeon SoundBank의 Decoded Size는 9,159,252 바이트 (9.2 MB) 입니다. 크기를 10MB(10,000,000bytes)로 설정합시다.

  14. Prepare Pool Size 프로퍼티를 10000000으로 설정하세요.

    메모리 풀을 설정할 때는 Play 모드에 들어갔다가 종료한 다음 변경 사항을 적용하셔야 할 수도 있습니다.

  15. Play를 클릭하세요.

  16. ESC를 눌러 WAG 메뉴를 연 후 Play를 다시 클릭해서 Play 모드를 종료하세요.

    이제 메모리 풀의 값이 적용된 것을 확인했으니 Profiler에 연결된 상태에서 Play 모드를 시작해봅시다.

  17. Play를 클릭하세요.

  18. Wwise에서 Reconnect를 클릭하세요.

    Advanced Profiler의 Memory 탭으로 가서 Pool Name 열에 Dungeon SoundBank가 더 이상 있지 않은 것을 확인해보세요.

    그 이유는 이 SoundBank가 PreparePool로 전송되었기 때문입니다. Peak Used 열에서 PreparePool을 보면 런타임 때 할당된 메모리가 8.4MB 밖에 되지 않는 것을 보실 수 있습니다. 그렇다면 Unity로 돌아가 Prepare Pool의 크기를 알맞은 크기에서 조금 더 여유를 두도록 조정해봅시다.

  19. ESC를 눌러 WAG 메뉴를 연 후 Play를 다시 클릭해서 Play 모드를 종료하세요.

    Prepare Pool Size를 9MB로 설정해서 PreparePool 메모리 풀에 가장 필요한 메모리의 양만 저장하도록 해봅시다.

  20. Unity Inspector에서 AkWwiseInitalizationSettings로 간 후 Prepare Pool Size9000000으로 설정하세요.

Decode compressed data 옵션을 사용할 경우 메모리 사용량이 더 커지지만, 게임플레이 도중 Vorbis로 인코딩된 데이터를 디코딩하는 데에 CPU 리소스를 사용하지 않기 때문에 게임이 보다 매끄럽게 돌아갈 것입니다.