버전
menu_open

기본 메모리 풀

기본 메모리 풀은 메모리에 로드된 사운드와 Event에 관한 구조적 메타 데이터를 담고 있습니다. 이 메모리 풀은 Wwise에서 정의한 작동 방식을 구현하는 데에 필요한 프로젝트 내 오브젝트의 모든 속성을 담고 있습니다. 또한 이 풀은 등록된 모든 게임 오브젝트와 게임 싱크 값, 위치, 방향 등의 관련 정보를 담고 있습니다. 메모리에 올라간 뱅크의 개수가 많을수록 더 많은 메타 데이터가 추가되기 때문에 더 큰 기본 메모리 풀 크기를 필요로 합니다. 풀의 크기는 궁극적으로 하나의 상황, 레벨, 지도, 게임 영역 등에서 재생할 수 있는 사운드의 양에 따라서만 달라집니다.

[참고] 참고

기본 메모리 풀은 미디어를 포함하지 않습니다.

각 사운드 구조와 Event 조합은 기본 메모리 풀에서 평균적으로 약 300 바이트의 메모리를 차지합니다. 예를 들어 프로젝트에 50,000 개 이상의 사운드(대사 포함)가 있을 경우 구조적 데이터에만 대략 15MB의 메모리가 필요합니다. 이처럼, 동시에 모든 사운드를 메모리에 올릴 수 없기 때문에 미디어를 불러오고 내리는 것과 같은 방식으로 구조적 데이터를 불러왔다 내려야 합니다.

저희가 지금까지 보았던 Wwise 프로젝트를 바탕으로 말씀드리자면, 사운드 구조는 메모리에 불러오는 개수가 엄청 많기 때문에 기본 메모리 풀의 가장 큰 부분을 차지합니다 (25%에서 50% 사이). 당연히 불러오는 사운드의 개수가 적을수록 기본 메모리 풀도 작아집니다. 그 다음으로 가장 메모리를 사용하는 것은 Event 메타 데이터인데, 이 데이터는 보통 풀의 10%를 차지합니다. Event는 크기가 아주 작기 때문에 많은 Event를 포함하더라도 그다지 많은 공간을 차지하지 않습니다. Random/Sequence Container 구조가 아마 메모리를 차지하는 가장 큰 단일 항목일 것입니다. 이 구조는 단순한 사운드의 약 3배가 되는 메모리를 차지합니다. 하지만 일반적으로 사운드나 Event보다 Random/Sequence Container의 개수가 더 적기 때문에 폴의 메모리를 전체적으로 보다 적게 차지합니다.

일반적으로 오픈 월드 게임은 재생이 준비되어야 할 사운드가 더 많기 때문에 보다 많은 메모리를 필요로 합니다. 이런 게임은 기본 메모리 풀에서 5~8MB를 필요로 합니다. 다른 유형의 게임은 2~3MB 정도로 충분합니다. 이런 숫자는 Wwise를 사용하는 다른 게임이 얼마만큼을 썼는지 알려드리기 위함일 뿐, 특정 게임 기획이 이 메모리 범위에 반드시 포함된다고 할 수는 없습니다.

다음은 기본 메모리 풀에서 사용하는 메모리를 감소하도록 도와주는 모범 사례입니다.

  • 여러 사운드 구조와 Event를 가진 큰 뱅크를 작은 뱅크로 나누세요. 필요에 따라 뱅크를 동적으로 불러오고 내리세요. 뱅크가 캐릭터별로 정리되어 있는 것 뿐만 아니라 다양한 상황에 따라 구분되어 있는지 확인하세요.

  • ExecuteActionOnEvent API를 사용하여 Event의 개수를 줄이세요. Play/Stop 쌍은 단일한 Play Event로 교체하고 ExecuteActionOnEvent를 호출하여 Stop 동작을 수행하면 됩니다. 마찬가지로 Pause/Resume도 동일한 Play Event로 교체할 수 있습니다.

  • 게임 오브젝트를 엄격히 관리하세요. 오브젝트의 역할이 끝나는 대로 이 오브젝트의 등록을 해제하세요. 사용하지 않은 게임 오브젝트가 포함된 풀이 활성화되어 있지 않도록 방지하세요. 이러한 풀을 활성화한 상태로 두는 것은 전혀 이득이 없으며 메모리를 소비할 수 있습니다. 예를 들어 NPC가 죽으면 이 NPC에 해당하는 게임 오브젝트의 등록을 해제하세요. 이 오브젝트를 다른 곳에 다시 사용하지 마세요. 필요 시에는 새로운 게임 오브젝트를 등록하세요. 일반적으로, 활성화된 게임 오브젝트가 수천 개에 달한다면 너무 많다고 할 수 있습니다.

  • Actor-Mixer가 아닌 Virtual Folder를 사용하여 사운드를 정리하세요. Virtual Folder는 메모리를 사용하지 않지만 Actor-Mixer는 메모리를 사용합니다. 오브젝트가 기본 설정이 아닌 비슷한 속성을 실제로 공유할 경우에만 Actor-Mixer를 사용하세요. 이 경우에는 하나의 속성만 설정하기 때문에 Actor-Mixer를 사용하면 메모리를 더 절약할 수 있습니다. 물론, 이는 Actor-Mixer가 Set Voice Volume이나 Set Voice Pitch처럼 Event에서 참조되고 있는지 여부에 따라서도 다릅니다.

  • 큰 계층 구조의 크기를 줄이고 덜 복잡하게 만들어 보세요. 대부분 타격 소리 계층 구조와 발자국 소리 계층 구조가 큰 경우가 많습니다. 이러한 계층 구조에는 다양한 변수가 있기 때문에 규모가 커져도 분리할 수가 없습니다 (미디어는 분리 가능하지만 구조 데이터는 분리 불가). 다음은 이러한 계층 구조를 감소할 수 있는 몇 가지 방법입니다.

    • 간단한 속성만 변경되어야 할 경우 (동일한 샘플을 사용해 볼륨/피치/랜더마이저 등을 사용할 경우) RTPC를 사용하세요.

    • Dialogue Event가 Switch 계층 구조로 이뤄져 있다면 그 중 몇 레벨 (또는 전체 레벨)은 이것과 같은 State Group으로 교체하세요. 이러한 방법은 자주 변경되는 변수에 유용하게 사용할 수 있습니다. 예를 들어 타격 소리 계층 구조의 경우 타격할 표면이 미리 결정되지 않기 때문에 Event가 일어날 때에만 알 수 있습니다. 그렇기 때문에 Switch 값을 유지해야 하는 Switch Container를 사용하지 않고, 대신 동일한 State 값을 가진 State Group을 포함한 Dialogue Event를 사용할 수 있습니다. 이렇게 할 경우 장점 중 하나는 바로 Dialogue Event가 동일한 샘플이나 하위 구조를 쉽게 재사용할 수 있다는 점입니다. 또한 Dialogue Event는 게임 오브젝트별 메모리를 사용하지 않습니다. 또한 경로를 Switch Container에 연결하여 또 다른 차원의 변수를 추가할 수 있다는 점도 기억하세요.

    • 발자국 소리를 예로 들어 봅시다. Dialogue Event에 걸음 유형을 나타내는 Step Type(Walk/Run) 과 표면 유형을 나타내는 Surface Type이라는 State Group이 있다고 합시다. 그리고 각 경로가 Boots(부츠), Civilian shoes(일반 신발), Barefoot(맨발) 등의 값을 가진 Footwear Types(신발 유형)이라는 Switch Container로 연결되었습니다. Footwear는 게임 오브젝트의 일생으로 보면 자주 변경되지 않지만 다른 두 변수는 자주 변경됩니다.

    • 이 방법을 사용하는 또 다른 장점은 바로 Dialogue Event는 재생하는 연결된 사운드 구조 없이 Event만 포함된 뱅크에 존재할 수 있다는 점입니다. 다시 말해 Event에 연결된 복잡한 사운드 구조를 다른 뱅크로 분리할 수 있습니다. 발자국 소리를 예로 들면, 발자국 소리 Dialogue Event를 BankEvent에 포함하고, Concrete(콘크리트)에 연결된 구조와 미디어를 BankConcrete에, Dirt(흙)에 연결된 구조와 미디어를 BankDirt에 포함시킬 수 있습니다. 이 방법을 사용하려면 간단히 특정 표면 유형이 나타나기 직전에 SoundBank를 동적으로 불러오거나 내리면 됩니다.

    • Switch Container 계층 구조를 여러 개의 SoundBank로 나누세요. SoundBank에 Switch Container를 추가하면 이 컨테이너의 하위 분기(sub-branch)도 자동으로 포함됩니다. 하지만 이러한 몇몇의 하위 분기를 SoundBank Editor의 Game Syncs나 Edit 탭에서 수동으로 제외시킬 수 있습니다. 예를 들어 최상위 Switch 변수가 표면 유형인 Footstep 계층 구조가 있다고 가정합시다. 게임에서 동시에 모든 표면 유형을 필요로 하지 않을 경우 이 Switch Container 계층 구조를 다양한 뱅크로 나누어 넣어서 게임의 상황에 따라 필요한 표면 유형만 로드할 수 있습니다. 예를 들어 Concrete와 Metal Stairs(철제 계단)같이 게임 전역에서 나타나는 표면을 포함하는 주요 Footstep 뱅크를 만들고 Mud(진흙)와 같이 하나의 신이나 부분에서만 사용되는 특정 표면을 포함하는 맥락적 뱅크를 만드는 것입니다.

소리 변형을 만드는 데에 사용하는 타격 소리 유형의 WAV 파일을 이에 상당하는 SoundSeed Impact로 교체하세요. 10개의 '쨍그랑' 하는 소리를 한 개의 소리로 바꾸는 것은 경제적일 뿐만 아니라 10개보다 더 많은 배리에이션을 만들 수도 있습니다. 이러한 것이 실제로 차이점을 만들 수 있습니다. 이 가능성을 무시하지 마세요.


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

지원이 필요하신가요?

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

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

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

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

Wwise를 시작해 보세요