Reverb Zone 소개
Wwise 2023.1은 Wwise Spatial Audio에 Reverb Zone (리버브 존)이라는 새로운 도구를 추가했습니다. Reverb Zone은 Portal을 통해 다른 Room과 연결되지 않는 Room 안의 구역이며, 지오메트리를 사용하여 전환이 일어나는 곳을 정의합니다. Room과 Portal의 연장으로서 이 구역은 공간을 구분하며, 각자 맞춤형 Room에서 잘 표현할 수 없거나 Portal 배치와 관련된 제약 조건에 부딪힐 수 있는 공간 같은 속성과 리버브를 제공할 수 있게 해줍니다.
이 글을 통해 가상의 게임 개발 시나리오 몇 가지를 살펴보면서 디자인적인 일부 문제를 해결하는 데 Reverb Zone이 적합한 도구가 될 수 있는 부분을 보여주고, 예상치 못한 결과를 초래할 수 있는 몇몇 함정들을 소개해 드리겠습니다. 저는 Spatial Audio Volume을 배치하는 것과 같은 방식으로 Reverb Zone을 쉽게 배치할 수 있는 Unreal을 사용하고 있지만 동일한 원리가 모든 게임 엔진에 적용되기 때문에 최대한 일반화해서 말씀드리겠습니다. 이러한 예시는 일반적인 개요일 뿐 기술적인 세부 사항을 다루지는 않습니다.
일어나세요, 영웅님
모험 게임을 만든다고 가정해봅시다. 여러분의 모험 주인공이 숲 속 어딘가의 오두막에서 깨어납니다. 이 공간은 간단한 Room과 Portal 구성입니다. 실외는 SAV_Forest라고 하는 맞춤형 Room입니다. 오두막은 또 다른 Room입니다. 이 둘은 Portal을 통해 연결되어 있죠. SAV_Forest에서 실외 환경음을 시작하기 위해 이벤트가 전송되며, 이 공간음은 포털을 통해 오두막 안에서 들을 수 있습니다. 간단하죠.
오두막 안보다 바깥이 더욱 모험할 곳이 많기 때문에 당연히 우리의 퀘스트 전문가는 외부를 돌아다니며 길을 따라 빈터가 나올 때까지 숲을 가로질러 갈 것입니다.
빈터에 숨어있는 무언가
이 빈터는 오두막과는 다른 문제를 일으킵니다. 왜냐하면 이 빈터가 사실 '공간(방)'이 아니기 때문이죠. 분명한 출입구도 없고 포털을 배치할 직관적인 장소도 없습니다. 하지만 이 공간에서 들리는 소리는 다른 공간들과는 확연히 다르겠죠. 이 빈터는 벽이 없는 Room이라고 할 수 있습니다. 이 경우 빈터를 들어가면서 숲 환경음이 사라지도록 하는 것이 목표입니다. 결과적으로 숲 환경음이 중단되는 것처럼 들려야 하죠.
이 빈터는 Reverb Zone으로 표시됩니다. 일반적으로 Room이 사용되는 방식과 동일하지만 포털이 없는 것이죠. 이 구역에 상위 계층인 SAV_Forest를 지정합니다. 즉, 소리 전달에 있어 숲과 이 빈터가 계속해서 한 공간으로서 작동하도록 해줍니다. 빈터에는 거대한 나무가 있습니다. 여기에는 지오메트리가 있고요. 이 대모험의 일부로서 거대한 나무에는 수상한 생명체가 숨겨져 있습니다. 이 생명체는 이미터로 표시되죠. 이 교활한 적수의 사운드는 나무 지오메트리 주위와 Reverb Zone(벽이 없으므로)의 경계선을 통해 회절할 수 있기 때문에 이 미니어처 몬스터는 눈에 보이기 전에, 심지어 Reverb Zone에 들어가기 전부터 들을 수 있습니다. 그렇지 않으면 이 교활한 녀석이 우리 주인공에게 몰래 접근할 수가 있겠죠.
Reverb Zone에는 150cm의 Transition Region Width가 있습니다. 이 너비는 Portal의 깊이와 비슷하며, 공간 사이의 보조 센드의 균형이나 Room Transmission Loss(이 예시에서는 사용하지 않습니다. 아래를 참고하세요)와 같이 구역 안팎으로의 전환에 대한 보다 미묘한 세부 사항에 영향을 줍니다.
Reverb Zone의 바닥도 기본적으로 투명한 표면이기 때문에 숲 환경음이 원하는 것보다 더 크게 바닥을 통해 전달될 수 있다는 것을 명심하세요. 투명한 표면은 Transmission Loss가 0이며 Reverb Zone의 Transition Region은 이 투명한 표면 주변에서만 일어납니다. 그렇기 때문에 바닥을 통한 원치 않는 소리 전달을 방지하려면 이 표면은 지오메트리적인 Transmission Loss가 필요합니다. Unreal에서 저는 바닥 표면을 선택한 채로 디테일 패널의 Surface Properties 아래 Enable Surface를 체크해서 그렇게 해줬습니다. Enable Surface Reflector Set를 선택하지 않을 경우 (기본적으로 선택되지 않음) 활성화된 표면은 Transmission Loss가 1이 되며 비활성화된 표면은 Transmission Loss가 0이 됩니다 (투명해짐). Enable Surface Reflector Set를 선택할 경우 표면마다 Transmission Loss를 정확히 원하는 값으로 지정할 수 있는 추가 속성이 제공됩니다. SDK에서 이 속성은 AK::SpatialAudio::SetGeometry를 사용할 때 각 표면에 사용되는 AkAcousticSurface::transmissionLoss에 의해 지정됩니다. 각 표면은 이 속성을 동일한 방식으로 작동하기 때문에 Reverb Zone의 '천장'에도 적용될 수 있습니다. 이 경우 빈터에 사용되는 볼륨이 충분히 크고 천장이 멀리 떨어져있기 때문에 문제가 되지 않습니다.
참고: 저는 두 가지 종류의 Transmission Loss에 대해 말했습니다. Room Transmission Loss와 지오메트리적 Transmission Loss 간에는 중요한 차이점이 있습니다. 지오메트리에 속하는 전달 손실은 Reverb Zone에서 어떤 표면이 투명한지를 결정하기 위해 사용됩니다. 또한 AK::SpatialAudio::SetRoom도 지오메트리와 상관 없이 공간 자체에 속하는 Transmission Loss를 지정하도록 해줍니다. 지오메트리를 사용할 경우 Room Transmission Loss는 공간음과(Room 자체에 적용되는 사운드) 변조 경로(공간음과 일반 이미터로부터의 공간 보조 버스/리버브 체인)에만 적용됩니다. 이 예시에서는 Room Transmission Loss가 항상 0입니다. 또한 이 값은 Unreal에서 AkReverbZone 액터를 추가할 때 기본적으로 적용되는 값입니다.
아래 스크린샷은 Game Object 3D Viewer에서 Reverb Zone이 표시된 것을 보여줍니다. 이미터는 거대한 나무의 반대편에 보입니다 (단순화를 위해 나무의 지오메트리는 캡슐 모양입니다). 전달 경로는 나무에 의해 차단되며 회절 경로는 나무 주위로 이동하지만 Reverb Zone의 경계('벽'이 있어야 할 곳)는 통과합니다. Game Object 3D Viewer Options에는 Show Transition Regions(전환 구역 표시하기)라는 체크 상자가 있습니다. 이 체크 상자를 활성화하면 Transition Region이 여기 보이는 것처럼 파란색 상자로 표시됩니다. 이러한 상자는 근사치입니다. 포털과 마찬가지로 실제 영향 영역은 각 표면까지의 거리를 기반으로 하기 때문에 반올림됩니다.
리스너가 Reverb Zone 안으로 들어가면 SAV_Forest parent Room에 전송된 환경음은 리스너로부터 Reverb Zone의 '벽'까지의 거리에 의해 감쇠됩니다 (사운드의 Attenuation ShareSet에서 정의한 곡선대로). 구역 안으로 들어갈수록 숲 환경음은 더욱 옅어집니다. 이 Reverb Zone에 또다른 음을 전송할 수 있습니다. 이 음도 구역 밖에서 동일한 방식으로 거리에 의해 감쇠됩니다.
마을을 향해
우리 모험 전문가는 워낙 탁월한 재능을 가졌고 플레이어가 훌륭한 스킬을 선보였기 때문에 숲속 몬스터들을 쉽게 물리치고 (혹은 꼬드겨서?) 이 빈터를 지나 다음으로 넘어갈 수 있게 되었습니다. 계속해서 길을 따라가면 더 큰 빈터가 나옵니다. 이 중심에는 작은 마을이 있죠. 여기에는 빈터에서 봤던 것들의 정교한 버전을 구성할 수 있습니다.
이 전체 영역은 이미 실외 SAV_Forest 안에 담겨있지만 이번에는 레이어가 더 많습니다. 마을이 위치한 빈터는 이미 저희가 봤던 것처럼 구분할 수 있습니다. 이 구역을 저는 RZ_Meadow라고 했습니다. 그런 다음 마을 자체는 RZ_Town라고 하는 자체적인 Reverb Zone으로 지정했습니다. 저는 이 두 Reverb Zone이 모두 올바른 상위 계층 Room과 Transition Region Width를 가지고 사운드가 표면을 통과하고자 하는지 유무에 따라 각 포면을 구성했습니다 (주로 바닥이 투명하지 않도록 만들었습니다). SAV_Forest는 이제 RZ_Town의 상위 계층인 RZ_Meadow의 상위 계층이 되었습니다.
여기서 기억해야 할 것이 있습니다. 바로 각 Room과 Reverb Zone에 올바른 Room Priority를 설정해서 게임 오브젝트가 올바른 공간에 있도록 해주는 것이죠. 저는 SAV_Forest의 우선 순위를 가장 낮게 정하고 그 다음 RZ_Meadow, 그리고 RZ_Town을 가장 높게 정했습니다. 실제 숫자는 임의적이기 때문에 순서만 맞으면 됩니다.
이 배열에서 사운드는 이 계층에 있는 모든 레이어를 통과할 수 있으며 각 Reverb Zone에는 각자 사운드가 전송될 수 있습니다. RZ_Meadow는 이전에 봤던 SAV_Forest와 동일한 차단 효과를 가지고 있으며 RZ_Town은 둘 다에서 차단됩니다. 우리의 주인공이 마을에 도착하면 숲 환경음이 크게 감쇠되거나 완전히 제거됩니다. 대신 마을에 도달하면서 빈터 중심에 있는 건물 방향에서 나오는 RZ_Town 사운드를 듣게 되며, 이 사운드도 RZ_Town 밖의 거리에 의해 감쇠됩니다. 맞춤형 입구에 포털을 조심스럽게 배치할 필요 없이 마을은 어떤 방향에서든 접근할 수 있습니다.
마을 안의 GameObject에 전송된 사운드는 Reverb Zone의 '벽'이 아예 없는 것처럼 바깥으로 리스너를 향해 전달됩니다. 이 사운드를 Voice Inspector에서 살펴보면 이 Room 계층 구조의 모든 레이어로부터의 리버브가 이 사운드의 변조 경로에 모두 적용되는 것을 볼 수 있습니다. 관련된 모든 Room 버스가 서로 연결되어 있습니다. (더 자세한 내용은 개선된 Aux Send Model에 대한 최근 블로그 글을 봐주세요.)
테라스에 있는 퀘스트 제공자
지금까지 여러 이름으로 불린 우리의 영웅은 마을에 있는 모든 사람과 이야기를 나누고, 게임이 늘상 그렇듯 몇몇 집에 쳐들어가 항아리를 깨부수기도 하며, 이야기를 위해 필연적으로 근처에 있는 바에서 누군가에게 비밀 퀘스트 정보를 얻기 위해 대화를 걸으라는 말을 듣게 됩니다. 하지만 이 NPC는 바의 밖에 지붕이 있는 테라스 영역 안에 앉아있습니다. 이 테라스 영역은 Reverb Zone을 사용할 수 있는 또 다른 좋은 사례입니다. 여전히 바를 형성하는 Room의 바깥에 있으면서 미묘하지만 뚜렷한 리버브 효과가 있을만하죠. 저는 이 Reverb Zone을 RZ_Patio라고 했습니다.
이 특정한 Reverb Zone은 이전에 살펴봤던 곳들과 상당히 다른 점이 있습니다. 먼저 공통점은 상위 계층 Room(RZ_Town)과 Transition Region Width가 있다는 것입니다. 이 Reverb Zone에 자체적인 Room 보조 버스(고유한 리버브 효과가 있음)가 주어졌다는 점을 제외하고 가장 큰 차이점은 이 구역이 배치된 방식과 구역의 표면이 투명하다는 점입니다.
이전과 마찬가지로 바닥을 통해 소리가 전달되면 안 되기 때문에 바닥은 불투명해야 합니다. 하지만 이번에는 고려해야 할 표면이 두 개 더 있습니다. 이 테라스의 천장은 덮여 있습니다. 그렇기 때문에 바닥과 마찬가지로 해당 방향에서 이 구역 안팎으로 사운드가 전달되지 않겠죠.
또한 바의 외부 벽과 마주하며 바의 실내를 나타내는 Room으로의 Portal이 있는 표면도 있습니다. 이 표면도 두 가지 이유로 인해 불투명해야 합니다. 첫 번째 이유는 바로 벽이 있다는 것입니다. 다시 말해 이 표면을 사운드가 통과해서는 안되며 이 Reverb Zone의 전환 구역이 이 영역을 덮지 않아야 합니다. 앞서 언급했듯이 전환 구역은 투명한 표면 주위에만 존재합니다. 두 번째 이유는 말씀드렸듯이 바의 실내 공간을 RZ_Patio로 직접 연결하고 RZ_Town으로 간접 연결하는 포털이 이 표면에 존재하기 때문입니다. GameObject는 포털을 통하든 전환 구역이 있는 Reverb Zone을 통과하든 공간 사이의 한 전환 구역에만 있을 수 있습니다.
한 번에 하나의 전환 구역만 있을 수 있기 때문에 이 Reverb Zone을 배치할 때 도전 과제가 하나 더 있습니다. 이 구역은 마을의 가장자리에 위치해서 RZ_Town과 RZ_Meadow 사이의 전환 구역에 가깝습니다. 원치 않는 결과를 방지하려면 포털이 겹치지 않아야 하는 것처럼 전환 구역도 겹쳐서는 안됩니다. 이 경우 바 전체를 마을의 가장 자리에서 멀리 이동시키거나 마을의 Reverb Zone을 확장해서 두 전환 구역이 겹치지 않도록 만들 공간이 충분합니다.
이 Reverb Zone이 배치되었으니 이제 퀘스트 제공자 (즉, 이미터)는 이 구역 안애 배치될 수 있으며 소리 전달에 있어서는 여전히 RZ_Town 공간에 있고 여전히 바의 바깥에 있으면서 테라스 영역에 적용되는 고유한 리버브의 영향을 받을 수 있습니다. 바로부터 들려오는 모든 사운드(예: 공간음, 문을 통해 소리지르는 누군가의 목소리)는 평소대로 포털을 통과하여 전달됩니다. 포털을 지나면 Reverb Zone과 해당 상위 계층으로 구성된 공간의 계층 구조가 소리 전달의 목적을 위해 하나의 큰 공간인 것처럼 처리됩니다.
모험은 힘든 일이에요, 한잔 할까요.
즐거운 탐험 시간 게임의 아주 현실적인 퀘스트에 대해 심사숙고 끝에 만들어진 가상의 상황에 따라, 이제 이 테라스에 있는 Wwise한 퀘스트 제공자가 오늘 할 모험은 충분히 했으니 가서 한 잔 하라고 권유했다고 합시다. 그거 참 좋은 생각이죠. 그러니 당연히 주인공도 임무를 완수하기 위해 그렇게 할 것입니다. 경험치도 많이 얻었고요. 신나는 UI들이 펼쳐집니다. 훌륭해요. 그런데 바 자체는 일반 공간이며 Reverb Zone이 아닙니다. 왜 바는 선택적으로 일부 표면이 투명한 Reverb Zone이 아니라 일반적인 Room인걸까요?
Reverb Zone은 사실상 몇 가지 속성이 추가된 Room이라고 볼 수 있습니다. 이 둘 중 하나를 사용하도록 선택하는 데 영향을 미치는 몇 가지 주요 차이점이 있습니다. 저는 Reverb Zone이 더 쉬운 선택인 상황을 조심스럽게 골랐지만 일반 Room을 사용하는 것이 더 나은 상황도 있습니다.
한 가지 주요 차이점은 바로 상위 계층 Room입니다. Reverb Zone을 상하 관계로 묶으면 시뮬레이션/전달을 목적으로 한 공간으로 처리되는 공간 계층이 생깁니다. 이론적으로는 Reverb Zone만으로 공간을 제작해낼 수 있지만 그렇게 할 경우 Room과 Portal의 장점을 잃게 되어 머지 않아 성능 문제가 생길 수 있습니다. Spatial Audio는 보통 공간과 포털의 네트워크를 사용하여 이미터나 리스너 중 하나가 이동하거나 변경될 때 이미터와 리스너 간의 전체 경로를 다시 계산하는 것을 피합니다. 하지만 이 네트워크가 없으면 전체 경로를 매번 다시 찾아내야 하죠. 제가 제공해드린 예시에서는 차이가 미미하지만 복잡한 지오메트리의 경우 비용이 훨씬 높아집니다.
Reverb Zone을 차별화하는 또 다른 중요한 사항은, 다른 Room과는 달리 Reverb Zone에는 지오메트리를 필요로 한다는 것입니다. Reverb Zone 안팎으로 다니는 것은 포털 대신 전환 구역에 의존하기 때문에 이 전환이 일어나는 곳을 정의하기 위해 지오메트리가 존재해야 합니다.
아주 일반적으로 말하면 여러분이 일반적으로 '방'(밀폐된 공간, 혹은 대부분 밀폐되거나 명확하게 정의된 맞춤화된 입구가 있는 공간)이라고 하는 곳은 대부분 Room을 사용하는 것이 더 낫습니다. 집이나 회사 건물 안에 있는 방. 차고. 복도.
Reverb Zone은 큰 공간을 분할할 때, 공간이 완전히 밀폐되지 않을 때, 혹은 Portal 배치 제약으로 인해 공간 전환이 어려울 때 적합합니다. SDK 설명서의 예시를 가져오자면, 이 공간은 고속 도로 아래 공간이나 지붕이 있는 발코니일 수도 있고, 혹은 앞서 본 것처럼 실외 공간에서 분할해낸 공간일 수도 있습니다.
지금까지 함께 플레이해주셔서 감사합니다.
이제 퀘스트가 완료되었습니다. 모든 상자를 확인했고, 모든 NPC와 대화했고, 모든 몬스터와 싸웠고(아님 말고), 모든 항아리를 깨뜨렸습니다. 동시에 Reverb Zone에 대한 유용한 정보도 얻으셨길 바랍니다.
댓글