버전

menu_open
Wwise SDK 2023.1.3
예제 통합으로 빠르게 시작하기 - 환경과 Game-defined Auxiliary Send

주변 환경 효과 예제

가장 먼저 사용자는 Wwise 프로젝트에서 주변 환경을 표현할 Auxiliary 버스를 생성해야 합니다. 환경 하나당 보조(AUX) 버스 하나씩을 생성합니다. 이 기능을 사용할 사운드에 대해, 해당 오브젝트 속성이나 여기서 속성을 상속받은 오브젝트에서 'Use game-defined auxiliary sends (게임에서 정의한 보조 전송 사용)' 옵션이 선택돼있어야 합니다. 게임이 이러한 매개 변수 설정을 이용하도록 하려면 해당 효과가 사운드 엔진에 등록돼있어야 합니다. 다음 예제에서 보여주듯, 다른 효과 플러그인을 등록할 때와 똑같은 방법으로 등록하면 됩니다 (더 자세한 내용은 플러그인 예제 참고).

#include <AK/SoundEngine/Common/AkSoundEngine.h> // 사운드 엔진
#include <AK/Plugin/AkRoomVerbFXFactory.h> // 효과 초기화 함수
(...)

초기화 함수를 링크 시간 중에 찾을 수 있게 하기위해서는 개발하는 C++ 프로젝트가 적절한 플러그인 라이브러리와 연결돼야 합니다. 라이브러리에 대한 더 많은 정보는 SDK에 포함된 라이브러리와 헤더 파일의 개요 를 참고하세요.

// 이 예제에서는 Dry, Hangar, Tunnel의 세 값을 하드코딩합니다.
// 해당 환경 내 게임 오브젝트 위치에 따라
// 게임에서 이 값들을 계산하게 됩니다.
AkReal32 nDryRatio = 0.5f;
AkReal32 nHangarRatio = 0.25f;
AkReal32 nTunnelRatio = 0.25f;
AkAuxSendValue aEnvs[2];
aEnvs[0].listenerID = AK_INVALID_GAME_OBJECT; // SetListeners/SetDefaultListeners API로 할당된 리스너와 동일한 설정을 사용하세요.
aEnvs[0].fControlValue = nHangarRatio;
aEnvs[1].listenerID = AK_INVALID_GAME_OBJECT; // SetListeners/SetDefaultListeners API로 할당된 리스너와 동일한 설정을 사용하세요.
aEnvs[1].fControlValue = nTunnelRatio;
AK::SoundEngine::SetGameObjectOutputBusVolume( GAME_OBJECT_ID_HUMAN, nDryRatio );
AK::SoundEngine::SetGameObjectAuxSendValues( GAME_OBJECT_ID_HUMAN, aEnvs, 2 );

이 값들이 각각 의미하는 바는 통합 상세 내용 - 환경과 Game-defined Auxiliary Send 를 참고하세요.

참고: AK::SoundEngine::GetIDFromString() 로 보낸 이름들은 Wwise에서 정의한 Auxiliary 버스 이름들입니다. 더 자세한 정보는 ID 또는 문자열(유니코드 또는 ANSI) 이용하기 를 참고하세요.

예제 프로그램에서 'Environments: Footsteps' 그룹의 처음 세 개의 슬라이더를 움직여 Environment를 실험해보면, Dry, Hangar, Tunnel 환경의 비율을 설정할 수 있습니다 (왼쪽 0에서 오른쪽 100% 사이).

더 자세한 정보는 통합 상세 내용 - 환경과 Game-defined Auxiliary Send 참고하고, 예제 프로젝트는 Integration Demo 예제 를 참고하세요.

방해/차단 예제

게임 오브젝트 및 리스너의 주변 환경과 위치에 따라 좌우되는 방해(obstruction)와 차단(occlusion)은, 게임 오브젝트별로 각각의 리스너에 맞게 계산될 수 있습니다.

다음과 같이 AK::SoundEngine::SetObjectObstructionAndOcclusion() 를 호출해 방해와 차단 설정을 합니다.

// 이 예제에서는 방해와 차단에 대해 하드코딩된 값을 사용합니다. 게임에서
// 게임 오브젝트와 리스너의 위치 및
// 이들 주변 환경의 구성에 따라 해당 값을 계산해야 합니다.
AkReal32 fObstruction = 0.05f;
AkReal32 fOcclusion = 0.0f;
// 여기서는 Listener 0에 대해서만 값을 계산하고 설정했습니다. 둘 이상의 리스너가 있는 경우,
// 각 리스너에 대해 개별적으로 값을 계산하고 설정해줘야 합니다.
AK::SoundEngine::SetObjectObstructionAndOcclusion( GAME_OBJECT_ID_HUMAN, 0 /*listener*/, fObstruction, fOcclusion );

예제 프로그램에서 'Environments: Footsteps' 그룹의 마지막 두 개의 슬라이더를 움직여 Obstruction과 Occlusion을 실험해보면, 방해와 차단의 비율을 설정할 수 있습니다 (0 에서 100% 사이).

더 자세한 내용은 Obstruction and Occlusion with Game-defined Auxiliary Sends 을 참고하고, 예제 프로젝트는 Integration Demo 예제 를 참고하세요.

참고: 이 예제 코드는 예제 의 사운드 엔진 통합 예제 프로젝트에서 발췌했습니다. 더 자세한 정보는 Integration Demo 예제 를 참고하세요.
AkReal32 fControlValue
Definition: AkTypes.h:950
Auxiliary bus sends information per game object per given auxiliary bus.
Definition: AkTypes.h:947
float AkReal32
32-bit floating point
AKSOUNDENGINE_API AKRESULT SetObjectObstructionAndOcclusion(AkGameObjectID in_EmitterID, AkGameObjectID in_ListenerID, AkReal32 in_fObstructionLevel, AkReal32 in_fOcclusionLevel)
AKSOUNDENGINE_API AKRESULT SetGameObjectAuxSendValues(AkGameObjectID in_gameObjectID, AkAuxSendValue *in_aAuxSendValues, AkUInt32 in_uNumSendValues)
AKSOUNDENGINE_API AkUInt32 GetIDFromString(const char *in_pszString)
AKSOUNDENGINE_API AKRESULT SetGameObjectOutputBusVolume(AkGameObjectID in_emitterObjID, AkGameObjectID in_listenerObjID, AkReal32 in_fControlValue)
static const AkGameObjectID AK_INVALID_GAME_OBJECT
Invalid game object (may also mean all game objects)
Definition: AkTypes.h:176
AkGameObjectID listenerID
Game object ID of the listener associated with this send. Use AK_INVALID_GAME_OBJECT as a wildcard to...
Definition: AkTypes.h:948
AKSOUNDENGINE_API AK::IAkGlobalPluginContext * GetGlobalPluginContext()
AkAuxBusID auxBusID
Auxiliary bus ID.
Definition: AkTypes.h:949

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

지원이 필요하신가요?

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

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

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

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

Wwise를 시작해 보세요