목차

Wwise SDK 2021.1.1
자신의 플러그인 시험하기

이 문서는 개발하는 플러그인이 Wwise 플랫폼의 모든 측면과 잘 호환되는 것을 돕기 위해 만들어졌습니다. Audiokinetic은 사용자가 소프트웨이어의 모든 부분을 빠짐 없이 다룰 수 있도록 일련의 가이드라인과 구체적인 시험들을 제공하고 있습니다. 여기 나온 시험 및 가이드라인은, 대중을 대상으로 플러그인을 개발할 경우 필수 사항으로 고려해야 합니다.

이 시험들을 통과하면 더 안정적이면서도 Wwise의 모든 기능 세트와 작동할 수 있는 플러그인을 개발할 수 있게 됩니다.

가이드라인

사용자 인터페이스

  • 최대 크기: 작은 노트북 화면에서 제대로 보이기 위해 플러그인 UI의 콘텐츠는 1000x650 픽셀에 들어가야합니다.
  • 크기 조절 가능: WindowProc 함수에 WM_SIZE 메시지를 처리할 것을 권장합니다. 이렇게 하면 플러그인에 둔 주안점을 기반으로 사용자가 작거나 큰 작업 영역을 만들 수 있습니다. 또한, Wwise 레이아웃 체계에 플러그인이 좀 더 잘 맞도록 돕기도 합니다.
  • 기본 컨트롤 사용: 기본 컨트롤을 의무적으로 사용해야하는 것은 아니지만, 몇몇 이점이 있습니다:
    • RTPC 아이콘이 지원되는 속성에 자동으로 나타납니다.
    • 컨트롤 상호작용이 Wwise 전반에 걸쳐 표준을 따릅니다. (슬라이더 작동, 키보드 보조키, 콘텍스트 메뉴, 등).
    • 연결/연결 해제가 지원됩니다 (Source 플러그인에만 해당).
    • 슬라이더 범위가 속성 정의에 따라 자동으로 조정됩니다.
  • 대문자 사용: 텍스트(라벨, 체크 상자, 라디오 버튼, 버튼, 툴팁, 등)에 문장에서 쓰는 방식으로 대문자를 사용합니다.
  • 모덜리스 대화 상자: 플러그인 창에서 모덜리스 대화 상자(하위 항목 아님)를 생성하지 마세요. 만약 그럴 경우 Wwise의 레이아웃 시스템과 충돌하여 버그를 발생시킬 수 있습니다. 대신 모달 대화 상자를 사용하되, 최소한으로 사용하는 것이 좋습니다 (Open/Save file 대화창, User/System Settings, Mesage Box, 등).
  • 깜박임 방지: 플러그인 창 크기를 조정할 때, 깜박임이 발생해서는 안 됩니다.

기능

  • RTPC 지원: 가능한 경우 자신의 속성이 RTPC를 지원하도록 해야 합니다. 게임 입력을 플러그인 속성에 연결시킬 수 있도록 하고 보다 유연하게 만듭니다.
  • 비선형 슬라이더: 데시벨 단위의 볼륨 슬라이더와 같이 범위가 선형이 아닌 청각적 분포 방식으로 된 슬라이더의 경우, 속성 범위와는 달리 픽셀 범위의 비선형 분포를 사용합니다.
  • 속성 제한 사항 사용: XML 플러그인 정의에 속성을 정의할 때에는 속성의 제한 범위나 열거를 정의합니다. 이 제한 사항은 다음과 같은 용도에 사용됩니다.

    • 슬라이더 범위 자동 조정
    • RTPC 그래프의 RTPC 범위 결정
    • 프로젝트의 무결성을 위해 프로젝트가 로드될 때 속성 값 확인 및 조정

코드 작성 (서드 파티)

서드 파티 플러그인 공급자는 다음 요구 사항을 준수해야 합니다. 내부 타이틀 프로그래머 또한 이 요구 사항을 지킬 것을 권장합니다.

  • 안정성: 개발하는 플러그인은 강제 종료, assert, 멈춤 또는 메모리 누수가 발생해서는 안 됩니다.
  • 메모리 할당: 플러그인의 Sound Engine 부분에서 new()나 malloc()을 호출해서는 안 됩니다. IAkPlugin.h 에 정의된 AK_PLUGIN_NEW, AK_PLUGIN_DELETE, AK_PLUGIN_ALLOC, AK_PLUGIN_FREE 매크로를 이용하여 Wwise 사운드 엔진을 통해 플러그인으로 전달되는 AK::IAkPluginMemAlloc 할당자를 통해서만 메모리를 할당해야 합니다.
  • 할당된 메모리 확인: 플러그인의 Sound Engine 부분에서, 사용 전에 항상 메모리 할당이 제대로 됐는지 확인해야 합니다. 메모리 할당이 실패할 경우, 플러그인은 상황에 맞게 AK_Fail 을 반환해야 합니다.
  • 지원하는 채널 환경 설정 공고: 플러그인의 Sound Engine 부분은 지원하지 않는 채널 환경 설정에 대해 AK_UnsupportedChannelConfig 를 반환해야 합니다.
  • 플러그인 성능: 플러그인의 런타임 성능은 실행 시간 동안 AK::IAkInPlaceEffectPlugin::Execute() 의 모든 호출 전반에 걸쳐 일관성을 유지해야 합니다.
    • Sound Engine 플러그인 API의 초기화, 종료, 등 모든 기능은 Execute() 보다 오래 걸려서는 안 됩니다.
    • RTPC를 사용할 수 없는 매개 변수를 Wwise 저작 툴에서 편집해 플러그인에 실시간으로 적용하는 경우에는 이 제한 사항이 적용되지 않습니다. 최소한, 이러한 매개 변수를 변경했을 때 플러그인의 Sound Engine 부분을 해체하고 재초기화하는 시간보다는 짧아야합니다.
  • assert: 네이티브 assert가 아닌 AKASSERT 매크로를 사용해야 합니다.
    • 플러그인에서 Wwise 부분의 주요 cpp 파일에 다음의 코드를 추가하세요.: DEFINEDUMMYASSERTHOOK;
    • 이 매크로는 AudioPlugin.h 에 정의돼있으며, 플러그인의 Sound Engine 부분이 Wwise 저작 툴을 이용하는 DLL 내에 빌드될 때 제대로 연결될 수 있도록 합니다.
  • 사용성: 플러그인은 저작 툴에 삽입되는 즉시 기능해야 합니다. 여기서 기능해야한다는 의미는, Effect Editor를 여는 등 사용자 입장에서 별도 작업 없이 플러그인이 재생 가능하며 사운드뱅크를 생성하는 도중 오류를 발생시키지 않아야 한다는 뜻입니다.
  • 동시 실행: 별도의 인스턴스에서 Execute() 메소드의 동시 실행이 가능해야 합니다 (eventmgrthread_taskscheduling 참고). 인스턴스 간의 모든 데이터 공유는 스레드로부터 안전해야 합니다.

Unity 3D 및 Unreal4

Unity 3D와 Unreal4 게임 엔진의 공식 Wwise 통합은 효과에 동적 라이브러리를 사용하고 있습니다. 폭넓은 사용자를 대상으로 플러그인을 개발해 배포할 경우 지원하는 모든 플랫폼에 대해 동적 라이브러리를 제공해야 합니다. 플러그인의 동적 라이브러리에 대해 Creating Dynamic Libraries 에서 더 자세한 내용을 확인하세요.

검사

새로운 인스턴스 (Source 플러그인)

  1. Project Explorer에서 새로운 Sound를 생성합니다.
  2. Contents Editor에서 자신의 음원 플러그인의 인스턴스를 새로 생성합니다.
  3. 새로 생성된 음원을 더블클릭합니다.
  4. 기본값이 설정돼있는지 확인합니다.
  5. 음원을 재생합니다.
  6. 음원이 올바르게 재생되는지 확인합니다.

새로운 인스턴스 (Effect 플러그인)

  1. Project Explorer에서 기존 사운드를 더블클릭합니다.
  2. Property Editor에서 Effects 탭으로 전환합니다.
  3. effect ID=0에서 ">>" 버튼을 클릭합니다.
  4. effect 하위 메뉴에서 "New..."를 선택합니다.
  5. 워크 유닛을 선택합니다.
  6. Edit를 클릭합니다.
  7. 기본값이 설정돼있는지 확인합니다.
  8. Sound를 재생합니다.
  9. Sound에 효과가 올바르게 적용되어 재생되는지 확인합니다.
  1. Project Explorer에서 기존 사운드를 더블클릭합니다.
  2. Property Editor에서 Effects 탭으로 전환합니다.
  3. effect ID=0에서 ">>" 버튼을 클릭합니다.
  4. effect 하위 메뉴에서 "Default (Custom)"를 선택합니다.
  5. Edit를 클릭합니다.
  6. 기본값이 설정돼있는지 확인합니다.
  7. Sound를 재생합니다.
  8. Sound에 효과가 올바르게 적용되어 재생되는지 확인합니다.

Effect 모드 변경 (Effect 플러그인)

  1. Project Explorer에서 기존 사운드를 더블클릭합니다.
  2. Property Editor에서 Effects 탭으로 전환합니다.
  3. effect ID=0에서 ">>" 버튼을 클릭합니다.
  4. effect 하위 메뉴에서 "New..."를 클릭합니다.
  5. 워크 유닛을 클릭합니다.
  6. Edit를 클릭합니다.
  7. 속성 값을 변경합니다.
  8. Property Editor의 Effect 탭에서 Effect 모드를 "Define custom"으로 변경합니다.
  9. Edit를 클릭합니다.
  10. effect에 변경된 속성 값이 적용됐는지 확인합니다.

상위 항목 복사 (Effect 플러그인)

  1. 효과가 적용된 Sound를 생성합니다.
  2. 해당 효과의 속성 값을 변경합니다.
  3. Project Explorer에서 Sound를 복사합니다 (CTRL+C).
  4. Project Explorer에서 원하는 곳에 이를 붙여넣습니다 (CTRL+V).
  5. 해당 효과가 복사된 Sound에 적용됐는지, 변경된 속성 값이 적용됐는지 확인합니다.

상위 항목 복사 (Source 플러그인)

  1. 음원 플러그인이 있는 Sound를 생성합니다.
  2. 해당 음원의 속성 값을 변경합니다
  3. Project Explorer에서 Sound를 복사합니다 (CTRL+C).
  4. Project Explorer에서 원하는 곳에 이를 붙여넣습니다 (CTRL+V).
  5. 복사된 Sound에 변경한 속성 값으로 Source가 들어있는지 확인합니다.

효과 삭제 (Effect 플러그인)

  1. 효과가 적용된 Sound 하나를 생성합니다.
  2. 해당 효과의 속성 값을 변경합니다.
  3. Property Editor의 Effects 탭에서 해당 효과를 삭제합니다.
  4. 실행을 취소합니다 (CTRL+Z).
  5. 변경된 속성 값으로 효과가 복구됐는지 확인합니다.
  6. 재실행합니다 (CTRL+Y).

Sound 삭제 (Effect 플러그인)

  1. 효과가 적용된 Sound 하나를 생성합니다.
  2. 해당 효과의 속성 값을 변경합니다.
  3. Project Explorer에서 Sound를 삭제합니다.
  4. 실행을 취소합니다 (CTRL+Z).
  5. 변경된 속성 값으로 효과가 복구됐는지 확인합니다.
  6. 재실행합니다 (CTRL+Y).

Sound 삭제 (Source 플러그인)

  1. 음원 플러그인이 있는 Sound 하나를 생성합니다.
  2. 해당 음원의 속성 값을 변경합니다.
  3. Contents Editor에서 음원을 삭제합니다.
  4. 실행을 취소합니다 (CTRL+Z).
  5. 변경된 속성 값으로 음원이 복구됐는지 확인합니다.
  6. 재실행합니다 (CTRL+Y).

Sound 삭제 (Source 플러그인)

  1. 음원 플러그인이 있는 Sound 하나를 생성합니다.
  2. 해당 음원의 속성 값을 변경합니다.
  3. Project Explorer에서 Sound를 삭제합니다.
  4. 실행을 취소합니다 (CTRL+Z).
  5. 변경된 속성 값으로 음원이 복구됐는지 확인합니다.
  6. 재실행합니다 (CTRL+Y).

속성 실행 취소

  1. 각 속성이나 변경 가능한 요소에 대해 다음과 같이 실행합니다.
    1. 값을 변경합니다.
    2. Edit 메뉴를 열어Undo 이벤트의 이름을 확인합니다.
    3. 실행 취소(Undo)를 합니다.
    4. 재실행(Redo) 합니다.

지속

  1. 변경된 속성으로 효과나 음원 플러그인 하나를 생성합니다.
  2. Project를 저장합니다.
  3. Project를 닫습니다.
  4. Project를 다시 엽니다.
  5. 변경된 속성 값으로 음원이나 효과가 존재하는지 확인합니다.

RTPC 속성 이름

  1. Source/Effect가 있는 Sound를 생성합니다.
  2. 플러그인 RTPC 탭에서 ">>"를 클릭합니다.
  3. RTPC를 지원하는 모든 속성이 목록에 나오도록 합니다.
  4. 모든 속성 이름들이 문장에서 쓰는 방식으로 대문자를 사용하도록 합니다.

RTPC 속성 범위

  1. Source/Effect가 있는 Sound를 생성합니다.
  2. RTPC 목록에 모든 속성을 추가합니다.
  3. 각 속성에 대해,
    1. 범위가 올바른지 확인합니다.
    2. 기본 값이 올바른지 확인합니다.

재생시 RTPC 변경

  1. Source/Effect가 있는 Sound를 생성합니다.
  2. RTPC를 지원하는 각 속성에 대해,
    1. RTPC 목록에 속성을 추가합니다.
    2. 상위 Sound를 재생합니다.
    3. 재생하는 동안 Property에 연결된 Game Parameter를 변경합니다.

재생시 속성 변경<ol>

Source/Effect가 있는 Sound를 생성합니다. effect/source가 있는 Sound를 재생합니다 (해당 Sound가 너무 짧을 경우 반복 재생합니다). 재생하는 동안 각 속성에 대해,

  1. 값을 변경합니다.

Sound 반복 재생

  1. Source/Effect가 있는 Sound를 생성합니다.
  2. 해당 Sound의 Looping을 활성화합니다 (Infinite로 설정).
  3. Soud를 재생합니다.
  4. 끊김 없이 들리는지 확인합니다.
  5. 다른 플러그인 속성 값으로 테스트를 재실행합니다.

Container 반복 재생

  1. Source/Effect가 있는 Sound를 생성합니다.
  2. Random Container에 상위 Sound를 배치합니다.
  3. Random Container를 PlayMode=Continuous, Loop=Infinite로 설정합니다.
  4. Random Container를 재생합니다.
  5. 끊김 없이 들리는지 확인합니다.
  6. 다른 플러그인 속성 값으로 테스트를 재실행합니다.

샘플 단위 정밀(Sample Accuracy)로 Container 반복 재생

  1. Source/Effect가 있는 Sound를 생성합니다.
  2. Random Container에 상위 Sound를 배치합니다.
  3. Random Container를 PlayMode=Continuous, Loop=Infinite로 설정합니다.
  4. Random Container를 Transition=Sample Accurate로 설정합니다.
  5. Random Container를 재생합니다.
  6. 끊김 없이 들리는지 확인합니다.
  7. 다른 플러그인 속성 값으로 테스트를 재실행합니다.

가상 보이스 (Source 플러그인)

  1. Project Settings 대화창에서Volume Threshold를 -5 db로 설정합니다.
  2. Source가 있는 Sound를 생성합니다.
  3. Property Editor의 Advanced Settings 탭에서 WhenBelowVolumeThreshold=SendToVirtualVoice를 설정합니다.
  4. Sound를 재생합니다.
  5. Sound Volume=-6 db로 설정합니다.
  6. 끊김 없이 들리는지 확인합니다.
  7. Sound Volume=0 db로 설정합니다.
  8. 끊김 없이 들리는지 확인합니다.
  9. 다른 플러그인 속성 값으로 테스트를 재실행합니다.

Sound의 다채널 Effect (Effect 플러그인)

  1. 0.1, 1.0, 1.1, 2.0, 2.1, 4.0, 4.1, 5.0, 5.1의 채널 구성을 갖고 있는 Sound에 대해,
  2. Sound에 효과를 적용합니다.
  3. 해당 Sound를 재생합니다.

Bus의 다채널 Effect (Effect 플러그인)

  1. Effect가 있는 Bus를 생성합니다.
  2. 0.1, 1.0, 1.1, 2.0, 2.1, 4.0, 4.1, 5.0, 5.1의 채널 구성을 갖고 있는 Sound에 대해,
  3. 이 Bus로 Sound를 라우팅합니다.
  4. 해당 Sound를 재생합니다.

Effect가 있는 Sound의 다중 재생 (Effect 플러그인)

  1. Effect가 있는 Sound를 생성합니다.
  2. SoundCaster를 이용해 해당 Sound를 동시에 여러 번 재생합니다.

복수의 Sound가 있는 Bus의 Effect (Effect 플러그인)

  1. Effect가 있는 Bus를 생성합니다.
  2. 이 Bus로 몇 개의 Sound를 라우팅합니다.
  3. SoundCaster를 이용해 , 이 버스로 라우팅된 복수의 Sound를 동시에 재생합니다.

게임 내 검사

Wwise에서 검사할 수 없는 부분을 확인하기 위해 게임 안에서 자신의 플러그인을 검사하는 것이 필요합니다. 다음과 같은 항목을 검사해볼 수 있습니다.

  • 다른 플랫폼(PS4, Xbox One, 등)에서 코드 실행.
  • 플러그인 매개 변수의 SoundBank 생성 및 불러오기
  • 렌더링된 효과
  • 환경 효과

게임 내 검사를 위해, Game Simulator를 이용해 검사 스크립트를 빌드할 수 있습니다. 스크립트를 작성하고 이를 Game Simulator에서 실행하는 방법은 다음과 같습니다.

  1. 자신의 프로젝트에서 다음과 같이 실행합니다.
    1. SoundBank를 생성합니다.
    2. 자신의 Sound를 재생하는 이벤트를 생성합니다.
    3. SoundBank에 자신의 이벤트를 추가합니다.
    4. 자신의 SoundBank를 생성합니다.
  2. Game Simulator를 설치합니다 (사용하는 Wwise와 동일한 버전이어야 함).
  3. Game Simulator 설치 디렉터리 내 Scripts 폴더에서 AkSampleNoCoroutines.lua 나 AkSampleWithCoroutines.lua 의 복사본을 만듭니다.
  4. 자신의 뱅크를 로드하고 이벤트를 재생하게끔 lua 스크립트를 수정합니다.
  5. 선택한 플랫폼에서 적절한 Game Simulator를 이용해 해당 lua 스크립트를 실행합니다.

렌더링된 Effect (Effect 플러그인)

  1. Effect가 있는 Sound를 생성합니다.
  2. Property Editor의 Effect Tab에서 해당 효과에 대해 "Render"를 활성화합니다.
  3. 게임 내에서 해당 Sound를 재생합니다.

문제 해결

문제가 발생할 경우 Wwise Source and Effect Plug-in Troubleshooting Guide 에 나와있는 도움말을 참고하세요.