Wwise / Unreal Engine 4 / Unity 3D를 사용해 발자국 소리의 표면 관리하기

게임 오디오 / 사운드 디자인 / Wwise에 대한 팁과 도구

사전 제작의 초기 단계에서 사운드 디자이너는 많은 시스템을 프로토타입화해야 하는데, 이를 도와줄 오디오 프로그래머가 없는 경우도 있죠.

다행히도 Wwise는 Unreal Engine 4나 Unity 3D 같이 최근 엔진을 같이 사용할 수 있어 이런 경우 많은 도움이 됩니다.

 

예를 들어 Unreal Engine 4는 사운드 디자이너가 프로그래머의 도움 없이 다양한 것을 할 수 있게 해주는 강력한 스크립팅 인터페이스를 제공합니다. Wwise의 강력한 작동 방식과 이 인터페이스를 함께 사용해보면 가장 애정하는 툴이 될 수밖에 없을 겁니다.

이 튜토리얼에서는 그룹 표면을 감지/관리하고 알맞은 발자국 소리를 재생하는 법을 설명합니다.

여기 나오는 설명은 다음을 기반으로 제작되었습니다.

  • Audiokinetic의  Wwise 2016.1: Switch Group, RTPC, RTPC로 제어하는 Switch, Random Container (랜덤 컨테이너)
  • Unreal Engine 4.12.5: Blueprint, Surface & Physical Materials, AkEvent Notify, Set Switch, Set RTPC
  • Unity 3D 5.1
  • Unreal과 Unity 스토어에서 제공하는 무료 에셋

 

Wwise

이 구조는 엔진이 감지한 여러 지표면 머터리얼에 따라 발자국 소리를 재생할 수 있도록 Unreal과 Unity에서 완전히 동일하게 구성되었습니다.

Game Sync

  • Game Syncs에 Material이라는 새로운 Switch Group을 만드세요.
  • Switch Group 아래 ConcreteGrassTiles, Wood라는 4개의 Switch를 만드세요.

 FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3DSwitch는 '게임 오브젝트 기반'이기 때문에 플레이어 발자국 소리뿐만 아니라 다른 상황에서도 쓸 수 있습니다. 총의 타격음이나 NPC 발자국 소리와 같이 사용하는 게임 오브젝트에 따라 서로 다른 값을 가질 수 있습니다. 그렇기 때문에 물리적 표면을 관리하는 데는 '전역적'인 State를 사용할 수 없습니다.

 

전역적 구조 (오디오 / Event / Switch 지정)

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

  • (1) FS_Pawn이라는 새로운 Switch Container를 만드세요.
  • (2) Walk_ConcreteWalk_GrassWalk_Tiles, Walk_Wood에 각각 Random Container를 만드세요.
  • (3) 이 컨테이너와 머터리얼에 따라 오디오 파일을 모두 가져오세요.
  • (4) Switch Container를 클릭하고 이전에 만든 Switch를 설정하세요.

                                 Group: Material
                                 Default Switch/State: Concrete

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

이렇게 기본값을 설정하면 엔진이 Wwise에 없는 표면 이름을 전송할 경우 
기본적으로 Concrete 재생됩니다 (none으로 설정할 경우 아무것도 재생되지 않습니다).
  • (5) 이제 Assigned Objects에 Contents Editor에서 각 Random Container를 각 Switch로 드래그하여 놓으세요.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • (6) Switch Container FS_Pawn에서 Play_FS_Pawn이라는 새로운 Play Event를 만드세요.
  • (7) Transport Control이나 Soundcaster Session에서 Event를 시험하고 Material을 바꿔볼 수 있습니다.

 

 

Unreal Engine 4

프로젝트 설정

  • (1) Project Settings를 열고 Engine>Physics>Physical Surface로 가세요.
  • (2) ConcreteGrassWood, Tiles라는 4 개의 새로운 Surface Type을 추가하세요 (Wwise에서 만든 것과 동일한 이름).

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

Physical Material 설정

  • (1) 콘텐츠 브라우저에 PM_ConcretePM_GrassPM_TilesPM_Wood라는 4개의 새로운 Physical Material을 만드세요.

 

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • (2) 각 Physical Material을 열고 알맞은 Surface Type을 지정하세요.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

Material 설정

  • 맵에 사용되는 각 Material을 열고 PM_ConcretePM_GrassPM_Tiles, PM_Wood에 각각 알맞은 Physical Material을 설정하세요.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • 맵 개요

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

Animation Sequence

  • Animation Sequence를 여세요. 이 곳에서 AkEvent 발자국 소리를 트리거하게 됩니다.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

  • (1) 타임라인에서 원하는 위치에 notify AkEvent를 추가하세요.
  • (2) Anim Notify에서 Wwise 프로젝트에서 만들었던 Wwise AkEvent Play_FS_Pawn을 선택하세요.
경우 애니메이션을 재생할 기본 Switch Concrete 들려야 합니다.

 

Blueprint

  • 이 Blueprint는 Unreal이 캐릭터가 걷게 될 여러 가지 머터리얼을 '식별'하고 알맞은 Switch를 Wwise로 전송하는 곳입니다.
  • 콘텐츠 브라우저에서 BP_Wwise_Footsteps라는 새로운 Blueprint Class (Actor Component Class)를 만드세요.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • Blueprint를 열고 스크립트 작성을 시작하세요. 작성이 끝나면 다음과 같은 모습이 됩니다!

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

스크립팅의 각 부분을 더 자세히 살펴봅시다.

  • (1) Blueprint는 틱(tick)을 기본으로 하며 (매 프레임마다 업데이트됨) 플레이어의 위치를 취합니다.
FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D
  • (2) LineTraceByChannel 상자는 기본적으로 처음과 끝 입력으로 생긴 레이 트레이스 (ray-trace, Z 값은 폰에 따라 변경됨)입니다. 게임에서 레이 트레이스를 눈으로 확인하려면 Draw Debug Type을 'For One Frame'으로 변경하세요. 그러면 캐릭터 아래 빨간 선이 나타나며 레이 트레이스가 바닥과 충돌할 경우 맨 아래에 상자가 나타납니다.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • (3) 첫 번째 Branch 상자는 LineTraceByChannel에 반환 값이 있는지를 확인합니다.

두 번째 상자는 캐릭터가 새로운 Surface Type을 걷지 않을 경우 Blueprint가 Wwise에 Switch를 전송하지 않게 합니다. 이 부분이 없다면 각 틱마다 Wwise가 Switch를 무제한으로 수신하겠죠!

 Get Surface Type 상자는 Project Settings에 연결된 Enum을 반환합니다.

이 변수를 받고 설정하려면 CurrentSurfaceType이라는 새로운 변수를 만들고 유형을 EPhysical Surface로 설정하세요.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

 

  • (4) 이전에 말했듯이 Wwise Switch는 '게임 오브젝트를 기반'으로 합니다. 여기 나온 예시에서는 Animation Sequence에 게시된 AkEvent가 메시(mesh)에 연결된 Ak Component를 만듭니다. 그렇기 때문에 캐릭터 자체가 아니라 이 Ak Component에 Set Switch를 보내야 해요.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • (5) 이 상자는 해당 문자열을 Surface Type Enum (ConcreteGrass, …)으로 반환합니다.
  • (6) 이제 캐릭터가 걷고 있는 Current Surface Type을 Wwise로 전송할 Set Switch 상자를 제공할 수 있어요!

                                              Target: AkEvent가 게시된 메시에서 Ak Component를 가져오세요.
                                              Switch Group: Material (Wwise 세션에서 설정된 스위치 그룹과 동일)
                                              Switch State: Unreal에서 정의한 Surface Type

                                          Print String 상자는 디버깅만을 목적으로 Unreal Screen에서 Current Surface Type을 표시합니다.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • Blueprint를 컴파일하고, 저장한 다음, 캐릭터에 컴포넌트로 추가하세요.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • Wwise를 Unreal에 연결하면 Profiler 레이아웃의 Capture Log 뷰에서 Switch를 확인할 수 있습니다.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

한 걸음 더 나아가기

Wwise가 제공하는 정말 멋진 기능 중 하나는 Switch를 RTPC로 완전히 제어할 수 있다는 점입니다. 다시 말해 RTPC로 전송되는 값에 따라 Switch를 변경할 수 있어요!

이 기능은 지금 예시에서 특히 굉장히 유용합니다. 왜냐하면 이 기능을 사용해서 캐릭터의 속도에 따라 Walk와 Run 사이로 발자국 소리를 전환할 것이기 때문이죠.

UE4에서 Pawn의 Animation Blueprint를 열고 'Update Animation Event'의 끝에 Set RTPC 상자를 만드세요 (틱 기반).

  • Target: Ak Event Notify가 게시되는 Ak Component를 가져와야 합니다.
  • RTPC: Pawn_Speed
  • Value: Get Speed (속도 기반)

 FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 RTPC로 제어되는 Switch 만들기

  • FS_Type이라는 새로운 Switch Group을 만들고 Switch 값을 Walk 와 Run으로 지정하세요.
  • Pawn_Speed라는 RTPC를 만드세요.

                            Min = 0 (캐릭터가 움직이지 않을 경우)

                            Max = 300 (최대 속도)

                            Default = 0

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • 제 경우 0 ≤ Walk Speed < 250 ≤ Run Speed ≤ 300라는 것을 알았습니다 (이 속도는  Wwise를 Unreal에 연결하고 캐릭터로 전송되는 RTPC를 프로파일링하여 추적할 수 있습니다).
  • Use Game Parameter를 활성화하고 이렇게 '계단'을 만들어서 Pawn_Speed RTPC를 FS_Type Switch에 연결하세요.

 

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 이제 Switch 게임에서 전송되는 RTPC 값으로 제어됩니다.

  • 0 < Pawn_Speed ≤ 250일 경우 Walk로 전환
  • 250 < Pawn_Speed ≤ 300일 경우 Run으로 전환

  FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

  • 이제 SoundBank를 빌드하고, 플레이해보세요!

 

Unity 3D

Tag 설정하기

  • 맵에서 액터를 클릭하고 Inspector 창으로 가세요.
    • Tag 드롭 다운 상자를 클릭해 Add Tag를 선택하세요.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

  • 이 창에 Wood, Concrete, Grass, Tiles 값을 추가하세요.

 

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

지표면 설정

  • 플레이어가 걸을 수 있는 각 지표면/오브젝트에 대해 Inspector 창에서 Collider에 알맞은 Tag를 지정하세요.
    • 가끔 Collider가 메시에 내장되지 않을 수 있기 때문에 메시뿐만이 아니라 Collider에 Tag를 반드시 설정해야 합니다.

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

C# 코드

  • 이 C# 코드를 프로젝트의 Character Controller 스크립트에 추가하세요.

 

  • 변수 선언:

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

  • 주요 스크립트:

FOOTSTEPS MATERIAL MANAGEMENT - using Wwise / Unreal Engine 4 / Unity 3D

 

 

이 글이 조금이나마 도움이 되었기를 바라며, 앞으로도 Audiokinetic 블로그에 더 많은 게임 오디오 정보를 공유할 수 있기를 기대합니다!

  

세바스티앙 겔라르 (Sébastien Gaillard)

세바스티앙 겔라르 (Sébastien Gaillard)

DONTNOD Entertainment (돈트노드 엔터테인먼트)오디오 디렉터세바스티앙 겔라르는 15년 이상의 게임 사운드 디자인, 스크립팅, 통합 경력을 가진 오디오 디렉터입니다. 지난 3년간 그는 DONTNOD의 오디오 부서를 관리해왔으며, 특히 수상 경력에 빛나는 ‘Life is Strange’를 작업한 바 있습니다. 또한 세바스티앙은 ISART Digital의 테크니컬 사운드 디자인과에서 정기적인 강사로 활동하고 있습니다.

댓글

댓글 달기

이메일 주소는 공개되지 않습니다.

다른 글

고전적 잔향 방법의 몰입적 잠재성 살펴보기

이전 글인 VR에서 몰입형 잔향의 도전 과제에서는 가상 현실에서 몰입형 잔향을 성취하기가 힘든 이유를 알아보았습니다. 이 시리즈에서는 과거, 현재, 그리고 새로운 잔향 기술을...

23.2.2021 - 작성자: 브누아 알라리 (BENOIT ALARY)

Wwise에서 Audio Object를 저작하고 프로파일링하는 간단한 9 단계

Wwise에서 새롭게 제공되는 오브젝트 기반 오디오 파이프라인을 둘러보고 싶지만 어디서부터 시작해야 할지 모르시는 분들 계시나요? 그렇다면 Windows용 Wwise에서 Audio...

21.7.2021 - 작성자: 데미안 캐스트바우어 (Damian Kastbauer)

Wwise+GME 게임 음성 솔루션: 다양한 음성 플레이 대방출, 생생한 몰입감 선사

AppAnnie2021 모바일 게임 리포트는 강력한 소셜 인터랙션 속성을 가진 배틀 그라운드, 슈팅 및 온라인 MOBA가 플레이어들의 사랑을 많이 받았으며 게임 시간 증가를...

13.1.2022 - 작성자: Tencent Cloud

텔 미 와이(Tell Me Why) | 오디오 다이어리 제 3부: 사운드 디자인

텔 미 와이(Tell Me Why)의 오디오 팀에게는 독특하면서도 인상 깊은 서사적 시퀀스를 향상시킬 수 있는 기회가 많았습니다. 저희 시네마틱 및 크리에이티브 디렉터는 영상에 꼭...

19.7.2022 - 작성자: 매튜 피오렌티니 (Mathieu Fiorentini)

Strata의 Physics(물리) 효과음 무료 샘플 | 충돌 사운드 디자인의 무한한 가능성

Strata에서 가장 다양한 곳에 사용되는 멀티트랙 효과음 컬렉션, Physics(물리)를 소개합니다. Strata Sample 03을 사용하면 Strata 독점 제공 컬렉션에서...

25.9.2024 - 작성자: Audiokinetic (오디오키네틱)

팀에서 WAAPI와 Python을 사용한 작업 및 예시

이 글에서는 제가 오랫동안 사용해온 WAAPI 작업에 대한 다소 주관적인 접근 방식을 설명해드리려고 합니다. 이 접근 방식은 Python, 명령어 애드온(add-on), 그리고...

4.12.2024 - 작성자: 유진 체르니 (Eugene Cherny)

다른 글

고전적 잔향 방법의 몰입적 잠재성 살펴보기

이전 글인 VR에서 몰입형 잔향의 도전 과제에서는 가상 현실에서 몰입형 잔향을 성취하기가 힘든 이유를 알아보았습니다. 이 시리즈에서는 과거, 현재, 그리고 새로운 잔향 기술을...

Wwise에서 Audio Object를 저작하고 프로파일링하는 간단한 9 단계

Wwise에서 새롭게 제공되는 오브젝트 기반 오디오 파이프라인을 둘러보고 싶지만 어디서부터 시작해야 할지 모르시는 분들 계시나요? 그렇다면 Windows용 Wwise에서 Audio...

Wwise+GME 게임 음성 솔루션: 다양한 음성 플레이 대방출, 생생한 몰입감 선사

AppAnnie2021 모바일 게임 리포트는 강력한 소셜 인터랙션 속성을 가진 배틀 그라운드, 슈팅 및 온라인 MOBA가 플레이어들의 사랑을 많이 받았으며 게임 시간 증가를...