Event-Based Packaging(이벤트 기반 패키징)이란?

게임 오디오 / Wwise에 대한 팁과 도구

Event-Based Packaging(이벤트 기반 패키징)이란 무엇일까요?

얼마 전에 Wwise 2019.2 UE4 통합은 Event-Based Packaging(이벤트 기반 패키징, 줄여서 EBP)이라는 새로운 에셋 관리 작업 과정을 소개했습니다. 기존의 SoundBank 작업 과정과 비교했을 때 이 새로운 파이프라인은 각 이벤트의 리소스가 개별적인 SoundBank로 패키징되는 이벤트 패키징이라는 특징을 가지고 있습니다.

EBP를 사용하는 게 왜 필요할까요? 그 이유는 바로 Wwise 기존의 파이프라인의 경우 사용자의 재량에 따라 직접 SoundBank를 구성해야 하기 때문입니다. 대규모 프로젝트의 경우 정리하는 데 시간이 꽤 걸릴 수 있습니다. 그리고 사운드뱅크를 수동적으로 구성하고 관리하기 때문에 리소스를 로드할 때 중복이 거의 불가피하죠. 새로운 EBP 작업 과정에서는 각 이벤트에 해당하는 리소스가 자동으로 SoundBank로 패키징되며 이벤트의 .uasset에 저장됩니다. 이벤트가 호출되면 해당 미디어 리소스가 로드되며, 필요한 리소스만 효율적으로 로드합니다. 즉, 리소스 중복이 일어날 가능성을 근본적으로 제거하게 됩니다. 그리고 각 SoundBank가 한 이벤트의 리소스만 담기 때문에 다른 이벤트가 리소스에 접근할 수 없을 경우를 걱정하지 않고 자유롭게 언로드할 수 있습니다.

이 글은 EBP 작업 과정과 로드 과정에 사용되는 주요 리소스 몇 개를 소개하고 모든 분들이 새로운 파이프라인을 좀 더 쉽게 이해하도록 작성되었습니다.

EBP와 WAAPI

UE4에서 이벤트를 기반으로 한 자동 패키징을 작동하려면 Event와 Event와 사운드 미디어 간의 관계를 반드시 가지고 있어야 합니다. 이 과정에서 EBP 파이프라인은 WAAPI를 사용합니다. WAAPI(Wwise Authoring API, 와이즈 저작 API)는 외부 애플리케이션이 Wwise Authoring 도구와 통신할 수 있도록 해주는 API입니다. 사용자는 이 API를 통해 Wwise Authoring 도구를 제어할 수 있기 때문에 WAAPI는 UE4 프로젝트와 Wwise 프로젝트 간의 다리 역할을 한다고도 할 수 있죠.

Wwise 저작 도구에서 Event를 생성하면 UE4 통합은 콜백 함수를 통한 작동 지시를 수신한 후 해당하는 event.uasset을 자동으로 생성합니다. 마찬가지로 사용자가 UE4에 있는 WAAPI Picker 패널에서 Generate Sound Data 버튼을 클릭하면 Wwise Authoring 도구가 Generate SoundBanks 작업을 실행합니다. EPB 작업 과정에서 WAAPI는 UE4와 Wwise 프로젝트가 항상 동기화되도록 해주는 역할을 합니다.

WAAPI를 통해 Wwise에 연결하여 SoundBank를 생성하는 방법을 권장하긴 하지만 그렇다고 Sound Data를 생성하는 유일한 방법인 것은 아닙니다. WAAPI를 사용하여 Wwise Authoring 도구에 연결하지 못할 경우 Wwise Picker 창에서 Generate Sound Data 버튼을 클릭하면 Wwise Console을 사용하여 생성 과정을 시작할 수 있습니다. 이 경우 시스템 I/O 호출을 더 많이 사용하기 때문에 WAAPI에 비해 생성 속도가 느리지만 결과적인 에셋은 똑같습니다. 또한 Unreal의 Build 메뉴에 있는 Audiokinetic 섹션에서 Generate Sound Data 대화창을 열 수도 있습니다.

UE4에서의 Wwise 리소스

사운드 개발 과정에서 사용자는 Wwise에서 Event, State, Switch, RTPC, Bank, Auxiliary Bus, Media 리소스를 사용하여 프로젝트에서 소리 세계를 제작할 수 있습니다. UE4에서 이러한 리소스는 모두 .uasset의 형식으로 존재하며 기본적으로 Content/WwiseAudio/ 폴더에 저장됩니다. 프로젝트의 Wwise 리소스의 위치는 UE4 Project Settings의 Wwise Integration Settings 섹션에서 'Wwise Sound Data Folder' 설정을 변경하여 설정할 수 있습니다.

다음 표는 Wwise 리소스에 해당하는 클래스와 UE4에서 저장되는 위치를 열거합니다:

종류 클래스 경로
Bank UAkAudioBank Content/
RTPC UAkRtpc Content/WwiseAudio/Game_Parameters/
State UAkStateValue Content/WwiseAudio/States/
Switch UAkSwitchValue Content/WwiseAudio/Switches/
Event UAkAudioEvent Content/WwiseAudio/Events/
InitBank UAkInitBank Content/WwiseAudio/
Auxiliary Bus UAkAuxBus Content/WwiseAudio/Master-Mixer_Hierarchy/
AcousticTexture UAkAcousticTexture Content/WwiseAudio/Virtual_Acoustics/
Media UAkMediaAsset Content/WwiseAudio/Media/
ExternalSource UAkExternalMediaAsset Content/WwiseAudio/ExternalSources/
Localized UAkLocalizedMediaAsset Content/WwiseAudio/Localized/

 

Wwise

위의 리소스로부터 파생된 파생 클래스는 오브젝트로 전환되기 위해 다시 직렬화되어야 합니다. 역직렬화(deserialization)는 바이트(byte) 스트림을 메모리 안의 오브젝트로 변환하는 과정을 말합니다. 다음 그림은 모든 Wwise 리소스의 클래스 표입니다. 모든 리소스의 파생을 확인할 수 있습니다.

게임에서 개발자는 리소스 참조와 C++ 코드를 통해 이러한 클래스를 로드할 수 있습니다. 씬으로 드래그하여 놓여진 오브젝트나 Component 속성을 통해 참조되는 리소스의 경우 Component 오브젝트가 인스턴스화되면 그 안에 있는 Wwise 리소스가 로드됩니다. 뿐만 아니라 이 리소스는 UE4에서 LoadObject() 함수를 통해 호출할 수도 있습니다.

에디터에서 UAKAudioType 클래스로부터 파생된 리소스 로딩은 AkAssetDatabase 클래스에 의해 완료되며 해당 생성자(constructor)는 onAssetAdded, onAssetRemoved onAssetRenamed라는 세 가지 이벤트를 등록하게 됩니다. 이 중에서 onAssetAdded는 모든 리소스 로딩을 처리합니다. 사실 UE4 엔진 에디터를 열면 현재 맵의 모든 Wwise 리소스가 로드됩니다.

media.uasset의 로딩은 event.uasset의 인스턴스화와 함께 실행됩니다. 이 부분은 후반부의 로딩 과정 섹션에서 더 자세하게 설명해드리겠습니다. 다음으로 가장 중요한 두 가지 리소스인 events.uassetmedia.uasset을 살펴봅시다.

Event-Based Packaging 과정 개요

사용자가 가장 많이 상호작용하는 리소스는 게임에서의 다양한 이벤트입니다. Wwise Authoring 도구의 이벤트와 UE4의 event.uasset 리소스는 1:1 관계로 연결돼있습니다. 이벤트는 재생, 일시 중지, Switch나 State 설정과 같은 동작을 실행하는 데에 사용됩니다. EBP에서 각 event.uasset는 Wwise 프로젝트에서 정의한 모든 플랫폼에 대한 Event의 콘텐츠를 담습니다. 여기서 주요 정보는 Event가 종속된 SoundBank와 미디어 리소스 경로입니다. SoundBank 안에는 리소스 자체가 아니라 Event와 Structure 데이터만 있기 때문에 event.uasset 파일 크기는 몇 KB밖에 되지 않습니다. 미디어 리소스 경로는 미디어 리소스를 찾고 로드하기 위한 기반이 됩니다.

media.uasset에 들어있는 내용

경우에 따라 서로 다른 Event가 동일한 오디오 파일을 참조하기도 합니다. 아주 흔한 상황이긴 하지만 리소스 중복을 일으킬 수 있죠. event.uasset 간의 사운드 파일 공유를 구현하기 위해서 모든 미디어는 SoundBank에서 분리되어 기본적으로 Content\WwiseAudio\Media\ 폴더 안에 별도로 저장됩니다. Wwise Authoring 도구에서 사용되는 구성 방법에 따르면 Event에 연관된 각 Audio Source는 media.uasset 파일과 상응합니다. event.uasset에서 설명되었듯이 media.uasset 파일은 모든 플랫폼용 콘텐츠를 한 파일에 담고 있습니다. 사용자가 새로운 플랫폼을 추가하면 media.uasset의 파일 크기는 플랫폼의 미디어가 파일에 추가됨에 따라 증가합니다.

미디어 리소스의 이름은 ID로 지정됩니다. 해당하는 MediaName을 찾고자 할 경우 UE4의 Content Browser에서 Content\WwiseAudio\Media를 찾아서 Columns에 표시할 수 있습니다.

Wwise 리소스의 로딩 과정

이제 가장 중요한 두 가지 리소스인 event.uasset과 media.uasset의 내용을 이해했으니 이 리소스를 로드하는 단계를 살펴봅시다. SoundBank와 미디어는 별도로 저장되기 때문에 리소스를 로드할 경우 먼저 SoundBank를 로드한 다음 이 사운드뱅크가 참조하는 미디어를 로드해야 합니다.

Soundbank 로드하기 

Wwise를 사용할 때 이벤트가 필요로 하는 SoundBank는 반드시 PostEvent가 로드되기 전에 로드되어야 합니다. 마찬가지로 EBP에서도 그래야 하죠. event.uasset의 로딩 과정 도중 SoundBank, 즉 모든 Event와 Structure가 는 자동으로 로드됩니다. 여기서 기억해야 할 점은, EBP의 경우 event.uasset이 인스턴스화될 때 SoundBank가 이미 메모리에 로드되었기 때문에 로드된 SoundBank는 Wwise가 예약한 메모리가 아니라 UE4가 예약한 메모리에 있다는 것입니다. Sound Engine은 SoundBank를 로드하는 AK::SoundEngine::LoadBankMemoryView() 함수의 전달인자로서 메모리 주소를 받습니다.

필요한 미디어 로드하기

SoundBank 로딩이 끝나면 media.uasset도 로드됩니다. 이 단계에서는 event.uasset에서 저장된 미디어 리소스 경로를 통해 미디어를 로드합니다. 그렇기 때문에 SoundBank처럼 UE4가 예약한 메모리에 있는 것이죠.

EBP 파이프라인은 미디어를 로드하는 데에 PrepareEvent를 사용하지 않습니다. 대신 SetMedia() 함수를 통해 SoundEngine에 미디어 리소스의 위치를 제공합니다. 각 media.uasset은 단 한 번만 인스턴스화되기 때문에 데이터가 중복적으로 로드되는 것을 염려하지 않아도 됩니다. 

요약

이 글은 EBP 에셋 관리 작업 과정과 로딩 과정에서 사용되는 주요 리소스를 소개하여 사용자가 이 파이프라인의 구성을 이해하는데 도움을 주기 위해 작성되었습니다. 상대적으로 새로운 이 EBP 파잎프라인은 추후 출시를 통해 계속해서 업데이트되고 개선되기 때문에 이 글에서 다룬 내용이 변경될 수 있습니다. 그래도 SoundBank의 자동화된 관리가 시간뿐만 아니라 게임 오디오 개발 과정의 비용을 상당히 줄여준다는 사실은 변함이 없으리라 믿습니다. 앞으로 이 파이프라인이 더욱 성숙되고 곧 안정화되면 더 많은 게임 개발자들에게 도움이 되기를 바랍니다.

판 룬펑 (Fan Runpeng)

판 룬펑 (Fan Runpeng)

Audiokinetic필드 엔지니어 - 중화권 • R&D실행 가능한 솔루션을 제공하기 위해 노력하며 최상의 미들웨어와 최적화된 작업 과정을 열정적으로 지지합니다. 필드 엔지니어이기도 한 펀은 요리를 좋아하며, 사람들이 맛있는 음식을 나눠 먹을 때처럼 기술이 공유되는 것을 지켜보며 흐뭇해하곤 합니다.

댓글

댓글 달기

이메일 주소는 공개되지 않습니다.

다른 글

사운드 디자이너가 PureData + Heavy를 사용하여 DSP 플러그인을 개발하는 법 - 제 2부

제 1부에서는 Patch 파일을 사용하여 '블루프린트'를 제작하는 법을 설명해 드렸습니다. 이제 Heavy 컴파일러를 사용하여 '자동 워크숍'을 제작한 후, 이 자동 워크숍을...

24.11.2020 - 작성자: 천종 호우 (Chenzhong Hou)

Wwise 2022.1 Unreal 통합 변경 사항

Wwise 2022.1 Unreal 통합 안내 이 버전은 Wwise Unreal 통합의 주요 이정표입니다. Unreal 엔진 5가 엔진을 새로운 차원으로 이끌어주듯이...

9.9.2022 - 작성자: 미셸 도네 (Michel Donais)

대사 | Wwise와 Unity에서의 나레이션

현대 게임의 필수 요소 중 하나인 보이스오버 대사는 플레이어가 캐릭터를 특정 목소리와 연관지을 수 있을 뿐만 아니라 전반적인 억양을 통해 캐릭터의 감정을 더 잘 이해할 수 있게...

5.4.2023 - 작성자: Jake Gamelin (제이크 겜린)

Wwise를 사용한 반복 재생 기반 자동차 엔진음 디자인 | 제 2부

다시 뵙게 되어 반갑습니다! 이 시리즈에서는 Wwise에서의 간단한 반복 재생 기반 자동차 엔진을 구성 및 설계를 함께 살펴보게 됩니다. 디자인을 제어하기 위해 필요한 엔진 매개...

9.5.2023 - 작성자: 아르토 코이비스토 (Arto Koivisto)

상호작용 음악: '여러분이 직접 선택하는 모험' 스타일의 발라드

2018년 크라우드 펀딩 캠페인을 성공적으로 마친 inXile Entertainment(인엑사일 엔터테인먼트)는 '웨이스트 랜드 3(Wasteland 3)' 게임의 본격적인 제작에...

23.5.2023 - 작성자: Alexander Brandon (알렉산더 브랜드)

AudioLink로 떠나는 여행

지난 10월 게임사운드콘(GameSoundCon)에서 저는 호텔 근처 고급 샌드위치 가게에서 데미안(Damian)과 점심을 먹고 있었습니다. 예상하셨겠지만 저희는 오디오 기술에...

10.6.2024 - 작성자: 피터 "pdx" 드레셔 (Peter "pdx" Drescher)

다른 글

사운드 디자이너가 PureData + Heavy를 사용하여 DSP 플러그인을 개발하는 법 - 제 2부

제 1부에서는 Patch 파일을 사용하여 '블루프린트'를 제작하는 법을 설명해 드렸습니다. 이제 Heavy 컴파일러를 사용하여 '자동 워크숍'을 제작한 후, 이 자동 워크숍을...

Wwise 2022.1 Unreal 통합 변경 사항

Wwise 2022.1 Unreal 통합 안내 이 버전은 Wwise Unreal 통합의 주요 이정표입니다. Unreal 엔진 5가 엔진을 새로운 차원으로 이끌어주듯이...

대사 | Wwise와 Unity에서의 나레이션

현대 게임의 필수 요소 중 하나인 보이스오버 대사는 플레이어가 캐릭터를 특정 목소리와 연관지을 수 있을 뿐만 아니라 전반적인 억양을 통해 캐릭터의 감정을 더 잘 이해할 수 있게...