버전
menu_open
알림: 고객님의 주요 출시 버전( 2019.2.15.7667 )에 해당하는 최신 설명서로 이동했습니다. 특정 버전의 설명서를 보시려면 Audiokinetic 런처에서 오프라인 설명서를 다운로드하고 Wwise Authoring의 Offline Documentation을 확인하세요.
Wwise SDK 2019.2.15
Spatial Audio (공간 음향)

Spatial Audio (공간 음향) 모듈은 특히 다음과 같은 공간 음향과 관련된 몇 가지 서비스를 제시합니다.

  • 주어진 지오메트리에 대한 Reflect(반향)의 허음원(image source)을 계산하고,
  • 3D 버스 제어를 통해 Room과 Portal로부터의 소리 전달을 모델링하며,
  • 지오메트리 경계에서 방해된 음원의 회절을 모델링하고,
  • 간편하게 Wwise Reflect의 원본 API를 사용합니다.

그 핵심 내용을 보면, 다음과 같습니다.

  • 게임 오브젝트와 속성(위치 지정, 보조 전송, 방해, 차단)을 관리해 3D 버스를 제어하고,
  • 공간 음향 게임 오브젝트의 보조 센드와 (다수의) 위치를 제어하며,
  • 지오메트리 사운드 반향과 회절 알고리즘을 실행하고,
  • Wwise Reflect의 데이터를 패키징합니다.

Spatial Audio는 게임 측면의 SDK 요소로서, 다음 흐름도와 같이 Wwise 사운드 엔진의 일부를 포함하고 있습니다.

SpatialAudioFlow

Spatial Audio 개념

다음 내용에서는 Spatial Audio의 핵심적인 음향 개념에 대해 간략히 설명하고 있습니다..

Diffraction (회절)

Diffraction은 음파가 작은 장애물에 부딪힐 때, 또는 큰 장애물이나 열린 공간의 모서리에 부딪힐 때 발생하며, 이 때 음파는 부딪힌 곳을 중심으로 휘어집니다. 열린 공간(포털)을 통해 그 공간의 측면으로 전달되는 소리를 나타냅니다. 즉, 리스너는 열린 공간의 바로 정면에 있지 않아도 소리를 들을 수 있습니다. Diffraction은 게임에서 주로 매우 중요한 역할을 합니다. 플레이어에게 소리 방사체와 플레이어 사이에 존재하는 경로에 대한 암시를 주기 때문입니다. 다음 표는 오른쪽 상단에서부터 시작해, 한 가운데서부터 이어진 한정된 평면(검은 선)에 부딪히는 평면파의 음장(音場, sound field) 구성을 나타내고 있습니다. 이 모서리로 인해 발생하는 변화를 회절(diffraction)이라고 부릅니다. 왼쪽 영역이 View Region(시야 영역)으로서, 평면파가 변하지 않고 그대로 통과하는 영역입니다. 오른쪽 상단 영역은 Reflection Region(반향 영역)으로, 표면에서 발생한 반향이 입사파와 섞여 구불구불한 패턴을 만들어냅니다. 오른쪽 하단의 영역은 Shadow Region(그늘 영역)으로서, 회절이 가장 큰 역할을 하는 곳입니다. 이 표는 대략의 모습만 표현하고 있습니다. 실제 현실에서는 영역 간 경계에서 이 영역이 계속 이어지며, 입사파에 비해서는 미미할지라도 View Region에서도 모서리 회절이 발생합니다.

여기서 모서리를 점음원으로 보고, 이로부터 거리가 멀어짐에 따라 진폭이 감소하게 됩니다. 또한 주파수가 높을수록 낮은 주파수에 비해 진폭이 더 빠르게 감소합니다. 즉, 로우 패스 필터(low-pass filter)로 얼마든지 모델링할 수 있습니다. Wwise Spatial Audio는 두 API를 통해 회절을 모델링합니다. Room과 Portal의 회절 (Diffraction) 에서 Room과 Portal이 포털 회절을 어떻게 모델링할 수 있는지, 그리고 Using the Geometry API for Simulating Diffraction and Transmission 에서 방사체와 해당 초기 반사의 회절을 모델링하는 데 지오메트리를 어떻게 사용하는지에 대해 확인하세요.

Transmission (전달)

사운드 전달(transmission)은 Wwise Spatial Audio에서 모델링되는 또 다른 관련 음향 현상입니다. 전달은 장애물을 통과하는 사운드 에너지를 말하며, 전달 손실(transmission loss)이라는 용어는 해당 에너지에서 장애물에 의해 소멸되는 부분을 말합니다. 전달 손실을 흡수(absorption)와 혼동해서는 안 됩니다. 흡수는 반사되는 음파에 의해 소멸되는 에너지 부분을 나타냅니다. 두 매체의 접점에서 발생하는 상호 작용은 매우 다소 복잡할 수 있습니다. 반사되는 에너지와 흡수되는 에너지 간 비율은 머터리얼 표면의 속성에 의해 정의되는 것으로 간주되는 반면, 전달되는 에너지와 전달 손실 간 비율은 장애물의 크기와 모양, 밀도와 관련이 있습니다.

콘크리트와 같이 밀도가 높은 재질로 된 장애물일 때에는, 전달을 통해 리스너에게 도달하는 에너지 비율이 회절에 비해 작을 수 있습니다. 근처에 열린 곳이 있을 경우 특히 더 작습니다. 그러나 이런 열린 공간이 없을 경우, 또는 장애물이 나무나 유리처럼 밀도가 낮은 재질로 된 경우, 전달(transmission)의 기여도가 매우 높아지며 시뮬레이션할 때 매우 중요하게 됩니다.

Room Coupling (공간 결합)

충분한 시간이 지난 후, 소리 방사체가 속해 있는 환경의 음향 속성에 따라 분산 영역을 생성합니다. 게임에서는 보통, 연관된 환경을 나타내기 위해 변경된 매개 변수로 리버브 효과를 이용해 구현됩니다. 또한 분산 영역은 열린 공간 및 벽을 통과해 리스너의 환경을 활성화하는 곳에 도달합니다. Room coupling이란, 한 환경 또는 공간에서 다른 공간으로의 음향 에너지 이동(잔향)을 말합니다. 게임에서는 주로 한 공간의 잔향 출력을 다른 공간의 잔향으로 전달함으로써 Room coupling을 모델링합니다.

Obstruction(방해)과 Occlusion(차단)

광범위한 음향 현상을 나타내는 Obstruction(방해)은, 음파가 장애물에 부딪혔을 때 일어나는 모든 현상을 표현합니다. Occlusion(차단)은 이와 비슷하지만 장애물 주변에서 소리가 다른 방향으로 가지 않을 경우를 나타냅니다. Wwise 사운드 엔진은 게임 오브젝트에 Obstruction과 Occlusion 값을 설정해, 이를 볼륨, 로우패스 필터, 하이패스 필터의 전역적 설정으로 매핑합니다. 이 둘의 차이점은, Obstruction은 Actor-Mixer나 버스와 해당 출력 버스 간의 원본/직접 신호에만 영향을 끼치는 반면 Occlusion은 보조 전송에도 영향을 끼친다는 점입니다. 따라서 Obstruction은 방사체와 리스너가 같은 공간에 있을 경우 장애물에 의한 방해를 더 잘 표현하며, Occlusion은 가로막힌 벽을 통과하는 전달을 표현하는 데 적합합니다.

API 개요

Spatial Audio의 함수와 정의는 SDK/include/AK/SpatialAudio/Common/에서 확인하실 수 있습니다. 메인 함수들은 AK::SpatialAudio 네임스페이스에 노출돼있습니다. API 카테고리에는 다음 네 가지가 있습니다.

  • Basic Functions (기본 함수)
  • Rooms and Portals API (Room과 Portal API)
  • Geometry API (지오메트리 API)
  • Wwise Reflect에 직접 접근할 수 있는 헬퍼 함수 ("원본(raw)" 허음원(image source))

Rooms and Portals API는 간단하면서도 고급의 추상적 기하학 개념으로, 다른 공간에 있는 사운드 방사체의 전달을 표현합니다. Geometry API는 삼각형을 이용하여 Wwise Reflect로 다이내믹 초기 반사를 시뮬레이션할 때 허음원을 직접 계산하거나, 기하학 회절을 계산합니다. Spatial Audio는 또한 Wwise Reflect의 원본 API에 직접 접근하기 위한 헬퍼 함수를 가집니다.

Basuc Functions (기본 함수)

AK::SpatialAudio::Init() 를 이용해 Spatial Audio를 초기화합니다.

공간 음향을 사용할 때는 하나의 게임 오브젝트가 명시적으로 Spatial Audio Listener에 할당돼있어야 합니다. 그러려면 AK::SpatialAudio::RegisterListener() 를 호출해 원하는 리스너의 ID로 전달합니다. 해당 게임 오브젝트는 사운드 엔진 내에서 리스너로 등록되거나 할당돼야 합니다. 사운드 엔진 내 Listener에 대한 더 자세한 정보는 리스너 통합하기 를 참고하세요.

게임 오브젝트는 저작 툴에서 활성화된 공간 음향 관련 설정이 하나 이상 있는 사운드를 재생할 때 Spatial Audio Emitter가 됩니다.

  • Room 잔향을 활성화시키기 위해서는 해당 사운드의 게임 정의 보조 센드가 General Settings 탭에서 활성화돼있어야 합니다.
  • 반사 처리를 활성화하기 위해서는 해당 사운드의 초기 반사 버스가 General Settings 탭에서 할당돼있어야 합니다.
  • 회절 처리를 활성화하기 위해서는 해당 사운드의 'enable diffraction (회절 활성화)' 상자가 Positioning 탭에서 체크돼있어야 합니다.

게임 오브젝트의 위치는 이미터든 리스너든 AK::SoundEngine::SetPosition 를 이용해 사운드 엔진으로 전달됩니다. Spatial Audio는 사운드 엔진으로부터 직접 위치 정보를 가져와 반사와 회절 처리의 음원 위치를 결정합니다.

주의: 현재 Spatial Audio는 하나의 상위 레벨 리스너만 지원합니다.
주의: 대부분의 경우 Spatial Audio와 복수 위치 지정을 함께 사용하는 것은 바람직하지 않습니다. 포털 보간, 회절 및 반사 처리에는 단일 음원 위치 지정이 필요하기 때문입니다. 한 게임 오브젝트에 복수의 위치 지정이 설정된 경우, Spatial Audio 계산에는 첫 번째 위치만 사용됩니다.

Geometry API(지오메트리 API) 사용하기

Geometry API를 사용하면 게임에서 Wwise Spatial Audio로 삼각형 메시를 보낼 수 있으며, 여기에는 다음과 같은 두 개의 용도가 있습니다.

지오메트리 표현하기

게임의 지오메트리는 AK::SpatialAudio::SetGeometry()를 통해 Wwise Spatial Audio로 전달되며, AkGeometryParams 구조체를 이용해 표현됩니다. 대략의 내용은 다음과 같습니다.

  • 정점(AkVertex)들은 AkGeometryParams::Vertices 배열에서 정의되며, 이는 삼각형과는 별개입니다. 삼각형 배열 AkGeometryParams::Triangles의 각 삼각형은 꼭짓점 배열의 지표를 참조합니다.
  • 각 삼각형은 AkAcousticSurface 구조체를 가리키는 지표도 포함하며, 이는 음향적 질감과 서술 문자열을 정의합니다.
  • 음향적 표면과 삼각형 간의 관계성은 사용자가 정하기 나름입니다. 예를 들어, 각 삼각형마다 표면 하나씩 갖도록 하거나, 모든 삼각형들에 대해 단 하나의 표면만 갖도록 할 수도 있으며, 또는 이 둘의 중간쯤을 선택할 수도 있습니다.
  • 음향적 표면 정의는 선택 사항입니다. 표면의 음향 속성을 커스터마이징할 필요가 없는 경우, 삼각형은 AK_INVALID_SURFACE 로 남고 NULL이 AkGeometryParams::SurfacesAkGeometryParams::NumSurfaces 로 전송돼 0으로 설정됩니다.

공간 음향을 위한 삼각형 메시를 생성하는 방법

대부분의 경우 Wwise Spatial Audio에는 어느 삼각형 메시든 사용할 수 있습니다. 그러나 여기에는 몇 가지 주의할 사항이 있습니다.

  • 메시는 최대한 간결해야 합니다. 음향 계산은 수많은 레이 트레이싱(ray tracing) 작업을 필요로 하며 이에 따라 비용이 높아질 수 있습니다. 씬을 표현할 때 최대한 적은 개수의 삼각형을 사용할 수 있으면 가장 좋습니다.
  • 모든 삼각형은 양면을 사용합니다. 음향 반사는 삼각형의 두 면 모두에서 일어날 수 있기 때문에 내부 볼륨이 없는 메시를 만드는 것이 좋습니다. 예를 들어, 벽은 상자보다 평면이 될 수 있습니다.
  • 복사된 정점들은 서로 '용접'해서 붙여야 연결된 메시를 만들 수 있습니다. 다른 말로, 연결된 두 삼각형은 정점 배열 내 동일한 두 정점을 참조해야 합니다. 회절 계산에는 매우 중요한 사항으로, 잘 지키지 않을 경우 메시 틈 사이로 소리가 샐 수 있습니다.
  • 모든 정점 좌표는 월드 공간에 있습니다.
  • 다양한 호출을 통해 공간 음향으로 전송돼 지오메트리를 설정한 메시는 동일한 정점을 참조할 수 없기 때문에 연결됐거나 이어지는 면으로 간주하지 않습니다. 이 경우, 여러 메시에 걸쳐 이어진 모서리에 대해 회절 모서리가 생성되지 않습니다.
  • 메시에는 퇴화한 삼각형이 없어야 합니다. 모든 삼각형에는 최소 0보다 큰 공간이 있어야 합니다.
  • Geometric Diffraction(지오메트리 회절)을 사용할 경우에는 추가적으로 또 다른 규칙이 적용됩니다. 더 자세한 내용은 Using the Geometry API for Simulating Diffraction and Transmission 를 참고하세요.

초기 반사 시뮬레이션에 Geometry API 사용하기

Geometry API는 방사체와 리스너 위치와 개발 게임 지오메트리의 삼각형(대개의 경우 간략한)을 Wwise Reflect 플러그인과 함께 사용해 다이내믹 초기 반사의 허음원을 계산합니다. 사운드 디자이너는 거리와 재질에 따라 속성을 조정해 Wwise Reflect에서 직접 허음원 위치의 변화를 제어합니다.

지오메트리에 따른 초기 반사(early reflections, 줄여서 ER)에 대한 기본적인 설명을 보시려면 블로그 Image Source Approach to Dynamic Early Reflections (다이내믹 초기 반사에 대한 허음원 다루기)Creating compelling reverberations for virtual reality (VR을 위한 효과적인 리버브 만들기)를 참고하세요.

참고: 반사 순서는 리스너에 도달하기 전까지 파면(wavefront)이 부딪히는 표면의 개수를 나타냅니다. 예를 들어, 여섯 면으로 둘러싸인 구두 상자 모양의 공간이 있고, 그 안에서 일어나는 1차 반사를 시뮬레이션하려면 이미터당 초기 반사, 즉 허음원(image source)이 여섯 개를 이용합니다. 그러면 6 개의 반사가 만들어집니다. 2차 반사를 시뮬레이션하려면 1차 반사 여섯 개에 더해 다른 다섯 개의 벽에서 발생하는 2차 반사 여섯 개가 있어야 합니다. 그러면 이미터당 36 개의 반사가 만들어집니다. 반사의 개수는 반사 차수의 제곱지수로 증가합니다.

Wwise Spatial Audio에서는 현재 4차 반사의 시뮬레이션까지 지원됩니다. 반사 차수는 AkSpatialAudioInitSettings::uMaxReflectionOrder init 설정을 통해 전역적으로 설정됩니다. 이는 또한 AK::SpatialAudio::SetReflectionsOrder 를 이용해 동적으로 변경할 수도 있습니다.

Wwise 프로젝트 설정

동적 초기 반사를 지원하는 각각의 사운드에 대해 반드시 Wwise Authoring Tool의 General Settings 탭 아래 초기 반사 버스를 할당하여 Wwise Reflect 플러그인을 사용하는 Auxiliary Bus를 표시하도록 합니다. Spatial Audio가 이 버스와 연결하는 특수한 보조 센드를 구축하게 됩니다. 또는 센드 볼륨을 설정해도 됩니다.

일반적으로 환경 리버브의 경우, 리스너 게임 오브젝트에 Auxiliary Bus가 생성돼 복수의 이미터가 동일한 버스와 효과 인스턴스를 공유하도록 만듭니다. Spatial Audio에 의해 후기 리버브에 사용되는 Room에 대해서는 변함이 없지만, 초기 반사의 경우에는 다릅니다. 각 이미터에는 그 이미터 고유의 위치에 따라 달라지는 자체 반사 세트가 있기 때문입니다. 대신, ER 버스 인스턴스는 이미터 게임 오브젝트에 생성되고, 다양한 이미터는 Auxiliary Bus의 서로 다른 인스턴스를 전송하게 됩니다. 아래 'Wwise 프로젝트 설정'에 나온 Voices Graph의 스크린샷을 참고하세요.

Wwise 프로젝트 내의 동적 환경 효과를 효과적으로 다루기 위해서는 버스 구조체 디자인과 관련한 다음 내용을 잘 이해하는 것이 중요합니다.

감쇠 설계

Spatial Audio와 함께 사용하는 사운드의 감쇠 곡선을 설계할 때, 효율적인 계산을 위해 기억해둬야 할 중요한 것이 있습니다. 초기 반사 Auxiliary Bus에 할당된 사운드와 Authoring 툴에서 'enable diffraction (감쇠 활성화)'으로 표시된 사운드는 경로 계산을 제한하기 위해 감쇠가 유한 반경(finite radius)으로 할당돼있어야합니다.

Spatial Audio는 사운드의 감쇠를 사용해 반사와 회절 경로 계산의 최대 전달 거리를 결정합니다. 따라서 해당 최대 감쇠 거리가 이를 대표하는 값이 되도록 설정하는 것이 중요합니다. 또한, 감쇠가 플랫폼의 지정된 볼륨 한계점 아래로 내려가지 않을 경우 해당 사운드의 반경은 사실상 무한대가 됩니다. 이런 경우 Spatial Audio는 월드에 리스너가 어디 위치해있든 상관 없이 반사와 회절을 계산하려는 시도를 합니다. 'Output Bus 볼륨' 곡선과 'Auxiliary 센드 볼륨' 곡선은 곡선의 맨 오른쪽, 볼륨 한계점 아래에 반드시 최종 지점이 있어야 Spatial Audio 계산이 이미터 Game Object 주변 유한 반경에 한정됩니다. 볼륨 한계점은 프로젝트 설정 대화창에서 정의되어 Authoring Tool의 Project 메뉴에서 확인할 수 있습니다.

참고: 만약 Game Object에 여러 개의 활성화된 사운드가 각각 다른 감쇠가 할당되어 재생 중일 경우, 전체 감쇠 반경 중 가장 큰 것만 경로 처리 제한에 사용됩니다. 경로 처리는 한 Game Object당 한 번씩만 실행되며, 이 경로는 필요시 여러 사운드에 재사용됩니다.

보조 버스(Auxiliary Bus) 디자인

대개의 경우 다양한 환경을 표현하기 위해 다양한 Auxiliary Bus가 사용되며, 이 버스들은 이러한 환경의 리버브 특징을 각각 나타내는 리버브 ShareSet을 가질 수 있습니다. Spatial Audio에서 Wwise Reflect와 같이 다이내믹 ER을 사용할 때는 후기 리버브도 Auxiliary Bus의 리버브를 사용하도록 설계돼있을 수 있습니다. 하지만 Wwise Reflect에서 이미 이 작업을 하기 때문에 리버브의 ER 영역을 비활성화하고자 할 경우가 있습니다.

다른 한편으로는, Wwise Reflect가 후기 리버브에 사용하는 보조 버스와 동시에 실행돼야 합니다. 아래의 표는 전형적인 버스 구조체를 보여주고 있습니다. 이 표에는 EarlyReflections 버스 아래 세 개의 Auxiliary Bus에 각각 다른 Wwise Reflect의 ShareSet가 포함돼있습니다. 이 설계를 보면, 초기 반사를 발생시키는 ShareSet를 몇 개만 사용했다는 걸 알 수 있습니다. 이 Effect의 '공간 면'이 게임 지오메트리에 의해 런타임에 결정되기 때문입니다. 여기서 서로 다른 ShareSet를 사용한 이유는, 다른 오브젝트에서 방사되는 소리보다 플레이어(리스너)에 의해 방사되는 소리의 다양한 감쇠 곡선을 만들고자 하기 때문입니다.

버스 인스턴스

ER 버스는 (Wwise Reflect를 관리)는 할당된 ER 버스로 사운드를 재생중인 게임 오브젝트와 동일한 수의 인스턴스에 존재하게 됩니다. 허음원(image source)의 위치가 이미터의 위치에 따라 달라지므로 이는 매우 중요합니다. ER 버스의 라우팅을 올바르게 설정하기 위해서는 아래 그림과 같이 Listener Relative Routing 체크 상자를 활성화해야 합니다. 이렇게 하면 ER 버스의 다양한 인스턴스에 의해 발생되는 신호가 다음 믹싱 버스 다운스트림의 단일 인스턴스로 올바르게 믹싱됩니다. 이 단일 인스턴스는 이 방사체( AK::SoundEngine::SetListeners 로 설정)를 듣게 되는 게임 오브젝트에 해당되며, 이 게임 오브젝트는 주로 최종 리스너인 플레이어(또는 카메라)가 됩니다.

동일한 게임 오브젝트에 대해 재생중인 여러 사운드에 서로 다른 초기 반사 보조 버스가 할당된 경우, 해당 버스의 여러 인스턴스는 동일한 이미터 게임 오브젝트에 생성됩니다. Spatial Audio가 실행하는 반사 계산은 여전히 한 게임 오브젝트당 한 번만 실행되지만, 그 결과물은 Wwise Reflect 플러그인의 고유한 두 인스턴스로 전송됩니다. 이렇게 하면 플러그인의 서로 다른 ShareSet를 사용하는 사운드별로 반사 곡선을 커스터마이징할 수 있습니다.

주의: 모든 방사체-인스턴스가 리스너의 버스에 병합되도록 하기 위해서는 ER 버스의 Listener Relative Routing을 활성화해야 하지만, 3D Spatialization 모드를 None으로 설정해야 Wwise에 의한 '3D 공간화 중첩'을 방지할 수 있습니다. 같은 원리로, Wwise Reflect에서 추가적으로 또 다른 감쇠를 허음원 곡선에 더할 경우를 제외하고는, 감쇠를 사용해서는 안 됩니다.

후기 리버브로 초기 반사 전송하기

또한, 후기 리버브를 처리하는 데 사용했던 Auxiliary Bus로 전송된 게임 오브젝트(방사체)로 인해 ER 버스와 후기 리버브가 연결됩니다. 이러한 과정이 매우 유용한 이유는, ER이 발생된 다음 후기 리버브의 색을 정하고 '밀도'를 높이는 데 활용되기 때문입니다. 이를 활성화하기 위해서는 ER 버스의 Use game-defined auxiliary sends (게임에서 정의한 보조 전송 사용) 체크 상자를 반드시 활성화해야 합니다. 그런 다음 아래 있는 Volume 슬라이더를 이용해, 직접음과 대비해 후기 리버브로 보낼 초기 반사의 양을 조절합니다.

다음 표는 앞에서 설명한 내용의 런타임 모습을 나타내고 있습니다. 다음에 유의하세요.

  • Weapon Fire SW는 Early Reflection 센드로 인해 FirstPerson (초기 반사) 버스로 라우팅됩니다.
  • FirstPerson 버스는 FirstPersonCharacter 게임 오브젝트의 범위 안에 있습니다. 따라서 또 다른 게임 오브젝트가 필요에 따라 FirstPerson 버스의 다른 인스턴스로 전송됩니다.
  • Use game-defined auxiliary sends (게임에서 정의한 보조 센드 사용)가 활성화돼있으므로 FirstPerson 버스에서 Mezzanine2 보조 버스로 센드를 연결합니다.
  • FirstPerson 버스에 대해 Listener Relative Routing 옵션이 활성화돼있기 때문에 FirstPreson의 출력 버스 Binaural은 리스너의 범위, 즉 PlayerCameraManager 안에 있습니다. 모든 초기 반사 버스 인스턴스는 전부 리스너의 단일 Binaural 버스 인스턴스로 반환되므로 이 옵션이 활성화돼있어야 합니다. 그렇지 않을 경우, 이미터 게임 오브젝트에 대해 별도의 Binaural 버스 인스턴스가 잘못 인스턴스화됩니다.
  • 거리 때문에 FirstPerson과 Binaural 버스 간에는 감쇠가 없으며, ER 감쇠는 이미 Wwise Reflect 안에 적용돼있습니다.

Acoustic Texture 사용하기

각각의 반사 삼각형에 대해 게임에서 머터리얼 ID를 보냅니다. 이 머터리얼은 Wwise Project에서 Acoustic Texture의 형태로 Virtual Acoustics ShareSet에서 편집됩니다. 여기서 각 머터리얼의 흡수 특징을 정의하게 됩니다.

Room과 Portal 사용하기

Wwise Spatial Audio에서는 잔향 Effect와 보조 센드를 이용해 후기 잔향을 디자인합니다. Wwise Spatial Audio는 Rooms and Portals라는 간단한 고급 지오메트리 추상화를 통해 이 작업 과정을 지원합니다. Rooms and Portals를 이용하면 다른 공간에 위치한 이미터 소리의 전달을 효율적으로 모델링할 수 있습니다. 공간에 의한 소리 전달의 주요 특징에는 회절, 그리고 리버브의 결합(coupling) 및 공간화가 있습니다. Wwise 내에서 사운드 디자이너가 자유롭게 쓸 수 있는 툴을 활용해 원하는 오디오 변환을 완벽하게 제어할 수 있도록 합니다. 나아가, 게임 엔진에 의한 레이캐스트 기반 방해(obstruction)를 통제할 수 있도록 합니다. 이는 리스너와 동일한 공간과 근접한 곳에 있는 방사체에겐 다소 게임 엔진에 한정돼있기 때문에 성능 비용이 많이 들기 때문입니다. 또는, 지오메트리 API를 이용하면 Wwise Spatial Audio에 전적으로 obstruction 작업을 맡길 수 있습니다 ( Using the Geometry API for Simulating Diffraction and Transmission 참고).(

Room은 크기가 무한하며 Portal에 의해 다른 Room과 연결됩니다. 이렇게 연결된 Room들은 공간과 구멍의 연결망을 형성해 다른 공간에서 방사되는 소리가 리스너에세 전달되도록 합니다. Spatial Audio는 이 연결망을 이용해 원본 신호(dry signal)와 동작 발생 위치, 그리고 회절 각도에 따라 이동하는 거리를 조정합니다. 회절 각도는 방해와 Diffraction이라는 내장 게임 매개 변수로 매핑되며, 사운드 디자이너들은 RTPC를 이용하영 이를 볼륨이나 로우패스 필터 같은 속성에 연결시킬 수 있습니다. Spatial Audio는 또한 포털에 인접한 공간의 리버브 위치를 지정하고, 3D 버스를 이용해 이 리버브를 리스너의 공간 리버브로 결합할 수 있도록 합니다. 마지막으로, 이 공간들은 방향성을 지니고 있습니다. 즉, 공간 안에서 연관된 리버브에 의한 분산 영역이 리스너에 도달하기 전에 회전하여 리스너의 머리가 아니라 게임의 지오메트리에 연결시킵니다.

API 개요

이미터 게임 오브젝트에 공간 잔향을 사용하기 위해서는 Wwise Authoring 툴에서 Use game-defined auxiliary sends 체크 상자를 활성해화야 합니다. 룸의 센드는 Spatial Audio에 의해 적용되며, 게임에서 요청한 모든 게임 정의 센드도 마차가지입니다.

공간 버스는 올바른 위치 지정 옵션을 이용해 생성해야 합니다. 즉, Listener Relative Routing를 활성화하고, 3D Spatialization 설정을 "Position And Orientation"으로 하며, Use game-defined auxiliary sends를 활성화해야 합니다. 또 다른 방법으로, Room Auxiliary Bus Preset으로 버스를 생성할 수 있습니다.

Room과 Portal을 생성할 때는, AK::SpatialAudio::SetRoomAK::SpatialAudio::SetPortal 로 맵이나 레벨의 지오메트리를 기반으로 생성해야 합니다. Room과 Portal에는, 동일한 ID로 이 함수들을 다시 호출하여 런타임에 변경할 수 있는 설정이 있습니다. 그러면 게임이 각 방사체와 리스너에 대해 AK::SpatialAudio::SetGameObjectInRoom 를 호출해 이들이 어느 공간에 있는지 Spatial Audio에게 알려줍니다. Spatial Audio 관점으로 보자면, Room에는 정의된 위치나 모양, 크기가 없습니다. 따라서 Room은 이론적으로는 어떤 모양이든 될 수 있지만, 오브젝트가 있는 Room에 대해 게임 엔진 단에서 반드시 교차 검사(containment test)를 거쳐야 합니다.

주의: Room ID를 주의하세요. Room ID는 게임 오브젝트와 동일한 범위를 공유하므로, 이미 게임 오브젝트로 사용 중인 ID를 사용하지 않도록 조심해야 합니다.
주의: Spatial Audio는 각 Room에 대해 게임 오브젝트를 Wwise에 등록합니다. 사용자는 환경/공간 톤 사운드를 위한 해당 게임 오브젝트에 이벤트를 전달할 수 있지만, AK::SoundEngine 호출시 오브젝트의 위치나 게임에서 정의한 센드를 변경해서는 안 됩니다.

Room 설정에 있어 가장 중요한 것은 AkRoomParams::ReverbAuxBus 로서, 해당 Room 안에 있을 때 방사체가 어느 보조 버스를 전송해야 할 지 Spatial Audio에게 알려줍니다. 다른 설정에 대해서는 아래 섹션에서 다룰 예정입니다 ( 3D Reverb 사용하기전달 (Transmission) 을 참고하세요).

Portal은 두 Room 사이 열려있는 공간을 나타냅니다. Room과는 반대로 Portal은 위치와 크기가 존재하기 때문에 Spatial Audio가 스스로 교차 검사를 할 수 있습니다. Portal의 크기는 Portal 설정 AkPortalParams::Extent에서 결정합니다. 너비와 높이(X와 Y)는 Spatial Audio가 회절과 확산을 계산하는 데 사용하며, 깊이(Z)는 연결된 두 Room 사이 부드러운 전환을 만들어내는 영역을 정의합니다. 이 때 Spatial Audio는 보조 전송 레벨과 Room 오브젝트 배치, Spread(확산, 3D Spatialization에 사용됨)를 신중히 처리합니다. 더 자세한 내용은 아래 3D Reverb 사용하기Game Object 설명 를 참고하세요. Portal은 또한, AkPortalParams::bEnabled Portal 설정을 통해 활성화(열림)하거나 비활성화(닫힘)할 수 있습니다.

Spatial Audio 이미터와 함께 AK::SoundEngine::SetMultiplePositions 를 사용할 때는 주의하세요. Spatial Audio는 반사와 회절, 포털 전환을 비롯한 다양한 계산에 최초의 사운드 위치만 사용하기 때문입니다. 공간 센드를 사용하는 게임 오브젝트에 AK::SoundEngine::SetMultiplePositions 를 사용할 수는 있으나, 만약 게임 오브젝트가 포털을 통해 전환하는 경우 두 공간 사이 크로스 페이드에는 가장 처음 위치가 사용됩니다. 또한 Spatial Audio 공간과 함께 게임에 AK::SoundEngine::SetGameObjectAuxSendValues 를 사용할 수도 있습니다. 이 게임의 센드는 공간 오브젝트와 보조 버스의 센드에 더해 추가됩니다. 더 자세한 내용은 복잡한 Room 잔향 구현하기 를 참고하세요.

또한, Spatial Audio도 회절과 전달을 모델링하는 데 방해와 차단을 사용하지만, Spatial Audio 이미터와 함께 AK::SoundEngine::SetObjectObstructionAndOcclusionAK::SoundEngine::SetMultipleObstructionAndOcclusion 을 사용할 수 있습니다. API에 의한 차단/방해 값이 Spatial Audio의 값과 충돌하는 경우, 사운드 엔진은 둘 중 최대값을 사용합니다. 방해와 차단 및 이들을 Spatial Audio Room과 Portal에서 사용하는 방법에 대한 더 자세한 정보는 다른 Room으로부터 소리 전달 모델링하기게임 단에서 동일한 Room으로부터의 소리 전달 모델링하기 를 참고하세요.

SDK/samples/IntegrationDemo에 위치한 Integration Demo 예제에는 API 사용 방법을 보여주는 데모 페이지가 있습니다. Demo Positioning > Spatial Audio: Portals 를 확인하세요.

Obstruction(방해)과 Occlusion(차단) VS. Portal의 Transmission(전달)과 Diffraction(회절)

Wwise Spatial Audio에서, 다른 공간으로부터 오는 소리 전달은 Room과 Portal 추상화에 의해 관리됩니다. 열린 Portal을 통해 리스너에게 다다르는 전달 경로가 하나라도 있는 Room은 Obstruction이나 Diffraction 내장 게임 매개 변수 중 하나를 이용해 회절을 시뮬레이션합니다. 또한, 공간은 Wwise Occlusion을 활용해 벽을 통과하는 소리의 전달을 모델링합니다.

만약 방해를 구현하는 데 Spatial Auidio의 방해 설정과 함께 자신만의 방법을 사용하고자 할 경우 (예를 들어 게임 단 레이캐스팅에서 처리) 해당 게임은 사운드 엔진 API AK::SoundEngine::SetObjectObstructionAndOcclusion 을 사용할 수 있습니다. 포털 입구의 차단에는 게임에서 Spatial Audio API AK::SpatialAudio::SetPortalObstructionAndOcclusion를 사용할 수 있습니다. 예상치 못한 결과를 낳을 수 있으므로 어떠한 경우에도 게임 오브젝트 매개 변수로 룸 ID와 함께 AK::SoundEngine::SetObjectObstructionAndOcclusion 을 호출해서는 안 됩니다. Spatial Audio와 동일 공간 내 방해를 사용하는 방법에 대한 더 자세한 내용은 게임 단에서 동일한 Room으로부터의 소리 전달 모델링하기 를 참고하세요.

이와 관련한 음향 개념에 대한 설명은 Spatial Audio 개념 를 참고하세요.

소리 전달 기능의 개요

아래 표에는 Spatial Audio의 Room과 Portal 기능들을 음향 현상 측면으로 묶어놓았습니다. 그리고 각 기능에 대해 Spatial Audio가 어떤 역할을 하는지, 사운드 디자이너는 이를 어떻게 프로젝트에 적용할 수 있는지 간단한 설명이 나와있습니다.

Acoustic Phenomenon Spatial Audio Sound Design in Wwise
Diffraction of direct path
  • Volume, filtering, or any property on Actor-Mixer
  • 3D panning, Distance attenuation
Diffuse field (reverb)
  • Send to room's auxiliary bus
  • Constant power transitions
  • Reverb, bus volume and game-defined send offset on Actor-Mixer
Room coupling: reverb spatialization and diffraction of adjacent room's diffuse field
  • Volume, filtering, or any property on Bus
  • 3D panning of busses, reverb, bus volume and game-defined send offset of Auxiliary Bus to other busses
Transmission
  • Occlusion
  • Volume or filtering on Actor-Mixer

3D Reverb 사용하기

Spatial Audio Room과 Portal을 이용하는 Auxiliary Bus 디자인은 기존의 환경 모델링과 근본적으로 동일합니다. 각 Room에 Auxiliary Bus가 할당돼 사운드 디자이너가 선택한 리버브 Effect가 적용돼있어야 하며, 리스너가 Room 안에 있든 밖에 있든 동일하게 사용되는 버스입니다. 유일한 차이점은 Listener Relative Routing(Positioning 탭에 있음)을 활성화해 3D로 만들어야 한다는 것과, 아래 그림과 같이 3D Spatialization을 Position + Orientation이나 Position, 둘 중 하나로 설정해야 한다는 점입니다. 이를 통해 Spatial Audio가 Room의 게임 오브젝트 위치와 Spread에 따라 인접한 Room의 Portal 위치에서 리버브를 공간화할 수 있게 됩니다.

Room의 참조 방향은 공간 설정(AkRoomParams::Up and AkRoomParams::Front)에서 정의되며, 절대 변하지 않습니다. 이에 상응하는 게임 오브젝트의 방향은 Room의 방향과 동일하게 됩니다. 리스너가 Room 안에 있을 때, Spatial Audio에 의해 버스의 Spread가 100(360도)으로 설정됩니다. 3D 위치 지정 덕분에 리버브의 출력은 리스너와 Room의 상대적 방향에 따라 상위 버스에 회전되고 패닝됩니다. 이는, Auxiliary Bus가 Room의 게임 오브젝트에 연결돼있는 반면 상위 버스는 리스너에 연결돼있기 때문입니다. 아래 스크린샷에는 Auxiliary Bus Mezzanine2로 전송되는 방사체, 즉 Radio(무전기)를 보여주고 있습니다. 여기서 Radio나 리스너(PlayerCameraManager_0)가 아닌 이 Ak_RV_Mezzanine 공간에 대해 별도의 게임 오브젝트가 부여됐다는 것을 알 수 있습니다.

예를 들어, 만약 리버브에 이미 만들어 넣은 공간화된 초기 반사 패턴이 있다면 (이러한 패턴들은 Wwise RoomVerb의 ER 섹션에 명시적으로 존재하며, Wwise Convolution Reverb에 사용된 멀티채널 IR 녹음에 암시적으로 존재함), 리스너가 돌아설 때 이 리스너를 따라가는 게 아니라 Room에 묶여있게 됩니다. 제대로 된 몰입 사운드를 만들어내는 데 중요한 역할을 하죠. 한편, 환경 설정을 'rotate well'로 하는 것이 좋습니다. 앰비소닉 환경 설정은 회전에 영향을 받지 않기 때문에 유리합니다. 일반 구성(4.0, 5.1, 등)은 그보다는 덜 유리합니다. 일반 구성을 사용할 때에는, 중앙 채널이 없는 구성을 사용하는 것이 낫습니다. 보조 버스와 그 상위 레벨에 동일한 구성을 사용하고 Focus를 100으로 설정하기 위해서입니다. 북쪽을 향하고 있는 Room의 방향으로 설정된 4.0 잔향이 있는 이런 환경에서는, 북쪽을 바라보는 리스너에게 들리는 잔향이 마치 스피커에 직접 할당된 것처럼 들립니다. 동쪽이나 서쪽, 남쪽을 똑바로 바라보고 있는 리스너에게는 원본 잔향이 들리기는 하지만 채널이 뒤바뀌어 들리게 됩니다. 마지막으로, 동서남북 중 중간 방향을 바라보고 있는 리스너에게는 원본 잔향의 각 채널이 출력 채널에 한 쌍으로 혼합되어 들립니다.

리스너가 특정 공간의 Portal로부터 떨어져있는 경우, Spatial Audio는 해당 Portal의 범위에 따라 확산(spread)을 줄여, 거리에 따라서 잔향의 출력을 점음원으로 매끄럽게 축소시킵니다. 리스너가 Portal의 한복판에 있을 때 Spread는 50(180도)으로 설정됩니다. 그리고, 리스너가 공간 내부로 들어가는 순간, 가장 가까운 Portal로의 방향을 유지하면서 '열린 공간'과 함께 Spread가 더 증가합니다.

포털로 사운드를 믹싱해넣을 때, Spatial Audio는 음원과 리스너 간 전체 경로 길이의 거리를 계산합니다. 이 거리는 사운드를 공간 버스에 믹싱해넣기 전에 각 사운드의 감쇠 곡선에 적용되어 서로 다른 감쇠를 갖고 있는 사운드들의 관련 볼륨이 보존됩니다. 공간 버스에 직접 적용되는 추가적인 감쇠는 필요 없습니다. Room Auxiliary Bus에 감쇠가 있으면, 이 버스는 각 사운드의 감쇠에 더해 믹싱 후 적용되며, 나아가 해당 리버브의 볼륨을 줄이거나 포털을 통과하는 신호에 추가 필터링을 적용할 수 있습니다.

Room 게임 오브젝트 위치 지정은 Spatial Audio에서 관리하며, 공간 안에 리스너가 있을 경우 게임 오브젝트는 리스너와 동일한 위치에 놓입니다. 이 경우, 감쇠 곡선이 할당돼있다면 모두 거리 0으로 평가됩니다.

주의: Room Auxiliary Bus에 감쇠가 할당돼있는 경우, Spatial Audio가 Portal의 지오메트리에 따라 Spread를 수정하기 위해서는 자신의 Auxiliary Bus의 감쇠 설정에 Spread 곡선이 있어야 합니다. Auxiliary Bus의 감쇠 설정에서 Spread 곡선을 사용하면 Spatial Audio가 계산한 값을 오버라이드하게 됩니다.

공간 버스를 연결해(chaining) 공간 결합하기

공갑 결합은 (see Room Coupling (공간 결합)) 공간 버스를 사슬처럼 연결(chain)해 만들어냅니다 . 이를 위해서는, Room Auxiliary Busses에 Enable Game-Defined Sends 체크 상자가 반드시 활성화돼있도록 합니다. 이렇게 하면 한 Room이 리스너 Room의 리버브(또는 경로에 놓인 다음 공간)로 전송할 수 있게 됩니다. 한 사운드의 Game-Defined Auxiliary Send 볼륨과 감쇠 곡선은 각 사운드가 공간 리버브 체인의 첫 버스에 얼마나 믹싱돼 들어가는지를 제어하며, 각 Room의 Game-Defined Auxiliary Send 볼륨은 체인에서 다음 공간으로 얼마나 전송되는지를 결정합니다. 이는 포털을 통해 인접한 공간으로 음향 에너지가 얼마나 전달되는지에 영향을 끼칩니다.

Game Object 설명

Spatial Audio Room과 Portal은, Wwise 사운드 엔진에서 알고 있는 게임 오브젝트(게임이 등록한 이미터와 Spatial Audio가 등록한 Room 게임 오브젝트)의 위치 및 게임에서 정의한 센드, 방해, 차단과 같이 이들 고유의 속성 일부를 조작함으로써 동작합니다.

이미터

Spatial Audio의 초기화 설정 DiffractionFlags_CalcEmitterVirtualPosition 이 설정되면, 적용 가능한 경우에 한해 리스너에 인접한 Room 안에 있는 이미터의 위치가 회절된 각도에서 나타나는 것처럼 변경됩니다. 아래 3D Game Object Profiler의 스크린샷을 보면, 리스너 (Listener L)는 Portal의 오른쪽에 있고 '진짜' 이미터는 왼쪽 아래에 있습니다 (Emitter E, 방향 벡터 없음). Spatial Audio는 이동 거리를 유지하며 이미터의 위치를 왼쪽 위로 옮겨, 변경된 위치가 마치 그 구석에서 오는 것처럼 만듭니다. 리스너는 Portal 가장자리의 음영 영역에 대해 약 45도 각도에 위치하고 있어, 두 교차점에 작성되어 있듯이 27의 회절을 만들어냅니다.

Room에 여러 개의 Portal이 연결돼있을 경우, Spatial Audio는 이미터에 복수의 위치를 할당할 수 있습니다 (Portal 당 하나씩). MultiPosition_MultiDirection 모드를 사용하면 특정 Portal의 활성화 또는 비활성화 여부가 다른 Portal의 지각적 볼륨에 영향을 끼치지 않도록 할 수 있습니다.

주의: Spatial Audio 이미터와 함께 AK::SoundEngine::SetMultiplePositions 를 사용할 때는 주의하세요. Spatial Audio는 반사와 회절, 포털 전환을 비롯한 다양한 계산에 최초의 사운드 위치만 사용하기 때문입니다.

Room과 Portal

Spatial Audio는 각 Room에 대해 하나의 게임 오브젝트를 Wwise에등록합니다.

주의: 이 게임 오브젝트의 위치 지정과 보조 센드 값을 직접 수정해서는 안 됩니다.

Room에 리스너가 있을 경우, 해당 Room의 게임 오브젝트는 이 리스너를 따라가도록 움직입니다. 따라서 Room과 Listener 오브젝트의 거리는 약 0입니다. 그러나 Room 설정 (AkRoomParams)에 지정되어있는 방향은 유지됩니다 . 3D 버스의 방향에 대한 설명은 3D Reverb 사용하기 를 참고하세요.

리스너가 Room의 바깥에 있을 경우, 이 Room의 게임 오브젝트는 해당 Portal의 위치를 사용합니다. 더 정확히 말해, Portal의 뒷편, 즉 Portal의 접선에 리스너가 투영(projection)되는 위치 선상에서 Portal의 크기 끝에 고정됩니다. 위의 이미터 섹션에 있는 3D Game Object Profiler 스크린샷에서 Room의 게임 오브젝트를 통해 이를 확인할 수 있습니다.

여러 Portal이 있는 경우, 이미터와 동일한 이유로 MultiPosition_MultiDirection mode 에서 Room의 게임 오브젝트가 복수의 위치에 할당됩니다.

Portal 내부에서 전환이 일어날 경우 "Room-내부"와 "Portal"의 작동 방식은 부드럽게 보간(interpolate)됩니다.

다른 Room으로부터 소리 전달 모델링하기

Spatial Audio Room과 Portal과 함께, 리스너 소리를 제외한 Room 안의 소리 전달은 Room과 Portal 추상화에 의해 관리됩니다. 다른 Room 내부의 이미터가 Portal 및 연결된 회절(diffraction)을 통해 리스너에 도달하고, 공간들의 '벽'을 통한 전달(transmission)을 통해 도달합니다. 전달할 각 사운드의 Positioning 탭에서 Enable Diffraction 상자에 반드시 체크가 돼있어야 합니다.

회절 (Diffraction)

인접한 Room의 각 이미터에 대해 Spatial Audio는 Shadow Boundary, 즉 연결된 Portal의 가장 가까운 모서리로부터의 회절 각도를 계산합니다. 위의 Diffraction (회절) 을 참고하세요. 180도까지 가능한 이 회절 각도는 0에서 100% 사이 계수에 매핑되어 오디오 변환을 만들어낼 수 있습니다. 여기에는 두 가지 방법이 있습니다. 하나는 이미터 게임 오브젝트에 Obstruction (방해) 값을 설정하는 방법이고, 다른 하나는 내장 게임 매개 변수인 Diffraction (회절) 값을 설정하는 것입니다. Spatial Audio가 이 둘 중 어느 방법을 사용할 지, 또는 둘 다 사용할 지는 AkDiffractionFlags 의 초기화 선택에 따라 달라집니다.

Diffraction 내장 매개 변수를 사용할 경우, 게임 매개 변수를 생성해 해당 Bind to Built-in Parameter 드롭다운 메뉴를 Diffraction로 설정해야 합니다. 이 게임 매개 변수에 입력되는 값의 범위는 게임 오브젝트에 의해 결정되므로 각 이미터마다 고유한 범위를 갖습니다. 설정이 끝나면 RTPC로 자신의 Actor-Mixer의 속성을 제어할 수 있습니다. 가장 합리적인 방법은 Output Bus Volume과 Output Bus LPF를 이용해 회절의 주파수 기반 행동 양식을 표현하는 것입니다. Output Bus Volume과 LPF는 기본 Volume과 LPF에 대해 특권이 있는데, 그 이유는 이들이 직접 신호 경로에만 적용되고 Room의 잔향의 보조 전송에는 적용되지 않기 때문입니다.

Room의 분산 에너지 또한 Spatial Audio의 소리 전달 모델에 Room의 Auxiliary Buss 출력으로 포함됩니다. Spatial Audio는 이에 대한 회절도 계산합니다 ('변조 회절'). Spatial Audio는 분산 에너지가 Room가 Portal에 수직으로 닿는 면에서 새어나온다고 가정합니다. 따라서 이 Portal의 법선 벡터와 연관시켜 회절 각도를 계산하게 됩니다. 이 회절 값은 Wwise에서 이미터의 원본 경로와 똑같은 방식으로 사용할 수 있습니다. 내장 게임 매개 변수를 사용할 때는, RTPC로 공간의 보조 버스에, 즉 일반적으로 버스의 Output Bus Volume과 Output Bus LPF에 사용해야 합니다. Actor-Mixer와 같은 이유로 버스의 Bus Volume 속성보다 Output Bus Volume 속성이 더 주로 사용됩니다. 해당 잔향과 리스너 공간 잔향의 커플링에 사용되는 보조 전송 경로에 영향을 미쳐서는 안되기 때문이죠.

또 다른 방법으로, 내장된 프로젝트 전반에 걸친 방해(obstruction)를 사용해 Spatial Audio의 회절로부터 오디오를 조정할 수 있습니다. 이 방법을 사용할 때는 Spatial Audio가 계산된 Diffraction을 이용해 방해를 이끌어냅니다. Diffraction 내장 게임 매개 변수와 비교했을 때, 프로젝트 전체에 대한 방해는 Wwise Project 전체에 전역적인 곡선으로 매핑됩니다. Project Setting에서 이를 설정할 수 있습니다. 위에서 언급한 것처럼 Obstruction Volume, LPF 및 HPF는 Output Bus Volume, LPF 및 HPF에 적용됩니다. 방해 곡선이 전역적이기 때문에 프로젝트 전체의 방해를 이용한 방법은 Diffraction 내장 게임 매개 변수 방법보다 사용이 제한적입니다. 반면, 적은 조정과 편집만으로도 통제가 가능하다는 장점이 있습니다 (RTPC 이용). 또한 각각의 게임 오브젝트 위치에 일일이 Obstruction 값을 적용해야 하는 번거로움 없이 내장 게임 매개 변수는 한 값만 적용하면 모든 게임 오브젝트의 위치에 적용되는 이점이 있습니다. (복수의 값을 설정할 경우, 가장 작은 값이 선택됩니다.) 앞서 언급했듯, 여러 게임 오브젝트 위치 지정은 Room에 한 개 이상의 Portal이 있을 때 사용합니다.

전달 (Transmission)

한 이미터가 다른 공간에 있을 때에도 Spatial Audio는 전달(transmission)을 사용해 벽을 통과하는 사운드를 모델링하며, 이 때 이미터 게임 오브젝트의 Occlusion을 사용합니다. Occlusion 값은 Room 설정의 AkRoomParams::WallOcclusion 에 의해 결정됩니다. 최대 차단 값은 리스너의 Room과 이미터의 Room 사이에서 결정됩니다. Occlusion은 프로젝트 전역적인 곡선을 통해 볼륨, LPF, HPF에 매핑되며, Project Settings의 Obstruction/Occlusion 탭에 정의됩니다. Obstruction과는 달리 Occlusion은 보조 버스에 전송되는 신호에도 영향을 끼치기 때문에 차단된 이미터가 해당 Room의 잔향에 미치는 영향과 여기에 연결된 다른 잔향은 전부 Occlusion 곡선에 의해 조정되고 필터링됩니다. 이에 따라 Occlusion이 올바르게 흡수(전달)를 모델링하게 됩니다.

결합 (Coupling)

Portal을 통해 리스너의 공간으로 관통하는 인접 공간들의 분산 에너지는 해당 Portal에 위치한 음원들처럼 보일 수 있어 기존 리스너의 공간에 영향을 끼치게 됩니다. 즉, 리스너 Room의 Auxiliary Bus로 전송돼야 합니다. 이를 위해선 앞서 언급한 것처럼, 인접한 Room의 보조 버스에서 Enable Game-Defined Sends 체크 상자를 체크하면 됩니다. Game-Defined Send Offset을 이용해 다른 공간의 잔향으로 전송되는 양을 조정할 수 있습니다.

게임 단에서 동일한 Room으로부터의 소리 전달 모델링하기

리스너와 동일한 공간에서 방사되고 있는 사운드의 방해는 Geometric Diffraction를 이용해 다룰 수 있으며 ( Using the Geometry API for Simulating Diffraction and TransmissionRooms and Portals로 지오메트리 API 결합하기 참고), Spatial Audio Rooms and Portals에서만 다루지는 않습니다. 만약 방해를 계산할 목적으로 지오메트리를 Spatial Audio로 보내고자 한다면, 동일한 공간 내의 방해는 게임 단에서 관리해야 합니다. 공간 내 방해 계산에 사용되는 상세 표현 단계 및 방법, 지오메트리의 표현은 게임 엔진의 명시에 따라 크게 달라집니다. 게임에서는 주로 정밀하게 계산된 다양한 각도로 레이 캐스팅(ray-casting)을 이용해 이 작업을 실행합니다. 이 섹션에서는 Rooms and Portals를 함께 사용해 게임 단에서 어떻게 방해를 구현하는 지를 설명합니다.

반면 Spatial Audio Room과 Portal에서는 이 작업을 모든 이미터에 대해 실행할 필요는 없지만, 리스너와 동일한 Room에 있는 이미터에 대해서는 이 작업을 실행합니다. 이 방법이 유용한 이유는, 대부분의 경우 Spatial Audio가 전달 경로를 계산하는 데 사용하는 알고리즘보다 레이 캐스팅의 비용이 훨씬 더 비싸기 때문입니다. 이미터와 리스너 사이 공간 내 방해는 기본적으로 동일한 공간에서 발생하기 때문에, 장애물이 리스너나 이미터를 완전히 가리지 않으며 해당 사운드는 공간 내 반사를 통해 리스너에 도달한다고 추정합니다. 이는 보조 전송이 아니라 원본/변조 신호 경로를 통해서만 올바르게 모델링됩니다. 즉, Obstruction이 올바른 매커니즘이라는 뜻입니다. 때문에 게임은 AK::SoundEngine::SetObjectObstructionAndOcclusion 을 호출해야 합니다.

또한, 인접한 공간의 Portal은 리스너의 Room에 있는 사운드 이미터와 같이 간주돼야 합니다. 따라서 리스너와 이 리스너가 있는 Room의 Portal 사이의 방해 알고리즘이 게임 단에서 실행돼야 합니다. 그런 다음 각각의 포털에 대해 AK::SpatialAudio::SetPortalObstructionAndOcclusion 를 호출해야 이 리스너와 공간 내 방해를 안전하게 선언할 수 있습니다.

복수의 Room 순회

사운드 전달은 여러 공간에 대해서도 동작합니다. 전달 경로를 검색하면 Spatial Audio 내에서 Room 트리를 검색합니다. Room을 이미 검색한 경우에는 검색을 중지해 순환 연결을 피합니다. 얼마나 깊이까지 검색할 지는 Spatial Audio의 초기화 설정 AkSpatialAudioInitSettings::uMaxSoundPropagationDepth 에 의해 결정됩니다 (기본 설정은 8).

복잡한 Room 잔향 구현하기

사운드 엔진 API AK::SoundEngine::SetGameObjectAuxSendValues 는 Spatial Audio가 설정한 또 다른 Auxiliary Send를 추가하는 데 사용됩니다. 이는, 서로 다른 환경 효과를 필요로 하는 오브젝트나 지형이 있는 경우와 같이 동일한 공간 안에서 복잡한 잔향을 디자인할 때 매우 유용합니다. 특정 Room의 AkRoomParams::ReverbAuxBus 역시 "none" (AK_INVALID_AUX_ID)으로 설정해놓을 수 있어, AK::SoundEngine::SetGameObjectAuxSendValues 로 오직 게임에 의해서만 해당 전송 버스을 관리할 수 있게 됩니다.

Using the Geometry API for Simulating Diffraction and Transmission

The geometry passed to Wwise Spatial Audio may be used to simulate diffraction and transmission of sound. 즉, 방해(obstruction)를 계산하는 데 있어 게임 엔진의 레이캐스팅 메소드를 완전히 대체할 수 있습니다.

이미터가 오브젝트에 의해 리스너로부터 가려진 경우, Spatial Audio는 오브젝트의 모서리를 감싸 돌아오는 경로들을 계산하고, 이 경로가 존재할 경우, 모서리를 돌아 굽어지는 소리의 회절 계수를 계산합니다. 이에 따라 이미터의 명확한 입사각이 조정되고, 회절 값을 Wwise로 전송해 궁극적으로 소리에 어떤 영향을 끼칠 지 통제할 수 있게 됩니다. 회절은 주로 로우패스 필터가 됩니다.

Additionally, Spatial Audio computes sound paths going through geometry. Sound transmitting though an obstacle has a transmission loss coefficient applied to it, resulting from the surface properties assigned to the geometry via the API. Typically, transmission loss is modeled with a low-pass filter and a volume attenuation.

아래의 그림은 Wwise에서 3D Game Object Viewer의 스크린샷으로, 얇은 벽의 모서리를 돌아 회절하는 사운드를 보여주고 있습니다.

주의:
Geometric diffraction and transmission can be used to entirely replace your game engine's raycasting method for computing obstruction, however the performance cost grows with the complexity of the geometry. Spatial Audio로 전송된 지오메트리는 최대한 단순해야 합니다. 또한, Geometric Diffraction의 복잡한 계산을 줄이기 위해 이와 함께 효율적인 Room과 Portal 추상화 ( Room과 Portal 사용하기 참고)를 사용하는 게 좋습니다.

지오메트리 회절은 이미터와 리스너 사이 직접 소리 전달의 경로에 사용할 수 있지만, Wwise Reflect와 함께 사용해 초기 반사의 경로에도 사용할 수 있습니다.

회절의 지오메트리 설정하기

Spatial Audio로 보낸 각 지오메트리 세트는, 회절 경로를 계산하는 데 이를 사용할 지 여부를 명시해야 합니다. 여기에는 AkGeometryParams::EnableDiffraction 플래그를 이용합니다. 이 플래그는 회절을 계산하는 데 필요한 모서리 데이터를 생성시키고, 직접 경로의 지오메트리 회절과 반사 회절에 사용됩니다.

또한, 메시의 경계 모서리가 소리를 회절시키도록 허용할 것인지 아닌지에 대해서도 결정합니다. 특정 메시에서 경계 모서리는 단 하나의 삼각형에만 연결된 모서리로 정의되기 때문에 다면의 경계선에 존재합니다. 복잡한 회절 계산일수록 모서리의 개수가 늘어나게 되므로, 자신의 메시에 소리를 회절시지 않는 경계 모서리가 있다면 이 옵션을 비활성화해야 합니다.

마지막으로, 모서리 머터리얼은 에너지를 흡수하지 않기 때문에 음향 표면에 할당된 음향적 질감은 회절에 아무런 영향을 끼치지 않는다는 점을 주의하세요. 모서리는 단순히 소리를 구부리기만 합니다.

Setting Up Geometry for Transmission

First, ensure that the flag AkSpatialAudioInitSettings::bEnableTransmission is set to true to simulate transmission.

On geometry, it may be desirable to adjust the transmission loss coefficient for various geometry types. For example, a concrete structure is likely to block almost all sound transmission, whereas geometry composed of plywood may block significantly less sound.

Each AkTriangle in the AkGeometryParams::Triangles array contains AkTriangle::surface, an index into the AkGeometryParams::Surfaces array. The AkAcousticSurface::occlusion field describes how much transmission loss to apply to a sound transmitting though a triangle that references it. It is expressed as value between 0 and 1. The transmission loss is converted to a percentage and then used to evaluate the occlusion curve. The final volume attenuation and filter value applied to a sound with a given transmission loss will depend on the occlusion curves defined in the Wwise Project Settings.

직접 경로의 지오메트리 회절

Integration Demo 예제 (SDK/samples/IntegrationDemo)에서 Geometric Diffraction 데모를 통해 직접 경로의 지오메트리 회절에 사용하는 지오메트리의 예제를 자세히 살펴보실 수 있습니다. Demo Positioning > Spatial Audio: Geometry 를 확인하세요.

Setting up a Sound for Diffraction and Transmission

Wwise Authoring 툴의 Positioning 탭에서 반드시 Enable Diffraction에 체크가 돼있어야 합니다. This box enables Spatial Audio features related to diffraction and transmission, including:

  • Computation of the diffracted path of the sound through geometry and/or portals, if applicable. The path calculation is performed by Spatial Audio on each game object that is currently playing a sound with diffraction and transmission enabled. 동일한 게임 오브젝트에 회절이 활성화된 사운드가 여러 개 재생중일 경우, 경로 계산은 단 한 번만 실행됩니다.
  • Computation of the transmission path of the sound, through geometry and/or between rooms. The final transmission loss coefficient is always taken as the largest transmission loss value encountered along the transmission path, whether it comes from a room's AkRoomParams::WallOcclusion or a triangle's associated AkAcousticSurface::occlusion.
  • Generation of virtual positions for diffraction paths, which are sent to the Sound Engine for rendering the sound, assuming Spatial Audio's initialization setting AkSpatialAudioInitSettings::bCalcEmitterVirtualPosition is set.
  • Application of the obstruction curve according to the diffraction coefficient, assuming Spatial Audio's initialization setting AkSpatialAudioInitSettings::bUseObstruction is set. 게임에서도 AK::SoundEngine::SetObjectObstructionAndOcclusion 를 이용해 방해 값을 설정해놓은 경우, 둘 중 더 큰 값이 사용됩니다.
  • Application of the occlusion curve according to the transmission loss coefficient, assuming Spatial Audio's initialization setting AkSpatialAudioInitSettings::bUseOcclusion is set. In the case that the game has also set an occlusion value via AK::SoundEngine::SetObjectObstructionAndOcclusion, the maximum of the two values is used.

Wwise에서의 직접 경로 회절

회절은 3D Game Object Viewer에서도 확인할 수 있으며, 적절한 프로파일링 설정과 보기 옵션을 설정할 수 있습니다 (아래 그림). 이미터에서 리스너로의 경로에 대해 계산된 회절 인자는 각 회절 모서리에 대해 표시됩니다. 이 회절 인자는, Spatial Audio를 초기화할 때 보내진 AkSpatialAudioInitSettings::uDiffractionFlags에 따라 Diffraction이라는 이름의 Built-in Game Parameter나 이미터의 Obstruction 값을 통해 Wwise로 전달됩니다. Built-in Game Paramter 값은, 이 값이 사용되는 해당 RTPC 곡선에서 직접 프로파일링할 수 있으며, Obstruction은 Profiler의 Obs/Occ 탭에서 프로파일링할 수 있습니다.

Portal에서와 같이, Diffraction 값은 리스너에서 이미터가 직접적으로 보이는 곳에 있을 경우 0을 기준으로, 이미터가 음영 영역(shadow zone)으로 들어감에 따라 증가합니다 ( Diffraction (회절) 참고). Built-in Diffraction Game Parameter vs. Obstruction에 대한 논의 및 음영 영역에 대한 더 자세한 내용은 Room과 Portal의 회절 (Diffraction) 을 참고하세요.

Spatial Audio Room과 Portal에서의 Direct Path Diffraction 상호작용

Spatial Audio Room과 Portal (Room과 Portal 사용하기)에서, Portal은 인접한 공간 내 직접음의 회절을 모델링하기도 합니다. 리스너와 다른 공간에 있는 이미터에는 지오메트리에 따른 회절 경로가 없다는 점에서 두 시스템은 서로를 보완합니다. Room과 Portal이 지오메트리보다 훨씬 더 효율적으로 계산할 수 있기 때문에, 복잡한 계산을 줄이기 위해 이 두 시스템을 함께 사용하는 것이 좋습니다.

초기 반사의 지오메트리 회절

위에서 언급한 것과 같이, 초기 반사는 모서리에서 회절될 수 있으며, Spatial Audio는 이미터가 Wwise Reflect로 라우팅될 때 이 현상을 모델링할 수 있습니다.

자세한 방법을 설명하기에 앞서, 가시 영역 (view zone) 회절의 정의에 대해 살펴보겠습니다.

아래 그림을 보세요. 이미터는 리스너가 바로 보이는 곳에 있지만, 리스너가 정반사되지는 않습니다. 즉, 리스너는 가시 영역 (view zone) 안에 있습니다. Diffraction (회절) 에서 설명했듯, 회절은 가시 영역에서도 발생합니다. 그러나 Wwise Spatial Audio에서는, 직접 경로 모델의 Geometric Diffraction이나 Room과 Portal 둘 중 어느것도 가시 영역의 회절을 고려하지 않습니다. 실제 직접 경로에 비해 매우 미미하기 때문입니다. 그러나 반사의 경우 가시 영역 회절이 매우 큰 영향을 끼칩니다. 회절 없는 경우, 초기 반사는 순전히 정반사 영역에서만 들립니다. 리스너가 가시 영역으로 들어오는 순간 반사는 사라집니다. 회절이 있는 경우, 모서리가 관여해 반사된 곡선을 회절시킵니다. 이와 같이, 추가 필터링과 감쇠가 있더라도 반사 영역을 돌아 멀어져감에 따라 리스너가 반사를 인지합니다.

반사 영역 안에서, 회절된 경로가 없으면 대신 정반사가 있다고 가정하고 아무런 회절 값도 계산되지 않습니다. 반사 영역과 가시 영역 사이 경계의 모서리에 대해 계산된 가시 영역 회절은 0이며, 가시 영역과 음영 영역 사이 경계의 모서리에서는 회절이 100가 됩니다.

높은 차순의 초기 반사에서는 가시 영역 회절과 음영 영역 회절 모두 작용합니다.

적용되는 사운드에 대해 반사 활성화

Wwise Authorign Tool에서, 반사를 필요로 하는 모든 사운드에 대해 Wwise Reflect가 있는 보조 버스로 원하는 초기 반사를 전송합니다. 더 자세한 내용은 Wwise 프로젝트 설정 을 참고하세요. 반사의 회절에 대해서는, 해당 지오메트리에 회절을 활성화시키는 것 외에 특별히 설정할 것은 없습니다.

Wwise Reflect 설정

회절 효과에 의한 반사는 Wwise Reflect에서 허음원 (image source)으로 나타납니다. 반사에서의 회절 효과는, 회절의 Diffraction Attenuation (회절 감쇠), Diffraction LPF (회절 저역 통과 필터), Diffraction HPF (회절 고역 통과 필터)에 따른 세 곡선으로 디자인할 수 있습니다. 더 자세한 내용은 Wwise Reflect 문서를 참고하세요.

Rooms and Portals로 지오메트리 API 결합하기

Wwise Spatial Audio의 Rooms and Portals는 지오메트리 API와 함께 동작해 반사와 회절에 사용됩니다. Rooms and Portals 네트워크는 주변 지오메트리의 고위 개념(또는 자세한 버전의 하위 개념)이라고 보면 됩니다. 잘만 다루면 Rooms and Portals와 레벨 지오메트리의 조합은 매우 섬세하면서도 효율적인 음향 시뮬레이션을 이끌어낼 수 있습니다.

Portal을 통한 지오메트리 회절

이미터가 리스너와 같은 공간에 있지 않은 경우 (이 때 이미터는 지오메트리 회절이 올바르게 설정된 사운드를 재생한다고 가정. Setting up a Sound for Diffraction and Transmission 를 참고), 지오메트리 경로는 다음과 같이 계산됩니다.

  • 이미터로부터 리스너까지의 소리 전달 경로는 Rooms and Portals 네트워크를 이용해 계산됩니다.
  • 각 경로에 대해, 이미터와 그 이미터에서 가장 가까운 포털 간 경로의 구간은 포털이 리스너라고 간주하여 지오메트리 회절 알고리즘을 이용해 계산됩니다. 이미터가 리스너에서 봤을 때 한 포털 바로 뒤에 있지 않는 한, 지오메트리 경로는 단 하나만 계산됩니다 (가장 짧은 구간). 이미터와 포털 간 추가 경로를 계산해도 고유 가상 위치를 만들지는 않으므로 별도의 계산이 필요하지 않습니다.
  • 두 포털 사이에 서로 직접적으로 보이는 선이 없을 경우, 이 둘의 경로 구간 역시 지오메트리 회절을 이용해 계산됩니다. 이 계산은 지오메트리나 포털이 씬에 추가되거나 제거될 때마다 실행되며, 필요시 재사용됩니다. 대부분의 경우, 두 포털 간 경로 중 가장 짧은 경로만 사용됩니다. 포털 중 하나의 바로 뒤에 리스너가 있는 예외적인 경우, 복수의 경로를 사용해 포털을 통과하는 리스너 전환의 불연속성을 방지합니다.
  • 각 경로에 대해, 리스너와 그 리스너에서 가장 가까운 포털 간 경로의 구간은 포털이 이미터라고 간주하여 지오메트리 회절 알고리즘을 이용해 계산됩니다.
  • 이에 따른 경로는 그 위 경로의 조합으로 간주되어 필요한 곳에 갈라지거나 연장된 경로를 만들어냅니다.

포털을 통한 반사

포털의 열린 부분을 교차하는 면이 최대 두 개까지 있어도 반사가 포털을 통과할 수 있습니다. 포털 자체가 음향의 열린 부분을 뜻하기 때문에 사운드가 통과하도록 지오메트리에 굳이 '구멍을 뚫지' 않아도 됩니다. 만약 그래야한다면 삼각형의 개수가 너무 많아질 것입니다. 지오메트리가 상자 형태로 묘사되는 공간을 예로 생각해봅시다. 상자의 각 여섯 면에 두 개의 삼각형이 있다고 가정합시다. 상자 밖에서 소리를 전달하도록 만들려면, 간단히 포털 하나를 추가해 해당 포털의 z 축을 따라 있는 벽 하나를 교차시키면 됩니다. 항상 그렇듯, 게임은 AK::SpatialAudio::SetGameObjectInRoom 를 사용해 어느 게임 오브젝트가 공간 안에 있으며 어느 것은 밖에 있는지 구분하는 역할을 합니다 ( API 개요 참고). 이미터가 리스너와 같은 공간에 있지 않으며 사운드가 소리 전달 네트워크 상에서 닿을 수 있는 한, 반사 시뮬레이션이 실행됩니다 (이 때 이미터는 반사가 올바르게 설정된 사운드를 재생함. Wwise 프로젝트 설정 참고). 반사는 다음과 같이 계산됩니다.

  • 이미터와 그 이미터의 공간에 연결된 각 포털 사이에서 반사가 계산되며, 이 때 포털은 리스너로 간주됩니다.
  • 포털과 리스너 사이 회절 경로는 Portal을 통한 지오메트리 회절 에 나와있는 대로 계산되며 포털과 이미터 사이 반사 경로에 추가됩니다.
  • 회절 경로가 100% 회절을 초과하면 반사 계산이 처리되지 않으며 어느 지점에서건 발생하는 곳에서 해당 계산이 버려집니다.

특정 공간에 지오메트리 태그하기

레이와 삼각형 간 교차 검사와 반사를 생성할 수 있는 표면의 검색 공간을 제한하는 최적화를 위해 지오메트리를 특정 공간에 수동으로 할당할 수 있습니다. 그러려면 AkGeometryParams::RoomID 를 특정 공간의 ID에 설정하세요. 이는 Spatial Audio에게 해당 공간 안의 지오메트리가 다른 공간에서 포털을 통해서만 보이고 직접적으로는 보이지 않는다는 것을 알려줍니다. 단일 지오메트리 세트는 오직 하나의 공간 ID와 연관될 수 있으므로, AkGeometryParams::RoomID 를 유효하지 않게 두지 않는 한, 하나의 공간은 다수의 공간에서 보이는 지오메트리를 가질 수 없습니다. 또한 어떤 지오메트리 세트든 특정 공간 ID와 연관돼있다면 이 공간에서는 여기에 명시적으로 연관돼있지 않은 지오메트리를 더 이상 볼 수 없습니다. 한 지오메트리 세트를 공간에 할당한 이후에는 Spatial Audio가 이 공간 안에서 일어나는 반사와 회절을 시뮬레이션할 때 특별히 이 공간 ID와 연관돼있는 지오메트리만 사용합니다.

Stochastic 레이 캐스팅 지오메트리 안내

소개

확률적 Ray Casting은 반사와 회절이 몇차인지를 효율적으로 평가하는 기술입니다. 기본 개념은 리스너로부터 랜덤으로 레이를 캐스팅해 일련의 반사와 회절 경로를 따라가는 것입니다. 이 기술은 그래픽 렌더링 기술에서 영감을 받았습니다. 현재 구현 방식은 리스너와 이미터 측에서 4차 반사와 회절까지 지원합니다.

개념

  • 주요 레이 (primary ray): 리스너로부터 직접 캐스팅되는 레이
  • 반사 (reflection): 사운드가 표면에 부딪혀 나오는 것
  • 회절 (diffraction): 사운드가 물체를 돌아 굽어지는 것
  • 경로 (path): 리스너에서 이미터까지 이어지는 일련의 반사/회절
  • 이미터 수신기 (emitter receptor): 이미터를 중심에 둔 바운딩 상자나 바운딩 구체

설정

  • 주요 레이 (primary ray) 개수 (uNumberOfPrimaryRays): 리스너로부터 캐스팅되는 레이의 개수 주요 레이의 개수를 늘리면 결과물의 퀄리티는 좋아지지만 CPU 사용률이 높아집니다. 설정된 기본 값은 대부분의 애플리케이션에 적합합니다.
  • 최대 반사 차수 (maximum reflection order) (uMaxReflectionOrder): 표면에 성공적으로 부딪혀 나오는 레이의 최대 숫자 반사의 최대 차수를 높이면 더 섬세한 음향 시뮬레이션을 만들 수 있지만 CPU 성능에 큰 영향을 끼칩니다.
  • 직접 회절 경로 (direct diffraction path) (bEnableDirectPathDiffraction): 리스너와 이미터 간 직접 회절 경로는 회절 구간으로만 구성된 경로를 말합니다. 직접 회절 경로 계산을 활성화하면 CPU 사용을 급격하게 증가시킵니다.
  • 반사에 대한 회절 (bEnableDiffractionOnReflection): 반사 경로(반사 구간으로만 구성된 경로)의 시작과 끝에 회절을 활성화합니다. 반사에 대한 회절을 활성화하면 이미터나 리스너가 장애물 뒤로 이동했을 때 시뮬레이션 도중 예기치 않게 반사가 중단되는 현상을 방지합니다. 직접 회절 경로와 마찬가지로 이 도한 CPU 사용을 크게 증가시킵니다.
  • 최대 경로 길이 (fMaxPathLength): 경로 구간의 최대 길이 높은 값일수록 더 긴 경로를 계산하지만 CPU 사용을 증가시킵니다.

한계점

확률적 레이 캐스팅 엔진에 지오메트리를 정의할 때 몇 가지 한계점이 있습니다. 이 한계에는 결과물의 성능과 품질이 모두 고려되었습니다.

지오메트리 가시 각도

삼각형이 샘플 밀도보다 작은 경우, 레이캐스팅 엔진이 이를 찾아내기 더 어려워집니다.

지오메트리의 가시 각도(visible angle) 알파는 리스너의 관점에서 지오메트리가 보이는 각도입니다. 주요 레이의 개수에 따라 두 레이 간 평균 각도(감마)는 달라질 수 있습니다. 알파와 감마 간 관계는 오브젝트와의 교차점(반사나 회절)을 찾아낼 수 있는 확률에 영향을 끼칩니다. 만약 감마가 알파보다 작을 경우, 교차점을 찾을 수 있는 확률은 높아집니다. 만약 감마가 알파보다 클 경우, 교차점을 찾을 수 있는 확률은 낮아집니다.

이 예시에서는 감마가 알파보다 작습니다. 따라서 오브젝트와의 교차점을 찾을 확률은 높습니다.
이 예시에서는 알파가 감마보다 작습니다. 따라서 오브젝트와의 교차점을 찾을 확률은 낮습니다.

삼각형의 개수

지오메트리 안의 삼각형 개수는 엔진의 CPU 사용과 직접적으로 연관돼있습니다. 즉, 삼각형 개수가 많을수록 CPU 사용량이 높아집니다. 이는, 해당 오브젝트에 대해 더 많은 교차점 검사가 필요하기 때문입니다. 보통 소리 전달에는 그렇게 상세한 지오메트리가 필요하지 않습니다. 삼각형의 개수를 줄이면 품질을 희생시키지 않고 성능을 높일 수 있습니다.

이 비행기에는 삼각형이 4개 있습니다: 각 삼각형에 대해 레이를 검사해야 합니다.

지오메트리 형태

다른 것보다 처리하기가 좀 더 까다로운 지오메트리가 있습니다. 일반적으로, 비행기나 상자같은 지오메트리는 처리가 단순하고 소리 전달 측면에서 봤을 때 가장 좋은 결과물을 냅니다. 구체와 원기둥은 오류를 발생시킬 확률이 더 높습니다. 이는 구체나 원기둥의 곡률 때문입니다. 일부 회절 경계를 찾지 못하면 회절 경로를 누락할 수 있습니다. 이 알고리즘은 몇몇 휴리스틱을 시행해 대부분의 이 문제를 해결합니다. 주요 레이 개수를 늘리거나 지오메트리를 단순화하는 방식으로도 이 문제를 해결할 수 있습니다.

여기서는 L, E2, E3, E4, E를 통과하는 L에서 E까지의 회절 경로가 나오게 됩니다. 아쉽게도 E1과 E2 간 표면이 작아 회절 경계 E2를 제공할 교차점을 찾기가 매우 어렵습니다. 이 경우, 대부분 E1의 교차점이 됩니다. L은 E1의 음영 영역(shadow zone) 안에 있지 않아 알고리즘이 E2로부터의 회절 경로를 찾지 못합니다.

"Raw (원본)" 허음원

Wwise Reflect는 게임에서 직접 AK::SoundEngine::SendPluginCustomGameData를 이용해 사용하고 제어도 할 수 있지만, Spatial Audio는 편리한 방사체별 북키핑(bookkeeping)과 허음원 패키징을 통해 일찍부터 이를 활용해왔습니다. Wwise Reflect는 또한 "원본" 허음원을 표면 리플렉터와 조합할 때에도 사용됩니다 (동일한 버스/플러그인을 대상으로 할 경우).

게임 단에서 설정해야 할 내용

각 허음원(image source)에 대해 AK::SpatialAudio::SetImageSource 를 호출합니다. 버스 ID와 게임 오브젝트 ID(선택 사항)를 대상으로 지정합니다 (게임 오브젝트 ID는 일반 리스너이거나 주요 리스너가 될 수 있음). 허음원을 묘사하는 방법에 대한 더 자세한 정보는 AkReflectImageSource 를 참고하세요.

허음원은 이미 이런 기능이 있는 게임 엔진에 의해 Reflect로 전송될 수도 있습니다. 예를 들어 레이 캐스팅(ray-casting)이나 게임 엔진 자체의 허음원 알고리즘이 이러한 역할을 합니다.

Wwise 프로젝트 설정

동일한 프로젝트 설정을 사용하므로, 위에 나온 초기 반사 시뮬레이션에 Geometry API 사용하기 - which is the same 의 Wwise 프로젝트 설정 부분을 참고하세요. 또는 Wwise 도움말에서 Wwise Reflect 부분을 참고하면 FPS 사운드의 Reflect 예제 디자인을 확인할 수 있습니다.

참고: 저작 툴의 초기 반사 전송 레벨과 버스는 AK::SpatialAudio::SetImageSource() 를 사용하여 설정한 허음원에 적용되지 않습니다. 이 함수를 사용할 때는, Reflect 버스와 전송 레벨이 프로그래밍으로만 설정될 수 있습니다.
참고

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

지원이 필요하신가요?

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

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

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

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

Wwise를 시작해 보세요