AudioLink로 떠나는 여행

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

지난 10월 게임사운드콘(GameSoundCon)에서 저는 호텔 근처 고급 샌드위치 가게에서 데미안(Damian)과 점심을 먹고 있었습니다. 예상하셨겠지만 저희는 오디오 기술에 대한 얘기를 나누고 있었고, 저는 '이제 MetaSound(메타사운드)를 Wwise에서 음원으로서 사용할 수 있다고 들었어요. 정말 유용하지 않나요?'라고 말했죠. 

그때 누군가 "감사합니다!"라고 말하더군요. 고개를 들어보니 Unreal(언리얼) 오디오와 MetaSound 설계자인 애런 맥레런(Aaron McLeran)이 레스토랑 문을 열고 들어오는 것이 아니겠습니까? 타이밍이 너무나 절묘해서 마치 영화의 한 장면 같았죠...

최근 Unreal 오디오 시스템에서는 상당한 개선 작업이 이뤄졌습니다. 수많은 새로운 기능과 작업 과정이 그저 단순히 '버튼을 누르면 소리가 나는 것'이 아닌 그 이상의 기능을 갖춘 사운드트랙을 편리하게 제작할 수 있도록 설계되었죠. 하지만 크고 복잡한 콘솔 게임에서 게임플레이 동작에 맞춰 감정적인 반응을 유도하기 위해서 저는 항상 Wwise를 사용하고 싶어할 것입니다.

바로 여기서 AudioLink(오디오링크)가 등장합니다. 'Unreal Audio Engine을 미들웨어와 함께 사용할 수 있도록 만들어주는 도구'이죠. 더 구체적으로는 Wwise와 함께요. '둘 중 하나'만 선택하는 것이 기존의 방식이었다면 AudioLink는 '동시에 둘 다'라는 더욱 협력적인 패러다임을 약속해주는 것 같습니다. 이 이론을 시험해보기 위해 저는 몇 가지 MetaSound를 만들어서 Wwise를 통해 Unreal의 여러 공간으로 라우팅해보고 싶었습니다. 이렇게 하면 Blueprint로 제어되는 모듈식 신시사이저의 성능을 활용하면서 결과를 공간화된 공간 안에 배치할 수 있죠. 뿐만 아니라 Wwise Profiler를 사용해서 MetaSound 출력을 모니터링할 수도 있습니다.

img2

화이트, 브라운, 프랙탈 음악

저는 Unreal 5.1로 업그레이드한 후, 1978년경 Scientific American(사이언티픽 아메리칸) 잡지에서 마틴 가드너(Martin Gardener)의 수학적 게임 칼럼에 실린 'White, Brown, and Fractal Music(화이트, 브라운, 그리고 프랙탈 음악'이라는 기사에서 파생된 알고리즘을 사용하여 세 가지 MetaSound 구현을 제작했습니다. 이 기사는 수학과 인지적 본질에 대한 매우 흥미로운 논의를 담고 있지만, 주요 초점은 알고리즘으로 생성된 멜로디에 있습니다. 여기서 가드너는 세 가지 방법을 설명합니다.

1. 화이트 음악은 기본적으로 혼돈입니다. 완전히 랜덤이고 예측 불가하며 연속된 음표 사이 상관 관계가 없는 음악입니다.

2. 브라운 음악은 브라운 운동, 즉 액체에 떠 있는 입자의 무작위한 움직임을 기반으로 합니다. 그래프로 표현하면 입자가 마치 '술 취한 사람의 걸음걸이'와 같은 수학적 경로를 따라 이동합니다. 이로 인해 랜덤의 연속적 음표가 생성되지만 각 음표는 이전 음표와 숫자 공식을 통해 관련됩니다.

3. 프랙탈 음악 (일명 핑크 노이즈)는 바이너리 기반 패턴으로 6개의 주사위를 굴려 6에서 36 사이의 숫자를 생성함으로써 제작됩니다. 이 숫자들을 키보드의 음표 배열에 할당하면 다른 방법보다 훨씬 더 뛰어난 음악성의 멜로디가 생성됩니다. 


img3

MetaSound로 재밌는 작업 하기

저는 앞서 세 가지 알고리즘을 보여드리기 위해 Unreal/Wwise Blueprint 프로젝트를 제작했습니다. 그래서 이 프로젝트를 직접적인 합성, 웨이브테이블, '반복 재생되는 배경음 위의 멜로디'와 같은 세 가지 스타일로 변환하는 것이 꽤 쉬웠죠.

MetaSound는 '음계 배열로 조정하기(Scale to Note Array)' 기능을 지원하여 MIDI 노트를 다양한 음계와 조율에 맞게 퀀타이즈할 수 있습니다. 5음 음계(Pentatonic)로 설정하면 랜덤 알고리즘조차도 화음적인 결과를 만들어내죠. 하지만 저는 MetaSound 신시사이저가 제공하는 다양한 도구와 효과를 사용해보는 것도 즐거웠습니다 ('즐겁지 않다면 제대로 하고 있는 것이 아니다!'가 제 신조거든요).

Unreal에서 저는 크기가 점점 커지며 서로 문을 통해 연결되는 세 가지 공간이 있는 구조를 만들었습니다. 각 공간에는 안에서 튕겨다니는 오브젝트가 있으며, 각 오브젝트는 MetaSound의 Attenuation 설정을 통해 볼륨과 위치가 제어되는 생성된 멜로디 구현 방법 중 하나를 방사합니다. 이때까진 잘 진행되고 있었죠.

Wwise 구성하기

이제 Wwise를 통합할 시간입니다... 바로 여기서 첫 번째 걸림돌이 생겼죠 (참고 사항을 보세요). '실험적' AudioLink 업데이트가 포함된 최신 버전에서는 사용자가 Wwise Unreal 통합을 '직접' 설치해야 합니다. 다시 말해 '엔진 플러그인' 파일을 다운로드한 후 '게임 플러그인' 파일이 가는 곳에 넣어야 하죠. 솔직히 저는 이게 작동한다는 것이 놀랍지만 Wwise Q&A (https://www.audiokinetic.com/qa/11062/5-1-support-wwise-roadmap/)에 게시된 설명을 조심히 따라하여 Wwise를 Unreal 5.1에서 실행할 수 있었습니다.

참고: 저의 소중한 독자 여러분은 이 작업을 안하셔도 됩니다. 이제 Wwise v.2022.1.2가 제공되며 표준 설치 방법을 지원합니다.

이제 환경을 음향화할 준비가 되었습니다. 저는 각 공간에 AkSpatialAudioVolume을 추가하고 각 문에 AkPortal을 설치했습니다. 또한 각 공간에는 리버브를 위한 자체적인 보조 버스도 있습니다. ㅡ그래서 저는 점점 커지는 방마다 '타일 화장실', '중간 크기 홀', '대성당' 설정의 RoomVerb 효과를 지정할 수 있었죠. 그리고 제어를 위해 각 공간에 AKAmbient 사운드로 반복 재생 시험용 핑 사운드를 추가해서 설정이 예상대로 작동하는지 확인했습니다.

AudioLink를 통해 Unreal을 Wwise로 연결하기

다음으로 저는 3개의 Wwise Event를 만들었으며, 각각 'Audio Input' 음원이 있는 SoundSFX를 재생하도록 했습니다. 이 Source 플러그인 옵션은 Wwise 프로젝트 밖에서 생성된 오디오 콘텐츠가 Wwise 엔진에 의해 처리될수 있도록 해줍니다. 이 플러그인은 게임 내 음성 채팅에 주로 사용되지만 (마이크에서 사운드 데이터를 가져와서), Unreal MetaSound 출력을 Wwise 프로젝트로 연결하는 앱 간의 오디오 데이터 전달자로도 사용할 수 있습니다.

AudioLink가 무엇을 하도록 설계되었는지 방금 제가 설명드렸죠.

img4

바로 여기서 두 번째 걸림돌이 생겼습니다. 제가 이해한 바에 따르면 Wwise Audio Input Event는 MetaSound의 Attenuation에 있는, 오버라이드 옵션의 긴 목록의 아래 위치한 AudioLink 섹션에서 지정할 수 있어야 합니다. 하지만 그렇게 할 수 있다고 해서 제가 이걸 어떻게 할 수 있는지 안다는 의미는 아니었죠. 그리고 제공된 선택지가 불투명하고 혼란스러워 보였습니다.

저는 오랜 시간을 허비한 후에야 Unreal Project Settings => Wwise Integration Settings => Unreal Audio Routing (Experimental)이 'Route through AudioLink [UE5.1]'로 설정한 '후' 비로소 Attenuation (AudioLink) 드롭다운 메뉴에서 커스텀 'Wwise AudioLink Settings'를 위한 Create New Asset 버튼이 생겨난다는 사실을 깨달았습니다 (흔히 경험하는 '아, 이 버튼을 눌러야 하는거군'의 순간이었죠). 바로 이렇게 에셋이 올바른 Wwise Audio Input Event를 가리키도록 설정할 수 있습니다.

img5

짜잔!

잘 작동하네요! MetaSound와 관련 음악 시스템이 튕겨다니는 오브젝트에 연결된 것을 프로젝트 안에서 들을 수 있었고 출력이 Wwise Profiler에 모니터링되었습니다. 야호!

그리고 다음 작업도 할 수 있었죠.

  • 볼륨 레벨 제어
  • 버스 라우팅 변경
  • 감쇠 설정
  • 효과 추가
  • RTPC 사용
  • 즉석으로 Unreal 오디오 변경 및 들어보기

…이 모든 것을 익숙한 Wwise 도구를 사용하여 작업할 수 있었답니다. 처음에 말씀드렸듯이 정말 유용하죠!

하지만 전 이것으로 만족할 수 없었죠...

공간화할 수 있는 오브젝트

저는 MetaSound를 이 세 가지 공간의 음향적 환경 안에 배치하고 환경 간에 매끄러운 전환 효과를 제공하고 싶었습니다. 각 공간에 지정된 리버브와 MetaSound를 혼합하고 WwiseReflect를 사용하여 음악을 벽에서부터 튕겨내고 위치와 재질에 따라 EQ를 변경해서 오디오를 방사하는 오브젝트가 정말로 그 공간 안에 있는 것처럼 느껴지도록 하면서, 동시에 Wwise가 제공하는 모든 멋진 공간화 기능을 사용하여 이를 구현하고 싶었죠 (Unreal 네이티브 오디오가 따라잡기 어려울 정도로).

바로 여기서 세 번째이자 마지막 걸림돌에 부딪혔습니다. 'Audio Input' 음원 플러그인은 Wwise에 의해 공간화될 수 있는 오브젝트(예: SoundSFX 컨테이너)라기보다는 믹서에서의 '피드'처럼 작동합니다. MetaSound 입력 이벤트가 AKAmbient 티스트용 핑 사운드와 동일하게 라우팅되었음에도 불구하고 '회절/전달'(공간화에 필수)이 사용되었을 때 '100% 전달 손실'(무음)로 프로파일링되었죠. 회절/전달이 비활성화되었을 경우 MetaSound를 들을 수 있지만 Reverb와 혼합되지 않았고 벽을 통해 들을 수 있었습니다.

이에 대한 해결 방안은 공간화될 수 '있는' Wwise 컴포넌트로 Audio Input을 라우팅하는 것입니다. 하지만 초기 버전의 AudioLink 구현에서는 MetaSound Attenuation 오버라이드로부터 이 작업을 수행할 수 있는 길이 없었죠. Epic에서 일하는 분들은 이 기능이 제공되지만 아직 연결되지 않았으며 추후에 출시될 것이라고 했습니다.

img6

컴포넌트를 통한 연결

하지만 기다려보세요! 저는 'Wwise에서는 어떤 것이든 항상 6가지 방법을 통해 할 수 있다'라는 말을 하곤 합니다. 그리고 실제로 여러분의 구현에 가장 적합한 방법으로 게임 오디오 문제를 해결할 수 있는 이 유연성이 Wwise의 큰 장점이기도 하죠. MetaSound를 Wwise로 라우팅하는 또 다른 방법이 있습니다. 바로 WwiseAudioLink 컴포넌트를 사용하는 것이죠.

통합 패키지의 일부로 이 컴포넌트를 오브젝트에 놓고, 거기에서 AudioLink 설정과 MetaSound를 지정한 후, 레벨 이벤트 그래프에서 PlayLink를 BeginPlay로 하면... 짜잔! MetaSound가 *공간화된 오브젝트*를 재생합니다. 사운드가 공간 안에 머물며 포털이 플레이어 위치에 따라 페이드 인/아웃되고 음악이 리버브와 함께 재생되죠. 성공입니다!!

하지만 이전과 마찬가지로 현재 '실험적인' 버전은 모든 사용 사례를 완벽하게 포착하지 못합니다. 오직 반복 재생되는 패치의 단일한 인스턴스인 whiteMusic MetaSound와 컴포넌트를 작동시킬 수만 있었죠. brownMusic은 '웨이브테이블' 접근 방식을 사용하면서 재생할 파일 이름을 전송하면서 MetaSound를 반복 호출하는데, 이 방법은 컴포넌트 코드를 혼란시켰습니다 (적어도 저를 혼란스럽게 했죠!)

GDC에 가기에 충분하다!

제 갈 길을 계속해서 나아가기 위해 저는 하이브리드 접근 방식을 만들었습니다.

- whiteMusic은 WwiseAudioLink 컴포넌트를 사용하며 White Room에서 리버브와 함께 공간화됩니다.

- 브라운과 핑크 뮤직 알고리즘은 MetaSound Attenuation 오버라이드에 있는 AudioLink 설정을 사용합니다. 음악은 Wwise 프로젝트 안에서 재생되지만 공간화되지 않기 때문에 3D 이미터 버스와 트리거 볼륨을 함께 사용하여 Brown과 Pink Room에서 공간적 리버브 구현을 시뮬레이션하는 해결책을 생각해냈습니다.

결과는 꽤 나쁘지 않았습니다. 다음 동영상 링크에서 3개의 공간을 둘러보세요.

전체 Unreal/Wwise 프로젝트는 여기에서 다운로드하실 수 있습니다.

https://media.gowwise.com/blogfiles/WBFmusicLinkAKh.zip (4.3Gb)

이 프로젝트는 AudioLink를 사용하는 두 가지 방법을 설명합니다. 어떤 방법을 사용할 것인지는 여러분의 특정한 필요에 따라 달라지죠. 예를 들어 게임 음악이 스테레오 MetaSound라면 공간화를 우선시하지 않기 때문에 MetaSounds Attenuation 설정을 사용해서 연결하면 됩니다. 하지만 음향적 환경에서 사운드를 합성하여 재생하려면 WwiseAudioLink 컴포넌트가 좋겠죠.

필요에 따라 추가적인 AudioLink 기능을 구현하기 위해 자체적인 코딩을 할 수는 있지만, 아마도 Wwise와 Unreal 측에서 모두 기능 지원이 확대될 것으로 예상됩니다. 추후 버전에서는 Reflect, 음향적 텍스처, 기타 Wwise Spatial Audio의 멋진 요소들과 함께 MetaSound를 재미있게 작업할 수 있기를 바랍니다.

협업적 개발

  • 게임을 만들 때 '네이티브 Unreal 오디오를 사용해야 할까요, 아님 전체 Wwise 구현 방향을 선택해야 할까요?'라는 딜레마가 자주 발생합니다. 하지만 Unreal 오디오를 사용하여 프로토타입하고 펀딩이 들어오면 Wwise를 설치하는 것이 흔한 일이죠.

이 경우 보통 프로토타입한 모든 것을 Wwise로 재구현해야 함을 의미했지만... 이제는 더 이상 그럴 필요가 없습니다! 이젠 여러분의 사운드 디자인 작업을 모두 포기할 필요 없이 AudioLink를 통해 입력 이벤트로 손쉽게 라우팅할 수 있습니다.

  • 모듈러 신시사이저 시장은 엄청나게 큽니다. 복잡한 노브, 스위치, 색색깔의 케이블이 줄줄이 이어진 것을 보고 격렬한 미소를 짓는 애호가들을 종종 목격하신 분들이 많으실 거예요. 이 파동을 만드는 장치의 오디오 출력을 녹음하여 게임에서 사용할 수는 있지만, 외부 하드웨어에 RTPC를 연결할 수는 없습니다.

하지만 이제 그럴 필요가 없게 되었죠. MetaSound는 여러분이 원하는대로 마음껏 노드를 조정하고 색색깔의 패치를 라우팅할 수 있게 해주며, 이 노브와 스위치를 게임플레이를 기반으로 한 사운드를 변경하는 변수와 연결해줍니다 (상호작용 오디오... 아 이 얼마나 멋진 개념인가요). 심지어 Wwise RTPC를 사용하여 AudioLink를 통해 여러 MetaSound 레이어에서 믹스나 EQ 설정을 변경하고자 하는 분들도 계시겠죠.

  • 오디오 엔지니어로서 저는 게임 사운드트랙을 개발할 때 Wwise Profiler를 항상 실행합니다. 재생되는 내용, 시기, 볼륨, 사용하는 버스 및 리버브/효과, CPU/보이스 사용량 등 제가 원하는 모든 것을 알려주죠. 프로파일러는 단연컨데 사운드트랙 모니터링, 디버깅, 최적화하는 데 가장 유용한 Wwise 기능 세트일 것입니다. 그리고 지금까지는 Wwise 엔진을 사용하는 것에 한해서였죠.

하지만 이제 Unreal 오디오가 이 향연에 동참할 수 있게 되었습니다! Wwise Profiler는 Input Event에서 처리를 캡처링하며 다양한 Profiler 뷰에서 이를 모니터링할 수 있게 해줍니다. AudioLink를 통해 라우팅하면 보이스 사용량, 트랙 위치, 버스 라우팅, 효과, 믹스값 및 기타 속성을 런타임 때 측정할 수 있습니다.

  • [여러분의 훌륭한 MetaSound => AudioLink => Wwise 아이디어가 여기 들어갑니다]

다리 연결하기

게임 오디오에서 가장 핵심적인 것은 상호작용적 게임 환경에서 감정적 경험을 만드는 것입니다. 이 목표를 달성하기 위해 매우 강력한 도구와 기술이 개발되었죠. 이 플랫폼에 있는 실제 사운드트랙은 Epic과 Audiokinetic의 정교한 오디오 시스템이 없었더라면 절대 존재하지 못했을 것입니다.

하지만 네이티브와 미들웨어 사이에는 항상 '한쪽을 선택해야 한다'는 이분법이 존재했습니다. 대부분 기술적인 이유에서 비롯된 것이었죠. AudioLink는 이 딜레마에 대한 기술적인 솔루션을 제공해주며 사운드 디자이너, 음악인, 엔지니어가 원하는 결과를 얻기 위해 가장 적합한 기술을 사용할 수 있게 해줍니다.

간단히 말해 기술 간의 다리라고 볼 수 있죠. 한 곳에서 다른 곳으로 이동하고 싶을 때 다리가 있다면 어떤가요? 너무 유용하겠죠!

   - pdx

이 프로젝트에 도움을 주신 Audiokinetic의 데미안(Damian), 미켈(Michel), 베느와(Benoit), Epic의 지미(Jimmy), 댄(Dan), 그레이스(Grace), 애런(Aaron)에게 감사의 말씀을 전합니다.

피터 "pdx" 드레셔 (Peter "pdx" Drescher)

피터 "pdx" 드레셔 (Peter "pdx" Drescher)

피터 "pdx" 드레셔는 게임 및 모바일 장치용 오디오 콘텐츠, 구현 및 코드를 제작합니다. 그는 타고난 사운드 디자이너이면서 동시에 뛰어난 음악가/작곡가, 글 작가이며, 또한 매우 숙련된 프로그래머이며 오디오 엔지니어이기도 합니다. 현재 샌프란시스코 만 지역에 위치한 ProTools 프로젝트 스튜디오 'Twittering Machine'을 운영하고 있습니다.

www.twittering.com/

댓글

댓글 달기

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

다른 글

게임 사운드 보관 | 제 2부: '컨커 최악의 날'과 미스터리한 MP3

오늘 소개할 이야기는 뜻밖의 결과, 다시 말해 우연한 발견에 관한 이야기입니다. 연구 프로젝트가 의도한 대로 끝나지 않았기 때문에 복잡하게 느껴지실 수도 있지만 끝까지...

29.9.2021 - 작성자: 파니 러비야르 (Fanny REBILLARD)

ReaWwise 개발 | 제 2부 - 구현

이 글은 2부작으로 제작된 블로그 시리즈의 제 2부입니다. 제 1부에서는 ReaWwise의 사전 제작에 대해 알아보았고, 제 2부에서는 이 확장의 개발에 대해 알아보게 됩니다.거의...

3.11.2022 - 작성자: 앤드류 코스타 (Andrew Costa)

올바른 코덱 선택에 대한 안내

게임 오디오에서는 항상 오디오 파일을 압축해야 했습니다. 우리가 꿈꾸는 그대로의 오디오 환경을 모두 압축되지 않은 오디오 샘플로 두기에는 여전히 디스크 공간이나 메모리가 부족하다는...

14.5.2024 - 작성자: 마튜 장 (Mathieu Jean)

Unreal Engine에서 Wwise 사운드를 재생하는 방법

Wwise에는 수많은 기능이 있습니다. 하지만 개발 초기에는 사용법에 대한 충분한 정보가 없을 경우 제대로 작동하지 않을 수 있죠. 저는 초기의 몇 가지 삐걱거림 때문에...

30.7.2024 - 작성자: 히로시 고다 (Hiroshi Goda)

BPM: 불렛 퍼 미닛(Bullets Per Minute)에서 음악과 게임플레이 동기화하기

어떤 리듬의 FPS를 만들지 결정하기 BPM: 불렛 퍼 미닛(Bullets Per Minute)은 박자에 맞춰 총을 쏘고, 재장전하고, 점프하고, 피하는 리듬 액션 FPS...

11.12.2024 - 작성자: Awe Interactive (어 인터랙티브)

실용적인 구현: Wwise를 활용하여 세인트 로우(2022)에서 실제 라디오 재구현하기

세인츠 로우(Saints Row, 2022)의 사전 제작 단계에서 시스템을 처음 설계할 때 오디오 팀은 여러 시스템의 작동 방식을 실제 세계에 맞추기로 결정했습니다. 이는 주로 팀...

15.1.2025 - 작성자: 브렌든 엘리스 (Brendon Ellis)

다른 글

게임 사운드 보관 | 제 2부: '컨커 최악의 날'과 미스터리한 MP3

오늘 소개할 이야기는 뜻밖의 결과, 다시 말해 우연한 발견에 관한 이야기입니다. 연구 프로젝트가 의도한 대로 끝나지 않았기 때문에 복잡하게 느껴지실 수도 있지만 끝까지...

ReaWwise 개발 | 제 2부 - 구현

이 글은 2부작으로 제작된 블로그 시리즈의 제 2부입니다. 제 1부에서는 ReaWwise의 사전 제작에 대해 알아보았고, 제 2부에서는 이 확장의 개발에 대해 알아보게 됩니다.거의...

올바른 코덱 선택에 대한 안내

게임 오디오에서는 항상 오디오 파일을 압축해야 했습니다. 우리가 꿈꾸는 그대로의 오디오 환경을 모두 압축되지 않은 오디오 샘플로 두기에는 여전히 디스크 공간이나 메모리가 부족하다는...