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)

오디오 디렉터

DONTNOD Entertainment (돈트노드 엔터테인먼트)

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

오디오 디렉터

DONTNOD Entertainment (돈트노드 엔터테인먼트)

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

댓글

댓글 달기

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

다른 글

Wwise Wworld Wwide Online Expo (와이즈 월드 와이드 온라인 엑스포) 요약해보기

Audiokinetic의 20주년 기념과 딱 맞게 2020년이 시작되었습니다. 오늘, 크로스 플랫폼 오디오 솔루션인 Wwise는 여러분의 성원에 힘입어 상호작용 및 게임 오디오에서...

30.9.2020 - 작성자: Audiokinetic

WAAPI 간소화하기

Wwise 저작 API (Wwise Authoring API, WAAPI)를 사용하신 적이 없으시다면 이 글을 통해 사용해볼 기회가 생기기를 바랍니다. 네, 프로그래머가 아닌...

4.11.2020 - 작성자: Adam T. Croft

사운드 디자이너가 PureData + Heavy를 사용하여 DSP 플러그인을 개발하는 법 - 제 1부

많은 사운드 디자이너들이 오디오 플러그인 개발을 오디오 프로그래머의 '흑마법' 영역이라 생각합니다. 보통 코딩 기술뿐만 아니라 수학, 물리학, 디지털 신호 처리 등 사운드...

17.11.2020 - 작성자: 천종 호우 (Chenzhong Hou)

아우터 월드(Outer Worlds)의 사운드: 제 1부

저희 Obsidian 오디오 팀은 Wwise와 Unreal을 사용하여 아우터 월드(Outer Worlds)의 사운드, 음악, VO를 제작한 방식을 두 편의 글로 심층적으로...

8.12.2020 - 작성자: 옵시디언 엔터테인먼트 (Obsidian Entertainment)

파이널 판타지 VII 리메이크의 사운드

수많은 사람들의 사랑을 받는 파이널 판타지 VII의 음악은 새로운 세대의 팬들이 경험할 수 있도록 수 년에 걸쳐 새롭게 재고되어 왔습니다. 최근 Square Enix(스퀘어...

4.5.2021 - 작성자: SQUARE ENIX (스퀘어 에닉스)

새로운 Impacter 플러그인 알아보기

개요 Impacter(임팩터)는 기존의 SoundSeed Impact 플러그인을 영감으로 하는 새로운 음원 플러그인입니다. 이 플러그인은 '타격음' 사운드 파일을 저작 도구로...

20.5.2021 - 작성자: 라이언 돈 (RYAN DONE)

다른 글

Wwise Wworld Wwide Online Expo (와이즈 월드 와이드 온라인 엑스포) 요약해보기

Audiokinetic의 20주년 기념과 딱 맞게 2020년이 시작되었습니다. 오늘, 크로스 플랫폼 오디오 솔루션인 Wwise는 여러분의 성원에 힘입어 상호작용 및 게임 오디오에서...

WAAPI 간소화하기

Wwise 저작 API (Wwise Authoring API, WAAPI)를 사용하신 적이 없으시다면 이 글을 통해 사용해볼 기회가 생기기를 바랍니다. 네, 프로그래머가 아닌...

사운드 디자이너가 PureData + Heavy를 사용하여 DSP 플러그인을 개발하는 법 - 제 1부

많은 사운드 디자이너들이 오디오 플러그인 개발을 오디오 프로그래머의 '흑마법' 영역이라 생각합니다. 보통 코딩 기술뿐만 아니라 수학, 물리학, 디지털 신호 처리 등 사운드...