menu
 
버전
2024.1.3.8749

2024.1.3.8749

2023.1.11.8682

2022.1.18.8567

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624


menu_open
Wwise SDK 2024.1.3
Room과 Portal API 구성

Room과 Portal 생성하기

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

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

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

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

Room Game Object Event 전달

Room Game 오브젝트에 이벤트를 전달하여 공간화 동작을 활용할 수 있습니다. AK::SoundEngine::PostEvent 를 호출하고 Room ID를 AkGameObjectID 로 전달하기만 하면 됩니다. AkRoomID::AsGameObjectID 를 호출하여 Room ID를 AkGameObjectID 로 안전하게 캐스팅할 수 있습니다. 이벤트를 전달할 때 Room을 사용할 경우, Spatial Audio에서 Room Game Object가 사용되지 않을 때 이를 등록 취소하지 않도록 설정해야 합니다. 그렇게 하려면 AkRoomParams::RoomGameObj_KeepRegistered 를 true로 설정해야 합니다.

또한, 룸 톤을 사용할 때 Game Object를 자체 Room Auxiliary Bus로 보내는 것이 유용할 수 있습니다. 그렇게 하려면 AkRoomParams::RoomGameObj_AuxSendLevelToSelf 에 0보다 큰 값을 전달합니다.

Room 지오메트리 설정하기

Geometry Instance를 Room에 연결하면 다음과 같은 역할을 합니다.

  • Room의 경계 상자를 계산할 수 있으며, 이를 통해 Room의 전송 경로의 위치와 전달(transmission)을 계산합니다.
  • 어떤 Game Object가 어떤 Room에 있는지 Spatial Audio가 판별할 수 있게 해줍니다. 또는, 필요시 클라이언트가 같은 목적으로 AK::SpatialAudio::SetGameObjectInRoom 을 사용할 수 있습니다.
  • 각 표면의 전달 손실(transmission loss) 계수에 따라 전달 손실 값을 정확하게 지정할 수 있습니다.
  • Game Object 3D Viewer 내부의 Room을 표시할 수 있습니다.
  • 선택적으로 AkGeometryInstanceParams::UseForReflectionAndDiffraction 이 true로 설정된 경우 Room의 벽을 이용해 반사 및 회절 시뮬레이션을 활성화합니다.

Room의 지오메트리를 설정하는 것은 선택 사항이지만 권장됩니다. Room 지오메트리가 없으면 Game Object 3D Viewer에서 해당 Room이 보이지 않으며, Spatial Audio는 모든 연결된 포털을 포함하는 경계 상자를 계산하여 Room의 범위(Room 전송용)를 추정합니다. Room 전달에 대한 자세한 내용은 Transmission of Room Tones and a Room's Diffuse Field 을 참조하세요.

Spatial Audio는 Room의 지오메트리를 사용하여 교차 검사(containment test)를 수행하여 각 Game Object가 어느 Room에 있는지 확인합니다. 특정 유형의 교차 검사가 필요한 경우 클라이언트가 AK::SpatialAudio::SetGameObjectInRoom 을 사용하여 이 작업을 수행할 수 있습니다. 그러나 Reverb Zone으로 지정된 Room의 경우 지오메트리가 필수이므로 Spatial Audio에서 Game Object가 Reverb Zone의 전환 구역 내부에 있는지를 확인할 수 있습니다. spatial_audio_roomsportals_reverbzones_transition_regions 을 참조하세요.

지오메트리를 Room과 연결하려면 먼저 AK::SpatialAudio::SetGeometry 를 사용하여 Wwise에 지오메트리를 전달합니다. 그런 다음 위치, 크기 및 회전을 지오메트리에 할당하기 위해 Geometry Instance를 만들어야 합니다. AK::SpatialAudio::SetGeometryInstance 를 참조하세요. 마지막으로 AK::SpatialAudio::SetRoom 을 호출할 때 AkRoomParams::GeometryInstanceID 영역에 Room을 나타내는 Geometry Instance의 ID를 입력합니다. Spatial Audio는 AK::SpatialAudio::SetGeometryInstance 에 대한 해당 호출이 있었거나 있을 것이라고 가정하지만 AK::SpatialAudio::SetRoomAK::SpatialAudio::SetGeometryInstance 가 호출되는 순서는 중요하지 않습니다.

info참고:
Room에서 Geometry Instance를 위에 나열된 목적을 위해서만 사용하고, 반사 및 회절 계산에는 사용하지 않으려면 AkGeometryInstanceParams::UseForReflectionAndDiffraction 을 false로 설정합니다.

Spatial Audio에서 지오메트리를 정의하는 자세한 방법은 지오메트리 를 참조하세요.

info참고:
지오메트리를 반사 및 회절 계산이 아닌 Room을 설명하는 데만 사용하려는 경우 AkGeometryParams::EnableTriangles 를 false로 설정해야 합니다.

여러 위치가 지정된 사운드 이미터

AK::SoundEngine::SetMultiplePositions 를 사용할 때, Spatial Audio는 API에 전달된 각 사운드 위치에 대한 반사, 회절, 전달을 포함한 다양한 계산을 수행합니다.

게임 오브젝트에 room 센드를 사용하는 AK::SoundEngine::SetMultiplePositions 를 사용할 때 주의해야 할 몇 가지 중요한 점이 있습니다. 게임 오브젝트는 주어진 시간에 단 하나의 room에만 할당될 수 있기 때문입니다( AK::SpatialAudio::SetGameObjectInRoom 사용). 이러한 제한은 사운드 엔진 내에서 모든 사운드 위치가 동일한 Auxiliary 센드 구성을 가져야 한다는 제약에서 발생합니다.

모든 사운드 경로는 이미터 위치를 기준으로 계산되며 요청된 (단일) room을 기준으로 수행됩니다. 이러한 이유로, AK::SpatialAudio::SetGameObjectInRoom 을 통해 설정된 (게임에서 정의된) room 경계의 밖에 사운드 위치가 있는 경우, 결과로 나타나는 사운드 경로에 오류가 발생할 가능성이 높습니다.

또한, 게임 오브젝트가 포털을 통해 전환되는 경우 Spatial Audio는 AK::SoundEngine::SetMultiplePositions 에 전달된 모든 사운드 위치의 평균을 구하고 이를 사용하여 두 room 사이의 크로스 페이드를 계산합니다.

이러한 이유로 게임에서도 평균 사운드 위치를 사용하여 Room 봉쇄(containment)를 도출하고 결과로 나온 Room ID를 AK::SpatialAudio::SetGameObjectInRoom 에 전달하는 것이 좋습니다.

Room과 Portal 통합 예시

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


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

지원이 필요하신가요?

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

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

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

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

Wwise를 시작해 보세요