버전
menu_open
Wwise SDK 2019.1.11
Spatial Audio (공간 음향)

The Spatial Audio module exposes a number of services related to spatial audio, to:

  • compute image sources for Reflect for geometries
  • model sound propagation from Rooms and Portals by controlling 3D busses
  • model diffraction of obstructed sound sources across geometric edges
  • 간편하게 Wwise Reflect의 원본 API를 사용합니다.

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

  • controls 3D busses by managing game objects and their properties (positions, auxiliary sends, obstruction, and occlusion)
  • controls (multi-) positions and aux sends of spatial audio game objects
  • runs geometric sound reflection and diffraction algorithms
  • Wwise Reflect의 데이터를 패키징합니다.

It is a game-side SDK component that wraps a part of the Wwise sound engine, as shown in this flowchart.

SpatialAudioFlow
AK::SpatialAudio namespace AK::SoundEngine namespace Wwise Reflect Plug-in SetPosition() SetPosition() SetEmitterAuxSendValues() SetGameObjectAuxSendValues() RegisterEmitter() RegisterGameObj()

Spatial Audio 개념

These paragraphs provide a quick overview of the fundamental acoustic concepts related to Spatial Audio:

Diffraction (회절)

Diffraction occurs when a sound wave strikes a small obstacle, or the edge of a large obstacle or opening, and bends around it. 열린 공간(포털)을 통해 그 공간의 측면으로 전달되는 소리를 나타냅니다. 즉, 리스너는 열린 공간의 바로 정면에 있지 않아도 소리를 들을 수 있습니다. Diffraction is usually very important in games because it gives a hint to players about paths between sound emitters and them. 다음 표는 오른쪽 상단에서부터 시작해, 한 가운데서부터 이어진 한정된 평면(검은 선)에 부딪히는 평면파의 음장(音場, sound field) 구성을 나타내고 있습니다. 이 모서리로 인해 발생하는 변화를 회절(diffraction)이라고 부릅니다. 왼쪽 영역이 View Region(시야 영역)으로서, 평면파가 변하지 않고 그대로 통과하는 영역입니다. 오른쪽 상단 영역은 Reflection Region(반향 영역)으로, 표면에서 발생한 반향이 입사파와 섞여 구불구불한 패턴을 만들어냅니다. 오른쪽 하단의 영역은 Shadow Region(그늘 영역)으로서, 회절이 가장 큰 역할을 하는 곳입니다. This figure is just an approximation. In real life the field is continuous at the region boundaries, and edge diffraction occurs in the View Region as well, although it is generally negligible compared to the incident wave itself.

여기서 모서리를 점음원으로 보고, 이로부터 거리가 멀어짐에 따라 진폭이 감소하게 됩니다. The amplitude of higher frequencies decreases faster than that of lower frequencies, which means that it can be adequately modeled with a low-pass filter. Wwise Spatial Audio models diffraction through two of its APIs. Refer to Rooms and Portals' 회절 (Diffraction) to understand how Rooms and Portals lets you model portal diffraction, and to Using the Geometry API for simulating diffraction for how geometry can be used to model diffraction of emitters and their early reflections.

Transmission (전달)

이와 연관된 또 다른 음향 현상 중 하나가 장애물로 인한 소리 흡수 및 그 상호 작용과 전달로서, 장애물을 통과하는 에너지 비율입니다. 일반적으로, 근처에 열린 공간이 있는 경우, 전달되는 에너지의 비율은 회절로부터 리스너에게 도달하는 에너지에 비해 미미합니다.

Room Coupling (공간 결합)

충분한 시간이 지난 후, 소리 방사체가 속해 있는 환경의 음향 속성에 따라 분산 영역을 생성합니다. 게임에서는 보통, 연관된 환경을 나타내기 위해 변경된 매개 변수로 리버브 효과를 이용해 구현됩니다. Diffuse fields also make their way across openings and through walls and reach the listener.

Obstruction(방해)과 Occlusion(차단)

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

API overview

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))

Beyond AK::SpatialAudio::Init(), Basic Functions are used to make Spatial Audio aware of game objects as emitters and/or listeners and their position, in order to use the other services of Spatial Audio. Rooms and Portals API는 간단하면서도 고급의 추상적 기하학 개념으로, 다른 공간에 있는 사운드 방사체의 전달을 표현합니다. Geometry API는 삼각형을 이용하여 Wwise Reflect로 다이내믹 초기 반사를 시뮬레이션할 때 허음원을 직접 계산하거나, 기하학 회절을 계산합니다. Spatial Audio는 또한 Wwise Reflect의 원본 API에 직접 접근하기 위한 헬퍼 함수를 가집니다.

Basic functions

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

All game objects need to be registered to the Wwise sound engine with AK::SoundEngine::RegisterGameObj, but in order to use them with Spatial Audio, you also need to register them to AK::SpatialAudio as emitters, using AK::SpatialAudio::RegisterEmitter.

You also need to register your one and only listener to AK::SpatialAudio with AK::SpatialAudio::RegisterListener.

주의: 현재 Spatial Audio는 하나의 상위 레벨 리스너만 지원합니다.

To let Spatial Audio know where emitters and the listener are, call AK::SpatialAudio::SetPosition instead of its AK::SoundEngine counterpart (AK::SoundEngine::SetPosition). Also, since it may set game-defined auxiliary sends transparently, you need to call AK::SpatialAudio::SetEmitterAuxSendValues instead of AK::SoundEngine::SetGameObjectAuxSendValues if you want to set your own custom game-defined auxiliary sends without interfering with what Spatial Audio does.

참고: You may replace all your calls to AK::SoundEngine::SetPosition and AK::SoundEngine::SetGameObjectAuxSendValues with those of AK::SpatialAudio. The calls for which the object has not been registered to Spatial Audio via AK::SpatialAudio::RegisterEmitter are forwarded directly to AK::SoundEngine.
주의: Spatial Audio handles multiple calculated positions of Rooms and Portals. However, multiple positions cannot be specified for Spatial Audio emitters or listeners. So, if you have set multiple positions for a game object, do not register it to Spatial Audio as either an emitter or a listener.

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

The Geometry API allows the game to send a triangle mesh to Wwise Spatial Audio, for two purposes:

  1. Simulating edge diffraction of sound propagating from emitters to listener (see Using the Geometry API for simulating diffraction).
  2. Simulating early reflections using Wwise Reflect (see Using the Geometry API for simulating early reflections).

Describing geometry

게임의 지오메트리는 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 를 참고하세요.

Using the Geometry API for simulating early reflections

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

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

Game side setup

For each emitter that should support dynamic ER, call AK::SpatialAudio::RegisterEmitter() after having registered the corresponding game object to the sound engine. Use the AkEmitterSettings for determining the parameters of the reflections calculation.

  • AkEmitterSettings::reflectAuxBusID: The ID of the Auxiliary Bus that hosts the desired Wwise Reflect plug-in. Spatial Audio가 이 버스와 보조 전송 연결을 구축하게 됩니다. It will, however, be to an instance of the bus that is associated with the same game object as the emitter. This means that different emitters will send to different instances of the Auxiliary Bus, and thus to different instances of the plug-in. This is crucial because sets of early reflections are unique to each emitter. 아래 'Wwise 프로젝트 설정'에 나온 Voices Graph의 스크린샷을 참고하세요.
  • AkEmitterSettings::reflectionsAuxBusGain: The send level directed towards the Auxiliary Bus.
  • AkEmitterSettings::reflectionsOrder: The order of reflections to be calculated. Reflections caused by hitting one surface are called first order reflections. Second order reflections are produced by sounds hitting two surfaces before reaching the listener, and so on. Beware! The number of generated reflections grows exponentially with each order.
  • AkEmitterSettings::reflectionMaxPathLength: A heuristic to stop the computation of reflections. It should be set to no more than the sounds' Max Distance played by this emitter. Use AK::SpatialAudio::SetPosition and AK::SpatialAudio::SetEmitterAuxSendValues for these emitters instead of the sound engine's functions. Push the relevant geometry to SpatialAudio using AK::SpatialAudio::SetGeometry and AK::SpatialAudio::RemoveGeometry. See Geometry API(지오메트리 API) 사용하기 for more details on the Geometry API. The geometry is assigned acoustic surfaces, which you may tie to an Acoustic Texture ShareSet, as defined in the Wwise Project. See AkAcousticSurface::textureID. These Acoustic Textures may be seen as the material's reflective properties, and will have an effect on the filtering applied to the calculated early reflections.

Wwise 프로젝트 설정

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

보조 버스(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를 사용한 이유는, 다른 오브젝트에서 방사되는 소리보다 플레이어(리스너)에 의해 방사되는 소리의 다양한 감쇠 곡선을 만들고자 하기 때문입니다.

버스 인스턴스

The ER bus (hosting Wwise Reflect) will exist in as many instances as there are emitters for which you want early reflections to be generated. This is done by registering these emitters with the Spatial Audio API and sending them to this bus, as was described in the previous section. In order for this to work properly, you need to enable the Positioning check box for this bus, as shown in the image below. By doing this, the signal generated by the various instances of the ER bus will be properly mixed into a single instance of the next mixing bus, downstream. 이 단일 인스턴스는 이 방사체( AK::SoundEngine::SetListeners 로 설정)를 듣게 되는 게임 오브젝트에 해당되며, 이 게임 오브젝트는 주로 최종 리스너인 플레이어(또는 카메라)가 됩니다.

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

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

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

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

Acoustic Texture 사용하기

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

Using "raw" image sources

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

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

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

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

Wwise 프로젝트 설정

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

Room과 Portal 사용하기

Spatial Audio 모듈은 Room과 Portal이라는 간단하면서도 고급의 지오메트리 추상화를 제공합니다. 이는, 다른 공간에 있는 방사체의 모델 사운드를 효율적으로 전달하는 역할을 합니다. 공간에 의한 소리 전달의 주요 특징에는 회절, 그리고 리버브의 결합(coupling) 및 공간화가 있습니다. Wwise 내에서 사운드 디자이너가 자유롭게 쓸 수 있는 툴을 활용해 원하는 오디오 변환을 완벽하게 제어할 수 있도록 합니다. 나아가, 게임 엔진에 의한 레이캐스트 기반 방해(obstruction)를 통제할 수 있도록 합니다. 이는 리스너와 동일한 공간에 있는 방사체에겐 다소 게임 엔진에 한정돼있기 때문에 성능 비용이 많이 들기 때문입니다.

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

API overview

As with all Spatial Audio services, you need to register emitters and the listener with AK::SpatialAudio::RegisterEmitter and AK::SpatialAudio::RegisterListener after having registered the corresponding game objects to the sound engine (see AK::SoundEngine::RegisterGameObj). The only emitter setting that pertains to Rooms and Portals is AkEmitterSettings::roomReverbAuxBusGain, which gives you per-emitter control of the send level to aux busses.

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에 등록합니다. This game object should not be used explicitly in calls to AK::SoundEngine.

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

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

When using any Spatial Audio services for a given emitter, you should use AK::SpatialAudio::SetPosition instead of AK::SoundEngine::SetPosition. Incidentally, you cannot use AK::SoundEngine::SetMultiplePositions with a Spatial Audio emitter because Spatial Audio relies on raw multi-positioning internally. However there is no problem with using AK::SoundEngine::SetMultiplePositions on game objects that are not used with Spatial Audio. AK::SoundEngine::SetMultiplePositions should be considered like a low-level positioning feature: if you use it then you are on your own for managing its environments. Likewise, you should never use AK::SoundEngine::SetGameObjectAuxSendValues with Spatial Audio emitters. However, you may use AK::SpatialAudio::SetEmitterAuxSendValues with Spatial Audio emitters that are in Rooms. 더 자세한 내용은 Implementing complex room reverberation 를 참고하세요.

Additionally, you should not use AK::SoundEngine::SetObjectObstructionAndOcclusion or AK::SoundEngine::SetMultipleObstructionAndOcclusion with Spatial Audio emitters. Spatial Audio manages obstruction/occlusion for you when emitters are in other Rooms, via the more accurate concepts of diffraction and transmission. In-room obstruction needs to be set via AK::SpatialAudio::SetEmitterObstructionAndOcclusion and AK::SpatialAudio::SetPortalObstructionAndOcclusion. 방해와 차단 및 이들을 Spatial Audio Room과 Portal에서 사용하는 방법에 대한 더 자세한 정보는 Modeling Sound propagation from other roomsModeling sound propagation from the same room on the game side 를 참고하세요.

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

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

Wwise Spatial Audio에서, 다른 공간으로부터 오는 소리 전달은 Room과 Portal 추상화에 의해 관리됩니다. Rooms with no open Portals will utilize Wwise Occlusion to model transmission, while Rooms with at least one propagation path to the listener via open Portals will use either Obstruction or the Diffraction built-in game parameter. For same-room obstruction, games are invited to implement their own algorithm based on the geometry or raycasting services they have at their disposal and the desired level of detail. But, they need to use AK::SpatialAudio::SetEmitterObstructionAndOcclusion and AK::SpatialAudio::SetPortalObstructionAndOcclusion so that it does not compete with diffraction from Spatial Audio. Spatial Audio와 동일 공간 내 방해를 사용하는 방법에 대한 더 자세한 내용은 Modeling sound propagation from the same room on the game side 를 참고하세요.

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

Summary of sound propagation features

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

음향 현상 Spatial Audio Wwise 내에서의 사운드 디자인
직접 경로의 회절
  • 방해 또는 회절 내장 매개 변수
  • 수정된 게임 오브젝트 (가상) 위치 지정
  • 볼륨, 필터링, 또는 Actor-Mixer의 모든 속성
  • 3D 패닝, Distance 감쇠
분산 영역 (리버브)
  • 공간의 보조 버스로 전송
  • 지속적인 강도 전환
Actor-Mixer에 대해 게임에서 정의한 센드 오프셋, 리버브 및 버스 볼륨
Room coupling (공간 결합): 인접한 공간의 분산 영역의 회절과 리버브 공간화
  • 방해 또는 회절 내장 매개 변수
  • 공간 오브젝트 위치 지정 및 확산
  • 리스너 공간의 보조 버스로 전송
  • 볼륨, 필터링, 또는 Bus의 모든 속성
  • 버스의 3D 패닝, 리버브, 버스 볼륨 및 다른 버스들에 대해 게임에서 정의한 Auxiliary Bus의 센드 오프셋
Transmission (전달) (활성화된 포털이 없는 경우에 한함) 차단 Actor-Mixer에 대한 볼륨 또는 필터링

Using 3D reverbs

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가 더 증가합니다.

The adjacent Room's reverberation should be regarded as a source located at the Portal, and you may use an Attenuation ShareSet in the Auxiliary Bus's Positioning tab to determine the behavior with respect to distance from the listener. If you select the Enable Game-Defined Sends check box on this bus, you allow it to be further sent to the reverb of the listener's Room (see figure below). You may tweak the amount that is sent to the listener's reverb with the Game-Defined Send Offset, and with distance using the Game-Defined Attenuation. The ShareSet used in the example below is called "Portal" because it is designed according to the behavior of the Rooms' Portals: as the listener moves away from a Portal, it becomes a point source. At distance zero, the listener has completely crossed the Portal and is inside the Room.

주의: Note that in order to let Spatial Audio modify the Spread according to the Portal's geometry, you must not have a Spread curve in your Auxiliary Busses' attenuation settings. Auxiliary Bus의 감쇠 설정에서 Spread 곡선을 사용하면 Spatial Audio가 계산한 값을 오버라이드하게 됩니다.

Inside Rooms, the Room game object position is maintained by Spatial Audio at the same location as the listener, so the attenuation curves are all evaluated at distance 0.

About game objects

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

이미터

When the Spatial Audio's initialization setting DiffractionFlags_CalcEmitterVirtualPosition is set, the position of the emitters located in Rooms that are adjacent to the listener is modified such that they seem to appear from the diffracted angle, if applicable. 아래 3D Game Object Profiler의 스크린샷을 보면, 리스너 (Listener L)는 Portal의 오른쪽에 있고 '진짜' 이미터는 왼쪽 아래에 있습니다 (Emitter E, 방향 벡터 없음). Spatial Audio는 이동 거리를 유지하며 이미터의 위치를 왼쪽 위로 옮겨, 변경된 위치가 마치 그 구석에서 오는 것처럼 만듭니다. 리스너는 Portal 가장자리의 음영 영역에 대해 약 45도 각도에 위치하고 있어, 두 교차점에 작성되어 있듯이 27의 회절을 만들어냅니다.

Room에 여러 개의 Portal이 연결돼있을 경우, Spatial Audio는 이미터에 복수의 위치를 할당할 수 있습니다 (Portal 당 하나씩). The MultiPositionType_MultiDirections mode is used, so that enabling or disabling a Portal does not affect the perceived volume of other Portals.

주의: Note that you cannot use multipositions with Spatial Audio emitters. Only Spatial Audio can, under the hood.

Room과 Portal

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

주의: This game object should not be used directly.

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

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

For multiple Portals, a Room's game object is assigned multiple positions, in MultiPositionType_MultiDirections mode, for the same reason as with emitters.

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

Modeling Sound propagation from other rooms

Spatial Audio Room과 Portal과 함께, 리스너 소리를 제외한 Room 안의 소리 전달은 Room과 Portal 추상화에 의해 관리됩니다. 다른 Room 내부의 이미터가 Portal 및 연결된 회절(diffraction)을 통해 리스너에 도달하고, 이런 경로가 없을 경우에는 공간들의 '벽'을 통한 전달(transmission)을 통해 도달합니다.

회절 (Diffraction)

인접한 Room의 각 이미터에 대해 Spatial Audio는 Shadow Boundary, 즉 연결된 Portal의 가장 가까운 모서리로부터의 회절 각도를 계산합니다. 위의 Diffraction (회절) 을 참고하세요. 180도까지 가능한 이 회절 각도는 0에서 100% 사이 계수에 매핑되어 오디오 변환을 만들어낼 수 있습니다. 여기에는 두 가지 방법이 있습니다. 하나는 이미터 게임 오브젝트에 Obstruction (방해) 값을 설정하는 방법이고, 다른 하나는 내장 게임 매개 변수인 Diffraction (회절) 값을 설정하는 것입니다. Whether Spatial Audio does one or the other, or both, depends on the choice of AkDiffractionFlags with which you initialize it.

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)

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

참고: Wwise의 한계로 인해 Spatial Audio는 회절과 전달을 동시에 모델링할 수 없습니다. 그러나 열린 문을 통해 회절돼 나가는 에너지에 비하면 벽을 통과해 전달되는 에너지는 무시해도 무방할 정도로 미미합니다.

결합 (Coupling)

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

Modeling sound propagation from the same room on the game side

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

반면 Spatial Audio Room과 Portal에서는 이 작업을 모든 이미터에 대해 실행할 필요는 없지만, 리스너와 동일한 Room에 있는 이미터에 대해서는 이 작업을 실행합니다. 이 방법이 유용한 이유는, 대부분의 경우 Spatial Audio가 전달 경로를 계산하는 데 사용하는 알고리즘보다 레이 캐스팅의 비용이 훨씬 더 비싸기 때문입니다. 이미터와 리스너 사이 공간 내 방해는 기본적으로 동일한 공간에서 발생하기 때문에, 장애물이 리스너나 이미터를 완전히 가리지 않으며 해당 사운드는 공간 내 반사를 통해 리스너에 도달한다고 추정합니다. 이는 보조 전송이 아니라 원본/변조 신호 경로를 통해서만 올바르게 모델링됩니다. 즉, Obstruction이 올바른 매커니즘이라는 뜻입니다. For this purpose, the game should call AK::SpatialAudio::SetEmitterObstructionAndOcclusion instead of AK::SoundEngine::SetObjectObstructionAndOcclusion. This is the only way to let Spatial Audio know that there is in-room obstruction between the emitter and listener, so that it can incorporate it in its calculations without interfering with its own use of Obstruction and Occlusion for other purposes (diffraction and transmission).

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

주의: You should never call AK::SoundEngine::SetObjectObstructionAndOcclusion or AK::SoundEngine::SetMultipleObstructionAndOcclusion for game objects that are registered as Spatial Audio emitters.

Multiple room traversal

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

Implementing complex room reverberation

As opposed to AK::SoundEngine::SetGameObjectAuxSendValues which overrides the game object send values and should never be used with Spatial Audio emitters, AK::SpatialAudio::SetEmitterAuxSendValues adds up to the auxiliary sends already set by Spatial Audio. 이는, 서로 다른 환경 효과를 필요로 하는 오브젝트나 지형이 있는 경우와 같이 동일한 공간 안에서 복잡한 잔향을 디자인할 때 매우 유용합니다. A Room's AkRoomParams::ReverbAuxBus can also be left to "none" (AK_INVALID_AUX_ID), so that its send busses are only managed by the game via AK::SpatialAudio::SetEmitterAuxSendValues.

Using the Geometry API for simulating diffraction

Wwise Spatial Audio로 보낸 지오메트리는 소리의 회절(diffraction)을 모방하는 데 사용할 수 있습니다. 즉, 방해(obstruction)를 계산하는 데 있어 게임 엔진의 레이캐스팅 메소드를 완전히 대체할 수 있습니다. 이미터가 오브젝트에 의해 리스너로부터 가려진 경우, Spatial Audio는 오브젝트의 모서리를 감싸 돌아오는 경로들을 계산하고, 이 경로가 존재할 경우, 모서리를 돌아 굽어지는 소리의 회절 계수를 계산합니다. 이에 따라 이미터의 명확한 입사각이 조정되고, 회절 값을 Wwise로 전송해 궁극적으로 소리에 어떤 영향을 끼칠 지 통제할 수 있게 됩니다. 회절은 주로 로우패스 필터가 됩니다.

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

주의:
지오메트리 회절이 게임 엔진의 레이캐스팅 메소드를 완전히 대신해 방해(obstruction)를 계산할 수는 있지만, 지오메트리가 얼마나 복잡한 지에 따라 성능 비용이 증가하게 됩니다. Spatial Audio로 전송된 지오메트리는 최대한 단순해야 합니다. 또한, Geometric Diffraction의 복잡한 계산을 줄이기 위해 이와 함께 효율적인 Room과 Portal 추상화 ( Room과 Portal 사용하기 참고)를 사용하는 게 좋습니다.

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

Setting up geometry for diffraction

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

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

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

Geometric diffraction of the direct path

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

Code-Side Emitter settings

Each sound emitter that requires geometric diffraction of the direct path must have appropriate AkEmitterSettings. In particular, AkEmitterSettings::diffractionMaxEdges, AkEmitterSettings::diffractionMaxPaths, and AkEmitterSettings::diffractionMaxPathLength should be greater than 0. Refer to their respective documentation for more details.

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) 을 참고하세요.

Direct Path Diffraction interaction with Spatial Audio Rooms and Portals

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

Geometric Diffraction of early reflections

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

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

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

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

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

Code-Side Emitter settings

In code, just set the desired emitter to send to Wwise Reflect, with desired reflection order, as you would normally do. Refer to Game side setup for more details. 반사의 회절에 대해서는, 해당 지오메트리에 회절을 활성화시키는 것 외에 특별히 설정할 것은 없습니다.

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와 레벨 지오메트리의 조합은 매우 섬세하면서도 효율적인 음향 시뮬레이션을 이끌어낼 수 있습니다.

Geometric Diffraction through Portals

In the case where an emitter (assuming it has been set up correctly for geometric diffraction, see Code-Side Emitter settings), is not in the same room as the listener, the geometric path is calculated as follows:

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

Reflections through Portals

포털의 열린 부분을 교차하는 면이 최대 두 개까지 있어도 반사가 포털을 통과할 수 있습니다. 포털 자체가 음향의 열린 부분을 뜻하기 때문에 사운드가 통과하도록 지오메트리에 굳이 '구멍을 뚫지' 않아도 됩니다. 만약 그래야한다면 삼각형의 개수가 너무 많아질 것입니다. 지오메트리가 상자 형태로 묘사되는 공간을 예로 생각해봅시다. 상자의 각 여섯 면에 두 개의 삼각형이 있다고 가정합시다. 상자 밖에서 소리를 전달하도록 만들려면, 간단히 포털 하나를 추가해 해당 포털의 z 축을 따라 있는 벽 하나를 교차시키면 됩니다. 항상 그렇듯, 게임은 AK::SpatialAudio::SetGameObjectInRoom 를 사용해 어느 게임 오브젝트가 공간 안에 있으며 어느 것은 밖에 있는지 구분하는 역할을 합니다 ( API overview 참고). In the case where an emitter (which has been set up correctly for reflections, see Game side setup) is not in the same room as the listener, and as long as the sound is reachable on the sound propagation network, then reflection simulation is performed. 반사는 다음과 같이 계산됩니다.

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

Tagging geometry for specific rooms

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

참고

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

지원이 필요하신가요?

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

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

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

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

Wwise를 시작해 보세요