Wwise SDK 2023.1.8
|
사운드는 선택적으로 위치를 할당하고 게임에서 등록한 오브젝트에 Event를 전달해서 Wwise 내에 재생됩니다. 따라서 이러한 게임 오브젝트는 이미터 가 됩니다. 시뮬레이션 된 3D 환경의 이미터와 리스너 의 상대 좌표는 사운드 패닝과 다른 속성들을 나르는데 사용할 수 있습니다. 이는 청각과 시각적 경험이 신뢰할만한 3D 환경에서 플레이어를 몰입하도록 도와줍니다.
Wwise에서 디자이너는 사운드를 수동으로 플레이어가 구축한 스피커를 따라다닐지(Speaker Panning), 게임 오브젝트 위치 기반으로 따라다닐지(3D Spatialization) 선택할 수 있습니다. 추가적으로 감쇠 곡선과 거리 또는 각도 기반의 사운드 속성(볼륨, 필터링 등)을 수정할 수 있는 설정을 할당할 수도 있습니다.
위치 정보를 요구하는 사운드의 모든 게임 오브젝트에 대해서 AK::SoundEngine::SetPosition()
함수를 호출합니다. 또한, 리스너 게임 오브젝트에 대해서도 이 함수를 호출해줘야 합니다. 게임 오브젝트의 위치가 변경될 때마다 매번 위치를 설정해줘야 합니다.
첫 번째 매개 변수는 게임 오브젝트의 ID입니다. 더 많은 정보는 통합 세부사항 - 게임 오브젝트 를 참고하세요.
두 번째 매개 변수는 게임 오브젝트의 위치와 방향을 나타내는 벡터가 포함된 AkTransform
구조체입니다. Wwise 사운드 엔진에서 X, Y, Z를 정의하는 방법에 관한 정보는 X-Y-Z 좌표 시스템 을(를) 참고하세요.
참고: AK::SoundEngine::SetPosition() 함수를 여러 번 호출한 다음 AK::SoundEngine::RenderAudio() 함수를 호출하면, 마지막으로 설정한 값을 사용하게 됩니다. |
이미터의 위치를 자동으로 리스너의 위치로 유지하도록 하려면, 매 프레임마다 명시적으로 리스너의 위치와 같은 값으로 게임 오브젝트의 위치를 설정해줘야 합니다. 리스너 게임 오브젝트에 Event도 전달할 수 있습니다.
각 게임 오브젝트에 대해 단일 3D 위치만을 허용하는 AK::SoundEngine::SetPosition()
함수를 사용하는 대신, AK::SoundEngine::SetMultiplePositions()
함수를 사용할 수 있습니다. 이 메소드는 단일 게임 오브젝트에 대해서 복수의 3D 좌표 설정을 허용합니다.
MultiPositionType
을 신중하게 선택하세요. 선택하는 옵션은 주어진 상황과 만들려는 효과의 유형에 따라 달라집니다.
MultiPositionType_MultiSources
를 전달하면 다양한 사운드 볼륨이 추가되어 여러 오브젝트가 동시에 같은 사운드를 내는 것처럼 시뮬레이션됩니다. 이 함수는 다양한 상황에서 유용할뿐만 아니라, 완전히 같은 사운드를 방출하는 수많은 오브젝트와도 잘 작동합니다. 그러나 이 함수는 사운드가 서로 너무 가까울 경우 특정 문제를 일으킬 수 있습니다. 문제는 볼륨을 추가했을 때, 복수의 사운드가 정확히 같은 단계에서 재생되어 클리핑 될 가능성이 높아지는 점입니다.MultiPositionType_MultiDirections
를 전달하면, 각 스피커에서 재생되는 볼륨이 각 방향에서 최대가 됩니다. 이 함수는 게임의 다양한 상황을 시뮬레이션하는데 사용할 수 있습니다. 예를 들어, 동시에 같은 사운드를 방출하는 복수의 오브젝트뿐만 아니라 뚫린 벽이나 구역 사운드를 포함합니다. 그러나 소리를 방출하는 두 개 이상의 물체가 가까이 있을 때 게임 플레이어가 소리가 더 커질 것을 예상하는 경우, MultiPositionType_MultiSources
를 사용하여 소리를 추가합니다.MultiPositionType_SingleSource
를 SetMultiplePositions()
와 함께 사용하지 마세요. 이렇게 하면 첫 번째로 나열된 위치만 사용되기 때문입니다.MultiPositionType_MultiDirections
로 처리됩니다.AK::SoundEngine::SetObjectObstructionAndOcclusion
API는 모든 사운드 위치에 하나의 방해(obstruction) 및 차단(occlusion) 값을 적용합니다. 그러나 AK::SoundEngine::SetMultipleObstructionAndOcclusion
을 사용하면 각 사운드 위치에 고유한 방해와 차단 값이 할당됩니다. 자세한 내용은 게임에서 정의한 보조 센드의 방해(Obstruction)와 차단(Occlusion) 을 참조하세요.
단일 게임 오브젝트에 대해 복수의 위치를 생성하여 다음과 같이 다양하고 많은 사운드 효과를 시뮬레이션할 수 있습니다.
Spread 및 거리 기반의 Volume Attenuation의 적절한 값과 결합된 MultiPositionType_MultiDirections
옵션을 사용하면 구역 사운드를 시뮬레이션할 수 있습니다. 해당 메소드를 사용할 때, 위치의 개수가 추가로 볼륨을 증가시키지 않도록 해줘야 합니다. 이 메소드를 사용해 구역 사운드를 재생성하여 현실감 있는 감쇠로 여러 방향에서 오는 단일 사운드를 가질 수 있습니다.
다음 예제에서 검은색 점은 사운드의 초기 위치를, 검은색 원은 감쇠와 확산에 대한 최소 거리, 핑크색 원은 최대 반경을 나타냅니다.
파란색 부분은 게임에서 호수를 나타냅니다. 호수에서 내뿜는 환경 사운드는 4개의 위치로 사운드를 사용해 시뮬레이션 됩니다.
리스너가 A 위치에 있을 때 호수의 사운드가 모든 방향에서 출력되어야 합니다. 이는 모든 스피커로 출력되도록 사운드를 분산시키는 적절히 높은 확산 값을 설정해서 달성할 수 있습니다.
리스너가 B 위치에 있을 때 최대 감쇠 거리에 놓이게 됩니다. 이는 아무런 호수 사운드를 듣지 못하거나 최대 감쇠로 희미한 사운드만 듣게 되는 걸 의미합니다. 거대한 호수를 시뮬레이션 하는 데 있어서 복수의 위치를 사용하기 때문에, 사운드는 항상 올바른 방향에서 들리게 됩니다.
리스너가 C 위치에 있을 때 스피커의 넓은 각도(~180도)로 호수 사운드를 듣게 되나, 리스너가 호수로부터 특정 거리만큼 떨어져 있어서 해당 사운드는 약해지게 됩니다. 이러한 상황에서 리스너는 여전히 감쇠 반경 내에 있어서 호수 사운드는 최대 레벨로 줄지 않게 됩니다.
이러한 기술을 사용하여 여러 개의 사운드 위치를 겹치게 해서 어떠한 종류의 오브젝트 모양이든 재생성할 수 있습니다. 그러나 각각의 새로운 위치의 추가로 볼륨을 계산하는 데 있어서 더 많은 CPU의 사용이 요구된다는 점에 유의하세요.
예를 들어 복도가 있는 하나의 레벨에서 벽에 연달아 있는 횃불들에 의해 빛을 비춘다고 가정해봅니다. 해당 횃불들은 전부 다 같은 모양에 완전히 똑같은 사운드를 재생하게 됩니다. 만약 횃불 각각에 대해 따로따로 Play Event를 발송하면(20개라고 가정하고) 눈에 띄게 많은 CPU와 메모리를 소비하게 됩니다. 또한, 사운드가 스트리밍될 경우, 잠재적으로 여러 개의 복사된 스트림을 가질 수 있습니다. 이는 I/O 접근을 증가시킬 수 있습니다.
이러한 상황에서 SetMultiplePositions()를
사용하는 것은 훌륭한 성능향상을 하게 됩니다. 또한, 동시에 모든 사운드를 손쉽게 제어하도록 해주며 등록이 필요한 게임 오브젝트의 개수를 줄여줍니다.
게임에서 이와 같은 시나리오를 생성하려면 MultiPositionType_MultiSources
나 MultiPositionType_MultiDirections
중 하나를 사용하면 됩니다.
일반적으로 MultiPositionType_MultiSources
가 좀 더 정확하지만, 위치들이 서로 너무 가까우면 문제가 될 수도 있습니다. 복수의 사운드를 시뮬레이션하도록 하나의 음성만 재생될 때 Wwise는 서로 다른 위치의 볼륨을 추가한다는 점을 명심하세요. 이는 볼륨이 0dB로 되는 결과를 가져올 수 있습니다. MultiPositionType_MultiDirections
는 CPU를 조금 덜 사용하며, 단순히 최대 볼륨을 가져와 각각의 스피커를 통해 재생합니다. MultiPositionType_MultiDirections
는 볼륨을 추가하지 않아 클리핑이 없도록 보장하므로, 더욱 적절할 수 있습니다.
사운드에 대해서 복수의 위치를 가짐에도 불구하고 사운드 엔진에 의해 재생되는 음성은 여전히 하나만 있습니다. 이는 모든 사운드가 범위를 벗어나서 하나의 가상 음성만 처리됨을 의미합니다.
자동차 한 대의 스피커에서 스테레오로 녹음된 음악이 흘러나오는 경우를 가정해봅시다. 즉, 이는 곧 이미터(emitter)가 됩니다. 아래 보이는 그림에서처럼, 왼쪽과 오른쪽 이미터에서 각각 이 음악의 스테레오 음원 파일의 왼쪽 입력 채널과 오른쪽 입력 채널이 출력될 수 있습니다.
이 경우, SetMultiplePositions()
오버로드를 AkChannelEmitter
와 함께 사용하면 입력 채널을 유연하게 할당할 수 있습니다. AkChannelMask
는 이미터 위치가 왼쪽과 오른쪽 중 어느 입력 채널을 사용할 지를 지정합니다. 따라서 만약 음원의 왼쪽 채널과 오른쪽 채널의 오디오 콘텐츠가 다를 경우, 리스너는 현재 위치에 따라 이들의 차이를 들을 수 있습니다.
참고: 위 그림에서 자동차의 왼쪽과 오른쪽 리스너는 왼쪽 이미터(빨간색)와 오른쪽 이미터(파란색)가 단일 출력 채널로 조합된 소리를 듣게 되며, 이는 보라색 영역으로 표시됩니다. 이미터들의 실제 조합은 감쇠 거리와 감쇠 곡선의 설정 내용에 따라 달라집니다. 예를 들어, 자동차의 오른쪽에서 일정 거리에 있는 리스너에게는 왼쪽 스피커보다 오른쪽 스피커 소리가 더 크게 들리며, 감쇠가 더 크게 됩니다. 오른쪽 리스너의 거리가 어느 정도 멀어지면 왼쪽 스피커의 소리가 아예 들리지 않을 수도 있습니다. |
사운드가 부분적으로 방해 또는 차단되면, 실제로 위치한 곳보다는 서로 다른 방향으로부터 들리게 나타날 것입니다. 이러면 원하는 효과를 생성하도록 여러 위치에서 사운드의 위치를 정할 수 있습니다.
예를 들어, 사운드의 출력 경로가 빌딩에 의해서 차단되었다고 가정해봅시다. 다음 그림을 참고하세요. A 오브젝트의 실제 위치를 사용하는 대신에 A'와 A'' 두 개의 다른 위치를 사용하는 게 더욱 현실감 있는 사운드가 될 것입니다. 이렇게 하려면 SetObjectObstructionAndOcclusion()를
사용해서 같은 방해와 차단 매개 변수가 모든 위치에 적용되게 됩니다. 또는, SetMultipleObstructionAndOcclusion()를
사용해서 고유한 방해 및 차단 값을 각각의 사운드 위치에 지정할 수도 있습니다.
파괴된 환경을 시뮬레이션할 때 사운드가 임의의 다양한 위치로부터 들리는 상황에서도 이러한 접근법이 잘 동작합니다. 소리를 재배치할 때는 MultiPositionType_MultiDirections
를 사용하는 것이 좋습니다.
Wwise 사운드는 왼손 좌표계를 요구합니다. 이미터의 위치와 좌표는 리스너의 기준 좌표계에 상대적이긴 하나, 기본값은 다음과 같습니다.
3D 위치의 통합에 대한 예제로 3D 위치 지정 예제 를 참고하세요.
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요