콘도르 히어로즈 (射雕)의 상호작용 음악 시스템 설계 철학 및 구현

게임 오디오

프롤로그
소개
음악 시스템 개요
콘텐츠
    NPC와 음악의 동기화
        《일전매(一剪梅)》와 같은 사패 음악 랜덤 재생
       
《망해조(望海潮)》음악과 동기화되거나 일시 정지 중일 때 동반되는 허밍 장면의 음악 멜로디
    3D 사패 음악과 2D BGM의 동기화
    BGM과 NPC의 3D 불경 외우는 소리 간 동기화
    실시간으로 변화하는 씬 음악의 전개
    빈번한 전환 없이 자연스럽게 이어지는 지역별 씬 음악 전환 설계
        씬 음악과 무음 구간의 관리
기술적 세부 사항
    Wwise 프로젝트 구성
    악단 음악
    전투 음악
    Conductor를 월드와 연결하기
에필로그

프롤로그

“단순히 배경 음악에만 의존하지 않고, 어떻게 하면 게임에서 몰입감과 현실감을 더욱 깊이 있게 만들 수 있을까?" 이 프로젝트의 음악 총책임자이자 리드 작곡가로서, 이런 질문을 스스로에게 던지며 탐구를 시작하게 되었습니다.

소개

콘도르 히어로즈 (射雕)는 송나라 시대(960 ~1279)를 배경으로 한 중국풍 오픈월드 MMO 게임으로, 김용(Louis Cha)의 무협 소설 '사조영웅전' 의 이야기를 바탕으로 제작되었습니다. 중국 역사에 따르면 송나라는 상업 경제와 문화가 활발했던 번영의 시대로, 음악 또한 다양한 형태로 발전했습니다. 이 시기 가장 인기 있었던 음악의 형태는 '구란와사(勾栏瓦舍)'라 불리는 민간 예술 공간에서 열리던 전통 민속 악단의 공연이었습니다.

또한 연구에 따르면 고대 중국의 일반적인 시(詩)에 비해 사(詞)는 고정된 형식과 운율을 따르기 때문에 음악화에 더 적합하고 효과적인 구조를 가지고 있습니다. (사패(词牌): 고정된 형식과 운율에 따라 시구가 구성되며 리듬과 음운을 결정짓는 구조) 당시 사(詞)는 문화 진흥의 일환으로 널리 활용되었으며, 가사에는 시대의 정치 상황, 문화적 정서, 사회 분위기가 자주 반영되었습니다.

img1

게임 내 중국 민속 음악 악단

그렇다면 이 전통 민속 악단들을 3D 음악으로 '되살리고', 게임 내에 이들을 위한 무대를 따로 구성한 뒤, 게임의 시대적 배경이나 서사와 연관된 사패(词牌)를 바탕으로 새로운 곡을 만들면 어떨까요? 과거 민중의 일상을 재현함으로써, 게임 플레이어와 게임 속 캐릭터 모두가 그 시대로 돌아간 듯한 몰입감을 경험할 수 있을 것입니다.

최종적으로 결정된 중국 전통 악기의 구성은(위 이미지 기준 왼쪽에서 오른쪽 순) 다음과 같습니다: 비리(筚篥), 소(箫), 소차(小镲, 작은 심벌즈), 고금(古琴), 비파(琵琶), 부(缶), 대고(大鼓, 큰북), 완금(碗琴), 파랑고/소적(拨浪鼓/小笛, 쌍둥이 연주), 팽령/고쟁(碰铃/古筝, 쌍둥이 연주), 샤쿠하치(尺八), 방향(方响), 생(笙), 탄판(檀板)이며 추가로 공후(箜篌)와 삼현(三弦)이 함께 연주되기도 합니다.

이 악기들은 모두 Wwise에서 자연스럽게 시뮬레이션된 감쇠 곡선을 적용한 3D로 재생됩니다. 따라서 길을 잃은 플레이어에게는 일종의 '사운드 기반 내비게이션' 처럼 작용할 수 있고, 우연히 이를 발견한 플레이어에게는 이스터에그처럼 느껴질 수도 있습니다.

민속 악단을 구상한 이후에는 이러한 사패(词牌) 기반 노래들을 어떻게 표현할지와 게임 내 재생 로직을 어떻게 설계할지가 핵심 과제가 됩니다. 그리고 궁금증이 생길 수도 있습니다. 예를 들어:

  •  이러한 3D 사패 음악와 2D BGM의 재생 로직이 충돌하진 않을까?
  • 플레이어가 이 악단에 접근하면 BGM은 어떻게 처리될까?
  • 기타 등등.

음악 측면에서 저는 게임 개발 초기 단계부터 전역 음악 시스템 설계 작업에 착수했으며, 전통적인 중국풍 게임 음악의 작곡 방식, 재생 규칙, 표현 형식에서 벗어나기로 마음먹었습니다.

이 글은 앞서 언급한 3D 사패 음악 관련 주제부터 시작합니다. 상호작용 음악 시스템 설계와 오디오 프로그래머의 기술 지원을 중심으로, 아래에 나열된 주제들의 기능을 중점적으로 자세히 설명합니다.

  • 3D 사패 음악과 NPC의 3D 랜덤 허밍 사운드의 동기화
  • 3D 사패 음악과 2D BGM의 동기화
  • BGM과 NPC의 3D 불경 외우는 소리 간 동기화
  • 실시간으로 동기화되는 씬 음악의 동적인 전개
  • 너무 잦은 전환 없이 자연스럽게 이어지는 지역별 씬 음악 전환 설계

음악 시스템 개요

초기 검토 결과, 하나의 Wwise Event를 전역 State나 Switch로 제어하는 일반적인 Wwise 방식은 아래의 요구 사항을 충족하기엔 다소 유연하지 못한 접근이라고 판단했습니다.

  • 다이제틱 음악과 논다이제틱 음악 사이의 뚜렷한 경계가 없어야 합니다. 두 음악 유형은 서로 전환될 수 있습니다. 또한 하나의 테마 안에서도 일부 요소는 다이제틱일 수 있고, 나머지는 그렇지 않을 수 있습니다. 이러한 요소들은 레벨 마크업, 게임플레이 코드, 시네마틱 시퀀스에 의해 제어되어 동적으로 나타하거나 사라질 수 있습니다.
  • 게임은 캐릭터, 장소, 다양한 만남의 기회로 가득찬 넓고 정교한 세계를 갖추고 있습니다. 음악 시스템은 상황에 따라 동적으로 트랙 간 우선순위를 조정하고, 무음 구간을 계획하며, 일시 정지 상태에서도 필요한 동작을 관리해야 합니다.
  • 게임은 소설을 원작으로 하고 있어, 스토리텔링이 매우 중요합니다. 음악과 동기화가 필요한 선형 시퀀스와 시네마틱이 다수 존재하며, 경우에 따라 이들을 비트 단위로 맞춰야 할 때도 있습니다.

명확히 말해, 이러한 시스템을 구현하기 위해서는 최소한 여러 개의 3D 음악 이미터, 콜백, 우선순위 시스템은 물론, 다양한 편집 도구의 지원도 필요합니다. 이 모든 것은 ‘Conductor(지휘) 시스템’이라 부르는 세 가지 핵심 구성 요소로 이루어진 구조로 구현되었습니다.

  1. World Conductor. 데이터 테이블에 정의된 규칙 세트에 따라 음악 테마의 재생을 큐에 설정하고, 우선순위를 지정하며, 스케줄링을 조율하는 전역 엔티티(entity)입니다. 예를 들어, 씬 음악 테마는 일반적으로 다른 테마보다 우선순위가 낮으며, 전투 중에는 일시 중지됩니다. World Conductor는 음악 시스템 외부로 음악 콜백을 전달할 수 있어, 컷씬 등에서 게임플레이와의 동기화에 활용할 수 있습니다.
  2. Music Conductor 는 음악 테마의 제어 흐름을 관리하고 동시에 재생되는 하나 이상의 음악 소스를 조율합니다. 필요에 따라 내부 상태를 유지할 수도 있습니다. 예를 들어, 음악 테마의 마지막 재생 위치를 저장해 두었다가 이후 다시 이어서 재생할 수 있습니다.(예: 더 높은 우선순위의 테마가 재생 요청되어 중단된 경우)
  3. Music Source는 상위 뮤직 컨덕터의 명령을 실행하고, 이를 Wwise API 호출로 매핑하는 엔티티입니다. 각 Music Source는 게임 월드 내 임의의 위치에 배치될 수 있습니다. Music Conductor의 첫 번째 Music Source는 항상 '가이드 트랙'으로 간주되고, 이는 콜백 수집에 사용되며 필요에 따라 다른 모든 소스가 이 트랙에 동기화됩니다.

이 구조는 하위 레벨의 엔티티가 상위 레벨의 내용을 전혀 알지 못하는 단순한 계층형 아키텍처입니다. 또한 Music Conductor와 Music Source는 각각 Blueprint 인터페이스를 구현해야 했습니다. 초기 설정에 다소 어려움이 있었지만, World Conductor의 우선순위 및 스케줄링 방식과 통합된 상태를 유지하면서 음악 재생 로직을 완전히 오버라이드할 수 있었습니다. 예를 들어, 특정 시점에 플레이어가 상호작용할 수 있는 가상 악기를 추가하고, 현재 재생 중인 음악 테마와 조화를 이루는 멜로디를 연주할 수 있도록 했습니다. 실제로 음악을 재생하지는 않지만, 자신이 속한 음악 테마의 현재 코드 진행을 인식하고, 그에 따라 화성에 맞춰 랜덤한 음을 트리거하는 간단한 휴리스틱을 지닌 특수한 Music Source를 만들었습니다.

음악 시스템의 동작은 Unreal의 데이터 애셋과 데이터 테이블을 통해 구성됩니다. World Conductor가 구현 세부 사항을 게임플레이 코드와 분리해주기 때문에, 시네마틱 및 대사 시스템과의 통합, 디버그 UI 구현, 레벨 마크업 액터 추가 작업 모두 수월하게 진행할 수 있었습니다. World Conductor의 상태 머신은 음악 제어 요청이 어디서 발생하든 관계없이 모든 전환을 동적으로 처리합니다. 여기에 추가로 구축한 흥미로운 시스템 중 하나는 ‘Conductor Sequencer’ 입니다. 간단히 말해, World Conductor에 전달되는 명령을 트래커(tracker)처럼 순차적으로 구성할 수 있는 시스템으로 음악이 엄격한 제어 흐름을 따라야 하는 짧은 스크립트 시퀀스 상황에서 유용하게 활용되었습니다.

콘텐츠

img2

NPC와 음악의 동기화

《일전매(一剪梅)》사패 음악을 랜덤하게 부르다

이 가사는 장면 묘사를 통해 다양한 감정을 불러일으킵니다. 소박하면서도 서정적이고 연민이 느껴지는 장면을 묘사하고 있습니다. 다음은 핵심 디자인 요소입니다:

  • 민중들이 따라 부르기 쉽고 귀에 익기 쉬운 멜로디입니다.
  • 어린 아이들 NPC도 따라 부르기 적합하죠.
  • 중국 전통 악기의 정교한 질감은 피하고 단순함을 추구합니다.

플레이어와 NPC 캐릭터의 허밍은 사패 음악와 동기화되어 랜덤하게 트리거됩니다. 이를 위해 성우들에게 직접 노래 연기를 요청했습니다.

아래 게임 캡처에서는 악기와 보컬을 정원 곳곳에 배치해 '이 정원 주변에 사는 주민들은 종종 모여 악기를 함께 연주하고 노래한다'는 설정을 재현한 것입니다. 심지어 연을 날리는 아이들(NPC)도 흥얼거리며 동참합니다. 또한 대대로 전해 내려오는 음악 문화를 담기 위해 이 지역에 소박한 정취를 더했습니다.

img3

각 모델들이 가까이 배치되어 있기 때문에, 플레이어는 어디로 이동하든 다양한 방향에서 동기화된 음악 스템을 들을 수 있습니다.

《망해조(望海潮)》일시 정지 중이거나 음악과 동기화되어 동행 캐릭터가 씬 음악 멜로디에 맞춰 허밍하는 장면

대부분의 경우, 플레이어를 따라다니는 NPC는 전투 중에만 상호작용합니다. 하지만 제 디자인 철학에서는, 플레이어와 동행하는 NPC는 끝까지 아이로 남아있으며, 가끔 멜로디를 흥얼거리거나 장난치는 모습에 현실감을 더할 수 있도록 약간의 '생동감'을 담기로 했습니다.

아래 게임 캡처에서는 동생이 사패 음악의 한 소절을 가끔씩 랜덤하게 흥얼거리는데 정확한 박자에 완벽하게 맞춰서 부른다는 것을 알 수 있습니다.

img3.5

3D 사패 음악과 2D BGM의 동기화

마을에서는 한 악단이 지역의 배경 음악과 동기화된 곡(예:《무제(无题)》)을 연주할 수 있습니다. 하지만 이때 '배경 음악(BGM)과 충돌하지는 않을까?' 하는 우려가 생길 수도 있습니다.

이 경우에는 다음과 같은 디자인 원칙을 따랐습니다.

  • 사패 악단 연주의 재생 시간 제한
  • 같은 시간대에 사패 음악과 BGM이 동기화되어 함께 재생
  • BGM은 사패 음악의 템포와 악기 구성을 바탕으로 작곡하여, 두 음악이 자연스럽게 혼합되어 서로 섞일 수 있도록 디자인
  • 거리 기반 BGM 볼륨 제어

요약하자면, 플레이어가 이 3D 오브젝트에 다가가면 BGM의 볼륨이 점차 줄어들고, 사운드의 초점이 이 3D 오브젝트로 전환되도록 구성했습니다. 더 나아가, 두 곡의 속도, 조성, 화성 진행을 완전히 동일하게 하여 플레이어는 '갑작스러운 음악 전환'을 경험하지 않고 두 곡이 자연스럽게 어우러지는 느낌을 받게했습니다. 그리고 플레이어가 해당 위치를 벗어난 후에도 각각의 곡은 독립적으로 존재할 수 있도록 디자인했습니다. 음악 간 전환이 매우 자연스러워서 집중하여 듣지 않으면 알아차리기 어렵고, 다이제틱 음악과 논다이제틱 음악 간 경계 역시 모호해집니다.

유사한 동기화 규칙은 게임의 다른 여러 위치에도 설계되어 있습니다.

img4

BGM과 NPC의 3D 불경 외우는 소리 간 동기화

링취안(霊泉寺)은 역사적인 불교 사찰 중 하나로, 게임 내에서도 중요한 위치를 차지하고 있습니다. 그 신성함 때문에 기존처럼 테마 배경 음악에만 의존해 고요하고 엄숙한 분위기를 연출하는데 의존하고 싶지는 않았고, 대신 몇 가지 새로운 요소를 도입하고자 했습니다. 사운드 측면에서, 사찰의 스님들이 흔히 두드리는 목탁과 종소리 외에 특별한 요소가 더 있을까요?

그래서 저는 스님들이 매일 외우는 불경 소리를 아이디어로 떠올렸습니다.

녹음 엔지니어에게 중국의 한 불교 사찰을 방문해 스님들이 불경 외우는 소리를 녹음하고 샘플을 수집해 달라고 요청했습니다. 녹음본을 받은 후 다음의 단계를 진행했습니다:

  • 불경 소리의 음조를 음악의 조성과 동기화
  • 불경 소리의 템포를 음악의 템포와 동기화
  • 재생 중인 음악의 다운비트에 맞춰 불경 소리를 랜덤으로 트리거

img5

실시간으로 변화하는 씬 음악의 전개

어떤 플레이어는 아침부터 정오까지 또는 오후부터 저녁까지 게임을 플레이합니다.(즉, 여러 시간대에 걸쳐 게임플레이를 할 수 있다는 의미). 게임 내 시간은 플레이어의 실제 시간과 동기화되기 때문에, 이런 유형의 게임에서는 일반적으로 시간대별로 다른 음악을 재생하는 방식이 사용됩니다. 하지만 눈에 띄는 음악 전환 방식은 피하고자 했습니다. 그래서 동일한 트랙 안에서 시간대에 따라 자연스럽게 교체되고 변화하도록 하여, 씬 음악 테마가 전체적으로 다이내믹하게 전개되도록 디자인했습니다.

  • 음악이 아침, 오후, 저녁 세 가지 시간대에 맞춰 바뀌도록 설정
  • 모든 음악 변화는 동일한 트랙 내에서 스템 단위로 이루어지도록 설정
  • 다이내믹 스템을 유지하기 위해 '연속성'과 '다양성'을 모두 고려
  • 특정 시간대에는 음악의 전체 버전이 재생되도록 설정

마찬가지로 플레이어는 '음악이 전환되었다'는 흔적을 느끼기보다는, '이 장면의 음악이 오후가 되니 더 풍성해진 것 같다'거나 '저 장면의 음악은 저녁이 되니 희미해진 것 같다'는 식의 느낌을 받게 됩니다.

 

  

img6

다양한 지역 간 씬 음악의 부드러운 전환 설계

위 내용은 플레이어가 같은 씬에서 활동하거나 조건이 고정되어 있을 때 음악에 나타나는 상호작용적 변화를 설명합니다. 또한, 스토리 진행이나 자유 탐험을 통해 플레이어가 한 장소에서 다른 장소로 이동하거나 텔레포트할 때를 고려해 음악 로직에 특정한 설계를 적용했습니다.

간단히 말해 저는 플레이어가 새로운 지역에 진입할 때마다 음악이 즉시 바뀌는 경험을 주고 싶지 않았습니다. 이러한 반복은 결국 플레이어에게 지루함과 피로감을 줄 수 있습니다. 어떤 플레이어는 실수로 특정 지역에 자주 들어갔다가 곧바로 다시 나올 수도 있기 때문에, 버퍼 인식 시간 및 '공백 구간(blank interval)'을 도입하는 것이 좋습니다. 예를 들어:

일반 씬의 경우:

  • 플레이어가 새로운 지역에 일정 시간 이상 머물렀다는 것을 시스템이 인식하면 현재 음악 동작을 활성화합니다.
  • 일정 시간 동안 무음 간격이 유지된 후 새로운 음악 동작을 활성화합니다.

일부 특수한 씬의 경우:

  • 현재 재생 중인 음악의 일부 악기를 점차 줄여나가면서 음악을 전환하지 않고 계속 재생합니다.
  • 플레이어가 새로운 지역에 진입하면 해당 지역 전용의 짧은 음악 스팅어가 트리거됩니다.

콘도르 히어로즈와 같은 오픈 월드 게임에서는 플레이어가 항상 음악을 듣고 싶어하지 않을 수도 있습니다. 음악의 약 30~40%를 무음 구간으로 구성하면 플레이어의 청취 피로를 줄이는 데 도움이 됩니다.

씬 음악과 무음 구간의 관리

레벨 마크업은 이 지역에서 어떤 음악이 재생되어야 하는지를 'World Conductor'에 알려주는 음악 볼륨을 정의할 수 있습니다. 관례적으로 이 음악은 루프되지 않으며, 일정 시간이 지난 후 다시 재생되기 전까지 무음 구간이 이어지도록 했습니다. 이러한 무음 구간 동안 음악 시스템은 캐릭터가 직전에 재생된 음악의 멜로디나 모티프를 허밍하거나 휘파람을 부는 등의 특별한 보이스 이벤트를 재생할 수 있도록 게임에 알립니다.

World conductor는 또한 현재 게임 시간을 인식하고 테마의 아침, 낮, 밤 버전을 스케줄에 따라 재생할 수 있습니다. 또한, 어떤 씬 음악도 재생되지 않는 '무음 구간'을 설정할 수 있습니다.

플레이어가 특정한 장소에 접근하면 그 장소의 중요성을 강조하거나 앞으로 벌어질 상황에 집중할 수 있도록 지역 음악이 자연스럽게 페이드아웃되는 제외 구역(Exclusion zone)을 설정할 수 있습니다.

지역 음악은 일반적으로 우선순위가 가장 낮기 때문에 전투나 다른 이벤트가 발생하면 중단될 수 있습니다. 이 경우 World Conductor는 현재 재생 중인 테마를 일시 정지한 뒤 더 높은 우선순위의 테마가 명시적으로 중단되면 다시 재개합니다. 참고로, 일시 정지된 Event도 Wwise에서는 여전히 활성 보이스로 처리되기 때문에 Auto-ducking에 영향을 미칩니다. 

‘World conductor’는 Wwise에서 제공되는 전환 방식과 유사한 복잡한 전환도 수행할 수 있으며, 음악 마디 단위의 동기화나 전환을 자연스럽게 감추기 위한 스팅어 재생도 지원합니다. 이러한 전환은 데이터 테이블에서 설정합니다.

기술적 세부 사항

Wwise 프로젝트 구성

게임을 위해 작곡된 각 음악 테마는 서로 독립적인 계층 구조를 갖습니다. Work Unit은 전투, 씬, 선형 시퀀스 등 음악의 용도별로 구성되어 있습니다. 각 유형은 개별 버스로 라우팅하여 믹싱을 용이하게 하고, 필요에 따라 선택적으로 Auto-ducking을 적용할 수 있습니다.

img7

각 음악 테마를 서로 분리한 결과, 게임 엔진 측에서 전환, 스팅어, 페이드 인/아웃, 무음 구간, 동기화 등을 직접 관리해야 하여 구현 복잡도가 높아졌습니다. 마지막 두 요소(무음 구간과 동기화)는 특히 중요했습니다. 하나의 Playing ID로 음악을 관리하는 방식으로는 대응하기 어려운 특별한 요구 상황이 있었기 때문입니다. 이에 대해서는 뒤에서 더 자세히 설명하겠습니다.

요약하자면, Wwise 프로젝트를 간소화하고 복잡한 로직을 코드에서 처리하도록 했습니다. 음악의 구현 방식은 종류에 따라 달라지며 경우에 따라 큰 차이를 보이기도 합니다. 예를 들어, 어떤 테마는 일반적인 Switch Container 구조를 따르지만, 다른 테마는 루프 처리를 코드로 제어하기도 합니다. 음악 시스템의 관점에서 보면, 서로 다른 종류의 'Conductor' 클래스가 구현되어 있으며 이 중 몇 가지를 아래에서 소개하겠습니다.

악단 음악

다이제틱 음악은 게임 내에서 특정 시간에 노래를 연주하는 가상 악단으로 구현되어 있습니다. 플레이어는 청취 모드에 진입할 수 있는데 이때 카메라는 캐릭터를 중심으로 이동하며 주변을 둘러봅니다. 요구 사항을 자세히 설명하겠습니다.

  • 각 악기와 음성은 씬에 개별적으로 배치할 수 있습니다.
  • 음악 테마는 루프되지 않습니다.
  • 비록 1인 플레이어 게임이지만, 플레이어는 지정된 시간에 악단 연주를 듣도록 설계되어 있어, 연주 중간에 게임에 진입하더라고 누구나 거의 동일한 음악을 들을 수 있습니다.

월드 내 여러 위치에서 다이제틱 음악을 완벽하게 동기화하는 방법으로는 두 가지가 있습니다. 하나는 3D Aux 버스 센드 풀을 관리하는 것이고, 다른 하나는 각 악기를 개별 Event로 재생하는 방식입니다. 저희는 이 중 후자를 선택했습니다. 사실 왜 그렇게 했는지는 지금은 기억이 잘 나지 않습니다. 관찰 결과, AK::SoundEngine::RenderAudio 호출 이전에 게시된 동일한 길이의 Event 그룹은 영구적으로 동기화된 상태로 재생된다는 것을 확인할 수 있었습니다. 단, 이 Event들이 완전히 동기화되어 재생되기 위해서는 스트리밍, 가상화, 빠른 이동 테이블(Seek Table) 설정이 모두 동일해야 하며, WAAPI를 활용해 프로젝트 전반에서 이를 일관되게 관리했습니다.

또한 Wwise의 SeekOnEvent 액션에는 여러 제약이 있었지만, 악단의 재생 위치를 동기화하려면 이것을 사용할 수밖에 없었습니다. 가장 중요한 제약은 루프되는 Event에 Seek 기능을 사용할 수 없다는 점입니다. 그래서 모든 악단 악기들은 동일한 길이의 원샷(One-shot)으로 구성하였으며, 필요한 경우 'Conductor'가 이를 루프시키도록 했습니다.

전투 음악

게임에는 보스전과 미니 전투, 두 종류의 전투 음악이 있습니다.

먼저 보스전부터 설명하겠습니다. 이 전투의 Conductor는 Switch Container와 Transition을 활용한 일반적인 Wwise 구현 모델을 따릅니다. 보스전은 항상 정해진 순서대로 한 방향으로 진행됩니다. 예를 들어, 시작 → 1 단계 → 2 단계 → 승리 또는 실패 순입니다. 이를 위해 범용적인 Music_Part Switch를 구현하고, 각 숫자 값의 의미에 대한 규칙을 정해 두었습니다.

보스전과 달리 미니 전투에는 단계가 없으며, 음악은 무한 루프로 설정됩니다. 곡의 구성 면에서, 음악은 특징이 뚜렷한 여러 덩어리(chunk)로 나뉘어 있으며, 이들은 짧은 전환으로 서로 연결됩니다. 음악은 페이드인으로 시작하고 페이드아웃으로 멈춥니다. Conductor는 재생 위치를 추적하여 음악이 중단된 지점부터 다시 시작되도록 했습니다.....만, 현실은 그렇게 간단하지 않았습니다. 저희의 경우, 음악은 중단되었던 지점 다음에 오는 마커부터 다시 시작됩니다. 이 마커들은 우연히도 각 덩어리(chunk)의 전환이 시작되는 지점에 배치되어 있었습니다. 이러한 전환 지점에서 음악을 페이드인으로 시작하면, 각 전투가 반복적이고 중요하지 않다는 느낌이 강해집니다.

img8

 

이 음악은 빠른 이동(Seek)이 필요하기 때문에 루프 처리는 Conductor가 담당합니다.

페이드인이 나온 김에 말하자면, Wwise는 코드에서 이를 제어할 수 있는 API를 제공하지 않습니다. 이 문제는 다음과 같은 순차 처리를 통해 우회할 수 있습니다: 이벤트 게시 → 즉시 일시 정지(pause) → RenderAudio가 호출될 때까지 한 프레임 대기 → 지정된 전환 시간과 함께 재개(resume) Render Audio 관련 한 프레임 대기를 하지 않는다면, Wwise는 해당 명령 시퀀스를 하나로 묶어 처리하여 Event가 재생 중이지만 일시 정지된 상태라고 잘못 인식하게 됩니다. 정확한 이유는 기억나지 않지만, 결국 페이드를 위해 보간 시간 설정이 가능한 RTPC 방식으로 해결했습니다.

Conductor를 월드와 연결하기

지금까지는 다양한 종류의 음악 테마가 내부적으로 어떻게 작동하는지에 대해 설명했습니다. 이제 이 시스템을 통해 음악과 다른 게임 시스템이 어떻게 정교하게 상호작용하는지를 보여주는 몇 가지 예시를 소개하려 합니다.

  1. 어떤 레벨에 등장하는 사원에는 Wwise 콜백에 반응해 희미한 소리를 재생하는 제단이 있습니다. 
  2. 야외를 돌아다니다 보면, 플레이어는 작은 마을을 발견할 수 있는데 이곳의 한 캐릭터는 현재 재생 중인 배경 음악과 완벽히 동기화된 노래를 부릅니다.
  3. 북을 연주하는 사람은 플레이어의 주위를 특정 장소로 유도합니다. 그 장소에 도달하면 컷씬이 재생되며 전투 대회 장면이 시작됩니다. 이 다이제틱 드럼 루프는 논다이제틱 시네마틱 음악으로 전환되며 마지막에는 징소리를 울리며 마무리됩니다. 징소리는 전투의 끝을 알리는 역할을 하기 때문에 징을 치는 순간과 비주얼이 완벽히 동기화되는 것이 중요했습니다. 이를 위해 'World Conductor’에서 Level Sequence Player로 콜백을 보내고, 이를 수신하면 다음 시네마틱 컷으로 전환되도록 구현했습니다. Wwise Music Cue에 특별한 이름을 지정해 콜백을 발생시켰습니다.

모든 예시에서 이 기능은 Conductor API를 통해 구현되었으며, 게임 코드는 Wwise에 대해 전혀 알 필요가 없었습니다.

에필로그

이 글에서는 저희의 'Conductor' 상호작용 음악 시스템에 대해 비교적 체계적으로 소개하며, 이 시스템이 플레이어의 몰입감, 감정적 상호작용, 전반적인 게임 경험을 향상시키는 데 핵심적인 역할을 했음을 설명했습니다. 저희는 어떤 유형의 배경 음악이든 단순히 '감정적'인 느낌을 주는 데 그치지 않고, 주어진 맥락에서 '이성적'으로도 작동하도록 만들기 위해 많은 노력을 들였습니다. 개발하는 과정이 저희에게 흥미로웠던 것처럼, 여러분께도 흥미롭게 느끼졌기를 바랍니다.

치메이 시(Qimei Shi) & 유진 체르니(Eugene Cherny)

치메이 시(Qimei Shi) & 유진 체르니(Eugene Cherny)

치메이 시 (음악 작곡가)

게임 업계에서 7년간 활동한 음악 수퍼바이저, 시니어 게임 음악 작곡가, 상호작용 음악 시스템 디자이너입니다. 창의적이고, 혁신적이며, 완벽을 추구합니다.

https://www.sqmmusic.com/

LinkedIn

유진 체르니 (오디오 프로그래머)

현직 게임 오디오 프로그래머입니다. 미술과 학문 분야에서도 어느 정도 경험이 있습니다.

https://eugn.ch/

LinkedIn

댓글

댓글 달기

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

다른 글

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

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

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

‘잇 테이크 투(It Takes Two)’ 사운드 비하인드 스토리 | Hazelight 오디오 팀과의 Q&A

Hazelight Studios(헤이즈라이트 스튜디오)에서 제작한 잇 테이크 투(It Takes Two)는 분할 스크린 액션 어드벤처 플랫폼 협동 게임입니다. 이 게임은 엄청나게...

5.4.2022 - 작성자: Hazelight (헤이즐라이트)

노 스트레이트 로드(No Straight Roads)의 음악적 게임 세계 설계하기

안녕하세요, 게임 오디오 여러분들! 저희가 Wwise와 Unreal Engine을 사용해서 '노 스트레이트 로드(No Straight Roads, NSR)'의 극도의 스타일링을...

29.3.2023 - 작성자: Imba Interactive (임바 인터랙티브)

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

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

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

어쌔신 크리드 발할라(Assassin’s Creed Valhalla) | 샌드박스 음악 시스템

어쌔신 크리드 발할라(Assassin’s Creed Valhalla)는 규모가 거대한 프로젝트였습니다. 어쌔신 크리드 프랜차이즈 중 가장 큰 맵 중 하나였고, 오픈 월드 장르에서도...

27.11.2024 - 작성자: 알렉상드르 푸아리에(Alexandre Poirier)

Audiokinetic Theater 발표 세션 요약 | GDC 2024

GDC 2024에서 개최된 Audiokinetic Theater에서는 많은 오디오 전문가들을 초대해 소중한 정보들을 나눌 수 있어 매우 영광이었습니다. 첫 번째 영상들이 올라와...

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

다른 글

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

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

‘잇 테이크 투(It Takes Two)’ 사운드 비하인드 스토리 | Hazelight 오디오 팀과의 Q&A

Hazelight Studios(헤이즈라이트 스튜디오)에서 제작한 잇 테이크 투(It Takes Two)는 분할 스크린 액션 어드벤처 플랫폼 협동 게임입니다. 이 게임은 엄청나게...

노 스트레이트 로드(No Straight Roads)의 음악적 게임 세계 설계하기

안녕하세요, 게임 오디오 여러분들! 저희가 Wwise와 Unreal Engine을 사용해서 '노 스트레이트 로드(No Straight Roads, NSR)'의 극도의 스타일링을...