버전
menu_open

Understanding how SoundBanks are loaded in a game

Wwise에서 SoundBank를 만들고, 채우고, 생성하는 법을 배우기 전에 먼저 게임에서 SoundBank 정보를 불러오고 관리할 수 있는 여러 가지 방법을 이해하는 것이 더 중요합니다. 최적의 방법은 개발 중인 게임의 유형, 게임을 실행할 플랫폼, 프로젝트 팀이 가진 제약 등 여러 가지 요인에 따라 다를 것입니다.

유연성을 최대한 확보하고 거의 모든 게임 유형의 요구 사항을 충족시키기 위해 Wwise는 다음과 같이 게임에서 오디오와 모션을 불러오는 다양한 방법을 제공합니다.

Loading full SoundBanks

SoundBank를 불러오는 전통적인 방법은 바로 Event 데이터, 오브젝트 구조 데이터, 미디어가 모두 담긴 SoundBank를 사용하는 것입니다. 이러한 SoundBank의 전체 콘텐츠는 게임의 특정 시점에 불러오거나 내려서 Event 데이터와 연관 미디어가 유발될 때 잘 재생될 수 있도록 준비해야 합니다.

다음 그림은 전통적인 방법으로 만든 SoundBank가 게임의 Level1에서 Level 2로 플레이어가 이동할 때 플랫폼 메모리에서 어떻게 올라가고 내려가는지 보여줍니다.

특정 SoundBank의 모든 데이터와 미디어가 동시에 메모리에 올라가기 때문에, 이 방법은 모든 데이터와 미디어가 필요할 때 재생할 준비가 되도록 보장해 줍니다. 뿐만 아니라 게임 플레이 도중 디스크의 탐색(seek)을 최소화해서 디스크를 많이 사용하는 다른 작업을 실행하도록 공간을 확보해 줍니다.

이 방법의 주된 단점은 바로 SoundBank를 불러오는 시간 동안 메모리가 상당히 많이 소비되기 때문에 대규모의 정교한 게임을 처리할 때에는 유연성이 떨어진다는 것입니다. 또한 이 방법은 미디어 파일이 이미 메모리에 올라가 있는지 확인하지 않은 채 SoundBank의 모든 콘텐츠를 명시적으로 불러옵니다. 그렇기 때문에 동일한 미디어 파일이 메모리에 두 번 이상 로드될 수가 있습니다. 이러한 단점이 있음에도 불구하고 전통적인 방법은 여전히 다양한 상황에서 유용합니다. 예를 들어 전형적인 핀볼 게임에서는 모든 데이터와 미디어를 항상 사용할 수 있어야 합니다.

Preparing SoundBanks (all content)

LoadBank() 메커니즘의 몇 가지 단점을 극복하려면 AkBankContent_All()을 사용해서 SoundBank를 불러오는 대신 뱅크를 준비해 놓으면 됩니다. 이 방법을 사용할 경우 SoundBank에 여전히 모든 콘텐츠 유형(Event, 구조 데이터, 미디어 파일)이 들어 있을 수 있지만, 이 방법은 미디어 파일을 명시적으로 불러오는 대신 PrepareEvent() 방법을 통해 모든 미디어를 메모리에 불러옵니다. 이 방법을 사용하여 미디어를 불러오면, Wwise는 미디어 파일을 불러오기 전에 먼저 이 미디어 파일이 이미 메모리에 있는지를 확인합니다. 이 방법은 메모리에 미디어 파일이 복제되는 것을 막아주기 때문에 메모리 사용량을 최소한으로 유지해줍니다.

또한, 이 방법은 메모리 절약 뿐만 아니라 디스크 접근이 순차적으로 이루어지도록 보장합니다. 이 방법을 사용하면 PrepareEvent()를 통해서 Event가 하나씩 준비될 때 일어날 수 있는 랜덤한 디스크 탐색을 방지할 수 있습니다.

다음 그림은 '뱅크 준비하기(모든 콘텐츠)' 메커니즘이 어떻게 메타데이터와 콘텐츠를 플랫폼 메모리에 불러오는지를 보여줍니다.

Vorbis로 인코딩되거나 WEM Opus로 인코딩된 미디어가 있는 SoundBank를 불러올 경우 Preparation_LoadAndDecode 준비 유형을 통해 이러한 미디어 파일을 압축되지 않은 PCM으로 디코딩할 수 있습니다. 이 경우 결과적으로 SoundBank는 더 커지지만 Event가 미디어를 호출할 때 디코딩할 필요 없이 즉시 미디어를 재생할 수 있습니다.

Action Event 준비하기

PrepareEvent() 방법은 꼭 필요할 경우에만 미디어를 동적으로 불러옵니다. 이 방법을 사용할 때에는 Action Event 메타데이터가 반드시 SoundBank에 들어 있어야 하며 연결된 미디어 파일을 반드시 파일 시스템에서 접근할 수 있어야 합니다. 해당 구조 메타데이터는 동일한 SoundBank에 Event로 들어가거나 별도의 SoundBank에 들어갈 수 있습니다. 이 방법을 사용하면 Action Event 메타데이터를 담고 있는 SoundBank가 LoadBank()를 통해 메모리에 올라가 유지됩니다. 게임이 Action Event를 호출하기 전에 이 이벤트는 사운드 엔진에 의해 '준비'됩니다. Event를 준비하면 참조된 모든 미디어 파일을 파일 시스템에서 불러오며, 이미 불러오지 않은 경우 참조된 모든 구조 메타데이터도 SoundBank에서 불러옵니다. Action Event가 더 이상 필요 없을 경우 이 이벤트를 '준비 해제'하여 해당 미디어 파일을 메모리에서 제거할 수 있습니다. 메모리 사용량을 최소한으로 유지하고 메모리에서 미디어 파일의 복제를 방지하기 위해서 Wwise는 미디어 파일을 불러오기 전에 이 미디어 파일이 이미 메모리에 있는지를 확인합니다.

[참고]참고

Action Event만 미리 준비할 수 있습니다. 'PrepareEvent()' 방법은 Dialogue Event에 사용할 수 없습니다.

다음 그림은 Event가 미리 준비되어 필요한 미디어 파일만 메모리로 올리는 법을 보여줍니다.

메타데이터(구조라고도 불림)가 Event와 동일한 SoundBank에 저장되지 않은 경우 Wwise는 다른 SoundBank에 저장된 데이터를 찾는 방법을 필요로 합니다. 그래서 Wwise는 다른 SoundBank에 저장된 해당 콘텐츠의 참조를 담습니다. 이름이나 ID를 사용해서 다른 SoundBank를 참조할 수 있는 것이죠. To use the SoundBank name in the sound engine, you must select the Use SoundBank Names option on the SoundBanks tab of the Project Settings dialog. ID를 사용하려면 이 옵션을 선택 해제하세요. 더 자세한 정보는 “SoundBanks Tab”을(를) 참조하세요.

SoundBank가 참조하는 미디어는 반드시 디스크에 루스 파일(loose file)로 저장되거나 (File Package와 같은) 저수준 IO로 해석할 수 있어야 합니다.

이 방법은 일반적으로 메모리 사용량에 있어 아주 효율적이지만 추가적인 디스크 탐색을 필요로 하기 때문에 이미 디스크에서 많은 파일이 스트리밍될 경우 적절하지 않습니다. 또한, 게임이 State와 State를 사용할 경우 미디어 파일이 불필요하게 메모리에 올라갈 수가 있습니다. 예를 들어 게임에서 관중의 기분이나 에너지의 수준에 따라 여러 가지 관중 소리를 가질 경우, 게임의 어떤 구역에서는 화가 난 Switch 소리만 사용한다면 그 외 모든 소리를 굳이 메모리에 올릴 필요가 없습니다. 이 문제를 해결하려면 특정 State나 Switch를 '준비'시켜 준비된 State나 Switch에 연결된 미디어 파일만 불러오도록 하면 됩니다.

다음 그림은 Switch가 미리 준비되어 게임의 특정 시점에서 메모리에 불러오는 미디어의 양을 더 제한할 수 있는 방법을 보여줍니다.

Game Sync를 미리 준비하면 메모리 사용량을 최적화할 수 있지만, 이 경우 미디어를 메모리에 불러오는 속도도 감소된다는 점을 주의하세요. 준비된 Game Sync에 해당하는 소리를 찾기 위해서 사운드가 디스크를 탐색해야 하기 때문에 읽기 시간이 더 길어집니다.

이 두 번째 방법은 필요한 오디오 파일만 동적으로 불러오기 때문에 게임에 수많은 사운드가 들어간 아주 넓은 구역이나 레벨이 존재하거나 Event 데이터, 구조 데이터, 미디어를 저할 수 있는 메모리가 제한되어 있는 상황에서 굉장한 유연하게 처리할 수 있는 해결법이 됩니다.

보시다시피 각 방법마다 장단점이 있습니다. 특정 상황이나 게임의 요구 사항 및 제약에 따라 최적의 방법이 다를 것 입니다. 사용할 전략을 결정했다면 하나 이상의 방법을 사용하여 SoundBank의 내용을 이에 맞게 채운 후 미세 조정할 수 있습니다.

[참고]참고

LoadBank, AkBankContent_All, PrepareEvent, PrepareGameSyncs, AkBankContent_StructureOnly 기능은 Wwise API에서 접근할 수 있습니다. SoundBank 불러오기와 Event 및 Game Sync 준비하기에 대한 더 많은 정보는 Wwise SDK의 뱅크 통합하기 섹션을 참조하세요.

SoundBank를 관리하는 여러 가지 방법에 대한 자세한 개요는 “Strategies for managing SoundBanks”을(를) 참조하세요.


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

지원이 필요하신가요?

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

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

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

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

Wwise를 시작해 보세요