버전
menu_open

방법 3: 세세한 미디어 관리

이 방법은 다음과 같은 상황에 적용할 수 있습니다.

  • 게임에 메모리에 내장된 미디어 에셋이 아주 많을 경우.

  • 사운드 디자이너가 미리 미디어의 요구 사항을 예측하기가 어려울 경우.

  • 프로젝트가 특정 Event에서 Switch와 State를 사용하여 재생할 소리나 모션을 결정할 경우.

  • 사운드를 정의된 섹션으로 쉽게 나눌 수 없을 경우.

게임은 아주 복잡해질 수 있어서 소리와 모션의 발생은 게임 텍스처, 시간대, 게임 오브젝트의 움직임, (온라인 멀티 플레이어 게임의 경우) 다른 플레이어의 Action과 같은 다양한 요인에 좌우됩니다. 예를 들어 Event나 오브젝트 중심의 환경에서는 다른 게임 오브젝트의 근접성에 따라 사운드를 메모리로 불러올 수 있습니다. 모든 게임 오브젝트가 주어진 범위 안에 있거나 단순히 존재할 경우 불러와야 하는 SoundBank 목록을 가질 수 있습니다.

또한 Switch와 State가 재생할 오브젝트를 결정할 수 있습니다. Event가 SoundBank에 추가된 이러한 오브젝트를 재생할 경우 재생 가능한 모든 미디어가 자동으로 SoundBank에 함께 추가됩니다. 예를 들어 'Play_Footstep'이라 불리는 한 Event가 있다고 가정합시다. 이 Event는 현재 지면의 텍스처에 따라 알맞은 소리를 재생하며, 이 소리는 Switch가 변경되면서 지정됩니다. 이 방법도 잘 작동하지만, 게임플레이가 런던의 한 빌딩에서 일어나고 있을 경우 'footstep_sand.wav'(모래 발자국 소리)나 'footstep_winter.wav'(겨울 발자국 소리) 사운드를 메모리에 유지하는 것은 낭비일 수 있습니다.

이 경우 메모리 낭비를 피하려면 Event 혹은 오브젝트 구조를 SoundBank에 불러온 다음에 SoundBank에 들어갈 해당 오브젝트를 지정할 수 있습니다. 예를 들어 여러 가지 지표면에 따른 발자국 소리를 예로 들어 봅시다. 이 경우 다음의 SoundBank를 만듭니다.

  • 'EventBank'는 'Play_Footstep' Event와 구조를 담습니다.

  • 'Winter_Footstep_bank'는 게임의 겨울 부분에서만 일어나는 발자국 소리의 미디어 파일을 담습니다.

  • 'Desert_Footstep_bank'는 게임의 사막 부분에서만 일어나는 발자국 소리의 미디어 파일을 담습니다.

  • 'Common_Footstep_bank'는 나무나 콘크리트 등 언제든지 일어날 수 있는 발자국 소리의 미디어 파일을 담습니다.

Wwise에서 미디어를 세세하게 관리하는 SoundBank만들기

게임에 세 가지 다른 텍스처가 있다고 가정합시다 (눈, 모래, 콘크리트). Wwise에서 'ground_texture' Switch에 따라 세 개의 Random Container 중 하나를 재생하는 Switch Container가 있습니다. 세 가지 Random Container는 각각 주어진 텍스처에 따라 네 개의 다른 발자국 소리를 가지고 있습니다.

Wwise에서 미디어를 세세하게 관리하는 SoundBank를 만드는 방법:

  1. 'EventBank'라고 불리는 SoundBank를 만든 후 SoundBank Editor에 불러옵니다.

  2. 'Play_Footstep' Event를 tSoundBank Editor의 Add 탭으로 드래그합니다.

  3. 이 Event의 'Media' 체크 상자를 선택 해제합니다. 단, Events와 Structures 체크 상자는 선택한 채로 유지합니다.

  4. 각 텍스처 당 하나씩, 총 세 개의 SoundBank를 만듭니다.

  5. 각 SoundBank에서 이 텍스처에 연결된 Random Container를 드래그합니다.

    [참고] 참고

    Random Container 전체를 드래그해서 놓는 대신 각 사운드를 개별적으로 드래그해도 됩니다. 하지만 컨테이너를 사용하면 컨테이너 안의 모든 사운드가 자동으로 SoundBank에 추가되기 때문에, 컨테이너의 내용이 변경될 경우 변경 사항을 수동으로 적용하지 않아도 된다는 장점이 있습니다.

  6. 세 개의 각 텍스처 SoundBank에서 'Events'와 'Structures' 체크 상자를 선택 해제하고 Media 유형만 체크한 상태로 유지합니다.

  7. SoundBank를 생성한 다음 생성된 SoundBank 폴더를 게임 애플리케이션에 복사합니다.

    이제 우리는 네 개의 SoundBank를 가지고 있습니다. 한 뱅크는 재생할 오디오에 관한 Event와 구조 데이터를 담고 있으며 나머지 세 뱅크는 특정 지표면에 연결된 미디어만 담고 있습니다.

세세하게 관리하는 전략을 사용해서 게임에 SoundBank를 통합하는 방법:

  1. 게임에서 초반에 일반 SoundBank를 불러옵니다. 그리고 필요에 따라 적절한 시기에 다른 SoundBank를 불러옵니다. 예를 들어 게임의 초반에 Event SoundBank와 일반 발자국 소리 SoundBank를 불러온 후 게임에서 플레이어의 실제 위치에 따라 다른 SoundBank를 불러올 수 있습니다.

    다음 샘플 코드는 이러한 SoundBank를 게임에 불러올 수 있는 방법을 알려줍니다.

                    
                    // Init과 Eventbank를 불러옵니다. 
                    AkBankID  bankID; // 이 샘플에서는 사용되지 않습니다. 
                    AKRESULT eResult = AK::SoundEngine::LoadBank( L"Init.bnk", AK_DEFAUlT_POOL_ID, bankID );
                    if( eResult == AK_Success )
                    {
                      eResult = AK::SoundEngine::LoadBank( L"Eventbank.bnk", AK_DEFAUlT_POOL_ID, bankID );
                    }
                    if( eResult == AK_Success )
                    {
                      eResult = AK::SoundEngine::LoadBank( L"Common_Footstep_bank.bnk", AK_DEFAULT_POOL_ID, bankID );
                    }
    
                    ...
                    // 실제 필요 사항에 따라서 다음 내용을 코드의 여러 위치에 배치합니다.
                    eResult = AK::SoundEngine::LoadBank( L"Winter_Footstep_bank.bnk", AK_DEFAULT_POOL_ID, bankID );
                    ...
                    eResult = AK::SoundEngine::LoadBank( L"Desert_Footstep_bank.bnk", AK_DEFAULT_POOL_ID, bankID );
                    ...
                    eResult = AK::SoundEngine::LoadBank( L"Level_3.bnk", AK_DEFAULT_POOL_ID, bankID );
                    ...
                    eResult = AK::SoundEngine::UnloadBank( L"Winter_Footstep_bank.bnk" );
                    ...
                    eResult = AK::SoundEngine::UnloadBank( L"Desert_Footstep_bank.bnk" );
                  

이 방법에 대한 추가 정보

이 예시는 이 방법을 통해 실행할 수 있는 수많은 예시 중에서 아주 특정한 한 예시일 뿐입니다. 모든 SoundBank에서 한 오브젝트씩, 한 이벤트씩 들어갈 내용을 개별적으로 결정할 수 있기 때문에 각 SoundBank의 콘텐츠를 완전히 통제할 수 있습니다. 게임의 각 오브젝트마다 별도의 SoundBank를 만들 수는 있지만, 이 경우 새로운 사운드나 모션 오브젝트가 생길 때마다 게임의 적절한 위치에 SoundBank를 불러올 새로운 코드가 필요하기 때문에 유지 관리가 굉장히 어려워집니다. 각 게임은 세분성(granularity)과 게임 통합의 용이성 사이의 균형을 찾는 것을 목표로 합니다.

[참고] 참고

사운드 불러오기 방식에 관심이 있다면 SoundBank 전체를 불러오는 대신 Event를 준비시키는 것도 좋은 방법입니다. Event 준비하기에 대한 더 자세한 정보는 “방법 4: Action Event 준비하기”(을)를 참조하세요.

다음 표에서는 미디어를 세세하게 관리할 때의 장단점을 설명합니다.

장점

단점

메모리 사용량을 최적화할 수 있는 최고의 옵션입니다.

게임에서 원하는 시점에 불러올 미디어를 완전히 제어할 수 있습니다.

보통 보다 큰 미디어 SoundBank의 경우 “SoundBank 이전 버전과의 호환성”을(를) 제공합니다.

어떤 SoundBank를 언제 반드시 불러와야 하는지 사운드 디자이너와 게임 개발자 사이에 많은 대화가 필요합니다.


이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요