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의 테크니컬 사운드 디자인과에서 정기적인 강사로 활동하고 있습니다.

댓글

댓글 달기

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

다른 글

하이브리드 상호작용 음악의 시대가 올 것인가? 제 1부 -상호작용 음악의 R&D 플랫폼으로 Get Even 사용하기

저는 게임 음악을 작곡할 때 어떻게 하면 플레이어에게 의미있게 다가갈 수 있을까 항상 고민합니다. 작곡가는 보통 크리에이티브 디렉터, 오디오 디렉터와 함께 이야기, 감정, 주제,...

22.10.2019 - 작성자: 올리비에 더리비에르 (OLIVIER DERIVIÈRE)

Wwise를 사용하여 UE 게임에 두 개의 오디오 장치 구현하기

먼저 제 소개를 해드릴게요. 저는 에드 카신스키(Ed Kashinsky)이며 러시아 상트페테르부르크 출신 사운드 디자이너 겸 음악가입니다. 현재 저는 아주 흥미롭고 독특한...

15.9.2020 - 작성자: 에드 카신스키(ED KASHINSKY)

UI 설계 관점에서 UI 오디오 접근하기 - 제 1부

어떤 게임에서는 사용자 인터페이스가 플레이어의 전체 경험에 궁극적으로 영향을 거의 미치지 않습니다. 수많은 모바일 게임과 같이 어떤 게임에서는 거의 전체 게임플레이 동안 UI를...

14.10.2020 - 작성자: 조셉 마척(JOSEPH MARCHUK)

Wwise를 사용한 반복 재생 기반 자동차 엔진음 디자인 | 제 2부

다시 뵙게 되어 반갑습니다! 이 시리즈에서는 Wwise에서의 간단한 반복 재생 기반 자동차 엔진을 구성 및 설계를 함께 살펴보게 됩니다. 디자인을 제어하기 위해 필요한 엔진 매개...

9.5.2023 - 작성자: 아르토 코이비스토 (Arto Koivisto)

임펄스 응답 리버브로 현실감 있는 사운드 만들기

임펄스 응답은 실제 공간을 초현실적으로 재구현하는 것으로 유명합니다. 최고 품질의 임펄스 응답을 녹음하는 것은 다소 기술적이며 고급 장비가 필요한 일입니다. 공간적인 품질을 갖춘...

8.9.2023 - 작성자: BOOM Library

Wwise Spatial Audio 2023.1의 새로운 기능 | 위상 완화 (Phasing Mitigation)

오늘 이 글에서는 '위상(phasing)'이라는 흥미로운 음향적인 현상에 대해 알아보겠습니다. 이 현상은 특정 환경에서 음향을 모델링할 때 나타날 수 있죠. Wwise 23.1의...

25.1.2024 - 작성자: Allen Lee

다른 글

하이브리드 상호작용 음악의 시대가 올 것인가? 제 1부 -상호작용 음악의 R&D 플랫폼으로 Get Even 사용하기

저는 게임 음악을 작곡할 때 어떻게 하면 플레이어에게 의미있게 다가갈 수 있을까 항상 고민합니다. 작곡가는 보통 크리에이티브 디렉터, 오디오 디렉터와 함께 이야기, 감정, 주제,...

Wwise를 사용하여 UE 게임에 두 개의 오디오 장치 구현하기

먼저 제 소개를 해드릴게요. 저는 에드 카신스키(Ed Kashinsky)이며 러시아 상트페테르부르크 출신 사운드 디자이너 겸 음악가입니다. 현재 저는 아주 흥미롭고 독특한...

UI 설계 관점에서 UI 오디오 접근하기 - 제 1부

어떤 게임에서는 사용자 인터페이스가 플레이어의 전체 경험에 궁극적으로 영향을 거의 미치지 않습니다. 수많은 모바일 게임과 같이 어떤 게임에서는 거의 전체 게임플레이 동안 UI를...