Wwise 2023.1에서 새로 제공되는 수많은 기능의 목록을 살펴보셨다면 아마 '개선된 Aux Send Model'이라는 흥미로운 문구를 발견하셨을 겁니다. 도대체 이게 무슨 말일까요!? 자, 여러분, 이게 바로 이 글의 주제랍니다. 이 글을 통해 Wwise Spatial Audio의 변경 내용을 간단하게 설명하고, 핵심적인 세부 내용과 근본적인 동기를 설명하면서 이 기능이 내부적으로 어떻게 작동하는지 알려드리려고 합니다. 하지만 꽤나 기술적인 내용이 있을 수 있다는 것을 주의해주세요. 이 글은 주로 Wwise에서 Room과 Portal을 구성하거나 Room Aux 버스를 생성한 경험이 어느 정도 있는 사용자들을 대상으로 합니다. Spatial Audio가 생소한 사용자분들은 먼저 Audiokinetic 런처에서 샘플 프로젝트를 다운로드하고 Unreal이나 Unity 맵에서 Room 리버브 몇 가지를 구성해본 후 이 글을 읽으신다면 이해하기가 더 쉬울 것입니다.
Wwise 2023.1에서는 유용성과 유연성 측면에서 모두 공간 음향 신호 경로를 점진적으로 개선했습니다. 여기서 말하는 신호 경로는 구체적으로 버스가 자동 생성되고 서로 라우팅되는 방식을 말합니다. Wwise Spatial Audio는 Sound Engine 위에서 작동하며 시뮬레이션에서 진행되는 상황과 일치하는 방식으로 오디오를 처리하고 렌더링하는 방법에 대한 지시를 전달합니다. 일반적으로 버스 라우팅 구조는 가상 세계 안에 있는 Emitter, Listener, Room Game Object의 배치를 기반으로 합니다.
원본/직접 경로
- 리스너에게 직접 도달.
- 사운드가 뚜렷한 방향에서 오는 것으로 인식됨.
- 포털을 통해서나 주변 장애물에 의해 회절될 수 있음.
- 벽을 통해 전달될 수 있음.
변조 / 간접 / 리버브 경로
- 간접 경로를 통해 리스너에게 도달.
- 사운드가 산란되고 분산됨.
- 정확한 방향을 인지하기 어려움.
- 공간의 벽을 통해 여러 번 튕겨질 수 있음.
Wwise Sound Engine은 Game Object 맥락 안에서 보이스와 버스를 스폰하는 유연한 프레임워크를 제공합니다. Auxiliary Send나 직접 출력 연결(총칭하여 '연결')로 연결되는 보이스와 버스는 Wwise Authoring Tool의 Voice Graph에서 시각적으로 확인할 수 있습니다. Voice Graph와 Voice Inspector는 Sound Engine이 어떤식으로 작동되는지 이해하는 데 훌륭한 도구입니다.
여기서 관련된 몇 가지 배경 정보를 제공해 드리지만 Spatial Audio가 Sound Engine 안에서 오디오를 라우팅하는 방식에 대한 전체 개요는 문서의 Room과 Portal 신호 모델에서의 전달 경로 섹션을 참고하세요. 새로운 탭으로 이 섹션을 열어서 참고하시면 도움이 될 수 있습니다.
Wwise 2023.1에서 개선된 Aux Send Model은 다음의 고차원적 설계 목표를 두고 제작되었습니다.
- 감쇠, 회절, 전달 곡선을 포함한 모든 렌더링 매개 변수를 사운드별로 커스터마이징할 수 있도록 하고 싶었습니다. 실제로 소리는 물리 법칙이 적용되는 엄격한 규칙들을 따릅니다. 하지만 게임에서는 종종 특정한 창의적 효과를 얻기 위해 사운드를 커스터마이징해야 할 수 있습니다. 예를 들어 일부 사운드는 물리가 허용하는 것보다 더 멀리 부자연스럽게 전달되어야 할 수 있습니다 (예: 대사가 들리게 하기 위해). 뿐만 아니라 다이내믹 레인지가 유한적이기 때문에 가상 세계에서 보다 더 크게 인식되어야 하는 사운드는 조용한 사운드보다 더 평평하고 긴 볼륨 감쇠를 사용하여 설계되어야 합니다. Wwise 2022.1에서는 게임에서 정의한 보조 센드에서 사운드별로 감쇠 곡선을 정의할 수 있으며, 이를 통해 공간 버스 사슬('변조 경로')으로 전송되는 양을 제어할 수 있습니다. 하지만 변조 경로의 회절과 전달 곡선은 별도적이었고 뚜렷했습니다. 이 경로는 공간으로 라우팅되는 모든 사운드 간에 공유되어야 한다는 점에서 다소 어색하고 부담이 되었습니다. 그래서 변화가 필요했죠.
- 사용자가 필요 이상으로 더 많은 곡선을 저작하는 부담을 주고 싶지 않았으며, 곡선을 저작할 때 타협하도록 하고 싶지도 않았습니다. 공간 안에 있는 모든 사운드에 알맞은 한 곡선을 공간에 설계하는 것이 항상 가능한 일은 아닙니다. 예를 들어 공간 안에서 발걸음과 총소리가 모두 재생된다면 공간 안에서 모든 사운드가 공유하는 곡선은 타협될 가능성이 높습니다.
- 공간 안으로 전달된 후 다시 밖으로 나오는 음향적 현상을 모델링하고자 했습니다. 동굴 입구로 가서 큰 소리를 지르거나 풍선을 터트리면 소리가 동굴 안으로 퍼졌다가 다시 나오는 것을 들을 수 있습니다. Wwise 2023.1 이전에는 이미터나 리스너가 동굴 안에 있을 때에만 동굴 리버브를 들을 수 있었습니다.
- 이 모든 것들을 공간 당 보조 버스 1개와 리버브 1개를 유지하며 달성하고자 했습니다. 보이스별로 고유한 리버브 버스와 리버브 인스턴스를 생성하면 작업이 더 쉬워집니다. 그 러면 각 리버브의 출력을 이미터의 고유한 특성에 맞게 정확하게 커스터마이징할 수 있습니다. 하지만 이 경우 안타깝게도 CPU 사용량이 허용할 수 없을 정도로 너무 많아져버립니다.
그렇다면 Wwise Spatial Audio 2023.1에서의 개선된 Aux Send Model에서는 어떤 변화가 생겼을까요?
변조 경로의 경우 평가된 회절 및 전달 손실값을 포함한 모든 렌더링 매개 변수가 버스 사슬에서 첫 번째 Room Bus의 입력으로 옮겨졌습니다. 공간 버스에 있는 효과가 선형적이고 시간에 불변한다고 가정할 때 사운드를 버스 전이나 후에 필터링하거나 감쇠하든 차이가 없습니다. 결과적인 오디오 버퍼는 완전히 동일합니다.
회절과 전달에 의한 필터링 / 감쇠
렌더링 매개 변수를 '상류'인 Room Bus의 입력으로 옮기면 설계 목표 1을 성취할 뿐만 아니라 설계 목표 2도 지원합니다. 사운드별로 공간 버스에 한 개의 입력 연결이 있기 때문에 각 사운드는 사운드에 특정한 렌더링 매개 변수를 적용할 수 있게 됩니다. 짜잔! Room Bus에는 감쇠 곡선이 더 이상 필요하지 않으며, 곡선을 저작해야 하는 부담을 줄였습니다.
하지만 Room Bus의 입력에 회적을 적용할 경우 단점이 있습니다. Room의 두 출력에 대해 회절값을 별도로 가질 수가 없습니다. Room Bus는 사슬의 마지막에 있을 경우를 제외하고 (예: 리스너의 공간) Listener Game Object의 직접 출력과 또 다른 공간으로 연결하기 위한 보조 센드, 이렇게 두 개의 출력이 있습니다. 회절이 입력에 적용될 경우 해당 신호는 미리 필터링되고 감쇠됩니다. Listener Bus로의 직접 연결과 하류 Room으로의 센드는 모두 이미 필터링되어 있습니다. Room의 회절이 직접 출력에만 적용되는 Wwise 2022.1과 비교해보세요. 사실상 이 경우 인접한 공간에 있는 사운드는 리스너가 있는 공간을 직접적으로 자극시킬 수 없다는 것을 의미합니다. 출력이 이미 필터링되었기 때문에 고주파수 에너지를 잃게 되죠.
이 단점을 완화하고 이를 통해 설계 목표 3을 성취하기 위해서 이미터에서 인접한 각 공간으로의 새로운 연결을 추가했습니다. 이전에 이미터는 이미터가 있는 공간으로만 전송하고 인접한 공간으로는 전송하지 않았습니다. 이 새로운 연결은 갑자기 생기는 것이 아니라 실제로 물리적 기반을 가지고 있습니다. 이미터로부터 직접 전달되어 인접한 공간을 자극하지만 이미터의 공간 주변으로 먼저 튕겨나가지 않은 소리를 나타내죠.
이미터가 이제 인접한 공간을 직접 자극하기 때문에 리스너가 그 중 하나 안에 있을 경우 올바른 회절값의 전체 스펙트럼으로 사운드를 듣게 됩니다. 게다가 인접한 공간으로 전송하면 사운드가 공간 안으로 전달된 후 다시 나오는 음향 현상을 모델링할 수 있게 됩니다 (설계 목표 3). 예를 들어 이미터와 리스너가 동굴의 입구에 있을 경우 이제 동굴이 근처 사운드로부터 자극을 받게 되죠. 늘 그렇듯 동굴 리버브는 3D로 공간화되며 공간의 입구로부터 나오는 것처럼 들리고 현실적인 패닝과 확산을 가지게 됩니다.
1. 사운드가 Emitter에서 Room 안으로 전달됨
2. 사운드가 이리저리 튀면서 분산 음장이 됨.
3. 분산 음장은 포털을 통해 다시 전달되며 Listener에 의해 들림
Wwise 2023.1과 Wwise 2022.1 비교해보기
Wwise 2022.1과 2023.1에서 통합 데모(Integration Demos)를 비교해보며 예시를 통해 더 확고하게 이해해봅시다. 통합 데모는 Wwise SDK와 함께 제공되며, 함께 따라해보고 싶으시다면 Audiokinetic 런처의 Samples 섹션에서 찾으실 수 있습니다. 아래는 'Portal and Geometry Demo(포털과 지오메트리 데모)'를 두 버전 모두에서 정확하게 재구성한 시나리오입니다. 리스너는 '실외'라고 정의된 공간 안에 있으며 이미터가 담긴 실내 공간과 인접합니다. 두 포털이 이 두 공간을 연결하여 벽을 통한 전달 경로 1개, 회절 경로 2개(각 포털마다 하나씩), 이렇게 하여 총 3개의 전달 경로가 생깁니다.
옛것과 사라지는 것들: Wwise 2022.1에서의 포털과 지오메트리
1. Emitter에서 Room으로
2. Room에서 Listener로
Voice Inspector는 왼쪽 창에 있는 보이스 그래프와 오른쪽 창에 있는 기여 목록이라는 두 가지 면으로 구성되어 있습니다. 보이스 그래프는 왼쪽에서 오른쪽으로 읽으며, 각 노드는 Master Audio Bus로 향하는 도중 노드 간 연결에서 적절한 경우 필터링, 감쇠, 패닝/공간화를 다 적용한 후 함께 믹싱되는 오디오 버퍼를 표시합니다. 각 단계마다 일어나는 일을 이해하기 위해서는 오른쪽에 있는 기여 목록을 참고합니다. 이 목록은 아래에서 위로 읽으며 볼륨과 LPF 값 및 이들이 파생되는 방식을 보여줍니다. 위의 Voice Inspector 스크린샷에서 보이스 그래프를 통해 사운드부터 시작하여 마스터 버스에서 끝나는 신호 경로를 형성하는 두 개의 강조 표시된 연결을 보세요. 여기서 '신호 경로'란 보이스 그래프에서 일련의 노드(사운드 혹은 버스)를 말합니다. Game Object 3D Viewer에서 보이는 전달 경로와 헷갈리지 마세요. 전달 경로는 Wwise Spatial Audio에 의해 계산되는 가상 세계를 통과하는 경로입니다.
Wwise Spatial Audio를 이해하는 데 있어 가장 복잡한 부분은 전달 경로와 신호 경로간의 관계를 이해하는 것입니다. 신호 경로는 전달 경로를 기반으로 합니다. 이미터에서 리스너까지의 가장 짧은 경로에 의해 형성되는 일련의 공간으로 구성되죠. 실용성과 효율성을 위해 타협해야 하는 부분이 있기 때문에 이 둘은 1:1이 되어서도 안되며 될 수도 없습니다. 특히 공간 당 리버브가 하나만 필요하며 (위의 설계 목표 4 참고) 신호 경로 안에는 피드백 루프가 있어서는 안됩니다.
전달 경로는 경로의 길이와 회절 및 전달 계수를 결정하며, 이는 다시 보이스 그래프에서 연결을 필터링하고 감쇠하는 방법을 결정합니다. 전달 경로는 관련 연결에 대해 오른쪽의 기여 목록에 표시됩니다.
강조 표시된 두 연결을 보세요.
1) 노란색으로 표시된 Emitter에서 Room으로의 연결.
- 이 연결은 공간 안에서 울리며 분산 음장을 생성하는 음원에 의해 주입된 에너지를 나타냅니다.
- 오른쪽 보이스 인스펙터에는 Game Object 3D Viewer에 있는 경로 3개에 해당하는 3개의 전달 경로가 있습니다.
- 여기에서 거리 감쇠가 적용됩니다. 이 부분은 변조 경로의 일부기 때문에 사운드의 'Auxiliary 센드 볼륨 (게임에서 정의한)' 곡선을 평가합니다. 여기에 거리를 적용하면 각 사운드마다 고유한 '변조' 감쇠 곡선[1]을 가질 수 있기 때문에 유용합니다 .
2) 청록색으로 표시된 Room에서 Listener로의 연결.
- 이 연결은 공간의 분산 음장을 나타내며, Listener로 직접 전달되며 포털을 통과하거나(회절과 함께) 벽을 통과할 수 있습니다(전달 손실과 함께).
- 마찬가지로 여기에도 오른쪽의 보이스 인스펙터에서는 Game Object 3D Viewer 안에 있는 경로 3개에 해당하는 3개의 전달 경로가 있습니다.
- Wwise 2022.1과 그 이전 버전에서는 회절과 전달 손실이 이 연결에서 적용되었습니다. Room 버스가 Listener의 공간일 경우를 제외하고 출력이 2개인 것을 보세요. Listener로 직접 향하는 출력이 있고, 다음 하류의 Room으로 향하는 출력이 있습니다 ('공간에서 공간으로'의 연결). 필터링이 이 연결에 적용된 이유는 필터링되지 않은 오디오가 다른 출력의 하류 공간으로 전달될 수 있도록 하기 위해서였습니다. 또한 회절(및 방해)이 Emitter의 직접/원본 경로에 적용되지만 보조/변조 출력에는 적용되지 않는다는 방식과도 일치했죠.
- 회절값이 Game Object 3D Viewer 안의 경로에 표시된 작은 백분율값과 완벽하게 일치되지 않는 것을 보세요. 미세한 부분이지만 이 차이는 변조 경로에서 회절을 계산하는 방식때문에 일어납니다. 여기에 대한 부분은 나중에 더 설명드리겠습니다.
새롭게 제공되는 것들: Wwise 2023.1에서의 포털과 지오메트리
1. Emitter에서 Room으로
2. Room에서 Listener로
이것 좀 보세요! 회절, 전달, 거리 감쇠가 모두 첫 번째 노란색 연결('이미터에서 공간까지')에 있습니다. 연결 2는 이제 보다 무난해졌습니다. 작동 방식적 볼륨(창의적 효과를 위해 버스 슬라이더를 조정하여 믹스에서 공간의 볼륨을 더 크거나 작게 만드는 것)만 담고 있죠.
이제 Room Bus의 곡선을 정의할 수가 없습니다 (설계 목표 2). Room Bus에 있는 곡선은 무시됩니다. 이제 모든 곡선이 한 곳에 있으며 사운드마다 커스터마이징할 수 있습니다 (설계 목표 1)!
기술적인 세부 사항: 미세한 볼륨 문제 해결하기
전달과 회절을 첫 번째 연결로 옮기면 사운드 엔진에서 오디오를 믹싱하는 방식에 관련된 미세한 문제도 해결하게 됩니다. 연결이 여러 사운드 경로를 나타낼 수 있지만 각 연결에는 하나의 DSP 필터가 있습니다. 여러 전달 경로에필터 값이 서로 다를 경우 (종종 그럴 경우가 있음) 볼륨으로 가중된 평균을 사용해서 최종 필터값을 얻습니다. 그런 다음 오디오를 함께 믹싱할 때 원하는 필터값과 실제 필터값 간의 차이를 기반으로 라우드니스 보수를 적용합니다. 결과적인 믹스는 각 전달 경로가 자체적인 DSP 필터를 가진 것처럼 설득력있게 들리죠. Wwise 2022.1과 그 이전 버전에서는 거리 감쇠가 첫 번째 연결에서 적용되고 회절/전달 필터링은 두 번째 연결에서 적용되기 때문에 다른 연결이 보다 더 긴 것을 각 연결이 모르기 때문에 사실상 볼륨이 가중된 평균이 잘못됐었다는 문제가 있었습니다. 능숙한 사용자분들은 리버브 볼륨이 생각한 것보다 항상 좀 더 컸다는 것을 알아차리셨을 수 있습니다. 그리고 심지어 일부 상황에서는 거리 곡선의 끝을 초과할 경우 갑자기 잘리는 것도 들으셨을 수 있습니다. 이러한 리버브 볼륨 문제가 이제 해결돼서 Wwise에서 리버브 사운드가 그 어느 때보다 훨씬 좋게 들리게 되었습니다!
Room Bus에 있는 감쇠 곡선에 대한 또 다른 점
Wwise 2022.1에서 Room Bus의 곡선 저작에 대한 마지막으로 약간 어색했던 점을 말씀해드리려고 합니다. 공간에 맞춤 곡선을 정의하고 싶을 경우 제대로 작동시키기 위해 꽤나 노력을 해야 했습니다. Wwise에서 Room Bus에 맞춤 감쇠를 추가한 후 거리-볼륨 곡선을 명시적으로 평탄하게 했어야 합니다 (이 곡선은 비활성화할 수가 없으므로). 그러지 않으면 신호 경로에서 거리 감쇠가 두 번이나 적용되는 사태가 벌어지게 되죠! Room Bus의 감쇠 곡선을 걱정하지 않아도 되면 삶이 훨씬 쉬워집니다.
새로운 연결: 이미터에서에서 인접한 공간까지
3. Emitter에서 인접한 Room으로
위의 스크린샷은 2023.1에서 새롭게 제공되는 '이미터에서 인접한 공간까지'의 연결을 강조 표시해줍니다. 이 연결은 이미터에서 나오며 인접한 공간을 직접 자극시키는 사운드 에너지를 모델링한다는 것을 기억하세요 (이미터의 공간에서 튕겨지지 않고).
리스너의 공간 리버브는 이제 포털의 회절에 부담을 주지 않는 신호 사슬에 의해 자극됩니다. 기여 목록에서 볼 수 있듯이 회절이 여전히 적용되지만 전략적으로 최소한 적용됩니다. 변조 경로에서 회절이 적용되는 정확한 방식에 대한 자세한 정보는 Wwise 2023.1에 대해 새롭게 제공되는 Wwise Spatial Audio 문서의 '변조 경로 회절' 섹션을 참고하세요.
더욱 흥미로울 수 있는 점은 바로 새로운 연결을 통해 앞서 언급한 '동굴 입구' 효과를 모델링할 수 있다는 것입니다. 한번 사용해보세요. 소리가 더 나아질 겁니다!
물론 Audiokinetic은 성능에 대해 항상 걱정하고 있으며 너무 많은 리버브 버스를 스폰하고 싶지 않습니다. 특히 최종 결과에 청각적으로나 크게 기여하지 않을 경우 더욱 그렇죠. 그래서 AkSpatialAudioInitSettings 안에 이미터 당 공간 센드의 개수를 제한할 수 있는 새로운 설정을 추가했습니다. uMaxEmitterRoomAuxSends를 1로 줄이면 2022.1의 경우처럼 인접한 공간으로 완전히 전송되는 것을 막을 수 있습니다. 보다 소리가 더 큰 공간이 조용한 공간보다 항상 선택되기 때문에 2나 3이 성능과 품질을 고려했을 때 가장 균형적이었습니다.
Emitter의 보조 센드값이 계산되는 방식
볼륨이 크고 작은 것에 대해 말하자면, 이미터의 Room Send 값을 어떻게 정했는지에 대해 간단한 설명을 드리는 것으로 마무리하겠습니다. Emitter와 Room 사이를 연결하는 각 연결에는 (자신이 속한 Room이나 인접한 Room이든) , 'Room Send' 게인이 있습니다. 이 게인은 기여 목록의 아래 표시되며 위의 2023.1 스크린샷에서 볼 수 있습니다. 고정된 거리에 있는 점음원 이미터는 자신이 속한 공간과 인접한 공간에 분배되는 일정하고 유한한 양의 에너지를 갖고 있습니다. 에너지는 항상 보존되어야 하며, 저작 도구의 게인 슬라이더를 위해 창의적인 목적으로 특정히 지시하지 않는 한 위치나 공간에 따라 변동해서도 안됩니다. 어느 시점에서나 (그리고 공간에서나) 제곱된 전송값은 최대 1이 됩니다. 인접한 공간으로 전송되는 에너지의 양은 포털의 확산값에 따라 결정되며 (엄밀히 말하자면 이미터에 대한 포털의 입체각이라고 함), 이미터 주변 구 전체에 비례합니다.
다음은 Game Object 3D Viewer를 위에서 바라본 스크린샷입니다. 앞서 제시된 통합 데모 시나리오와 완전히 동일합니다.
Emitter의 Room으로 전송: 80%
실외로 전송: 3%
실외로 전송: 17%
마치 파이처럼 이미터에서 나오는 사운드 에너지는 자신이 속한 공간과 인접한 공간 간으로 잘려 나눠집니다. 위의 예시에서는 에너지의 80%가 이미터가 속한 Room에 '같혀' 있습니다. 이 에너지는 이미터의 Room 리버브 버스로 전송됩니다. 나머지 20%는 인접한 공간으로 '손실'되며 인접한 Room의 리버브 버스로 전송됩니다 (여기에 보이는 숫자는 설명을 위해 대략적으로 설정되었습니다). 벽에 대한 포털 표면 영역의 비율은 공간 전송 간의 균형을 결정합니다. 폐쇄된 공간에 있는 이미터는 자신이 속한 공간으로 100% 전송합니다. 마찬가지로 벽보다 포털의 열린 공간이 더 많을 경우 더 많은 에너지가 인접한 공간으로 '손실'됩니다.
Wwise 2023.1은 Spatial Audio에 있어 큰 출시이며 개선된 Aux Send Model은 사실 그 일부일 뿐입니다. 이제 Audiokinetic 런처를 사용해서 사용해보세요. 현재 작업 중인 게임이 없다면 Unreal Demo Game을 사용하여 시작하거나 Wwise Audio Lab을 다운로드받아 풍부한 샌드박스 안에서 실험해보실 수 있습니다.
각주
[1] 2017년 Room과 Portal을 처음 출시했을 때 계셨다면 아마 각 공간마다 거리 감쇠를 정의하는 것에 좌절감을 느끼셨을 수 있습니다.
댓글