안녕하세요, 머더러스 퍼수츠의 대화와 대사 시스템의 제 2부로 다시 돌아온 제이미입니다.
제 1부를 아직 보지 않으셨다면 여기를 클릭하여 읽어주세요!
제 1부에서는 게임에서의 심즈 언어(Simlish) 사용에 대한 저희의 생각과 이 시스템을 위한 편집과 처리 과정을 함께 살펴보았습니다. 이제는 저희가 사용한 미들웨어 솔루션인 Wwise에서 이 시스템이 작동하는 방식을 살펴봅시다. 먼저 다음은 전반적으로 어떤 것들이 담겨있는지 간단히 확인할 수 있는 대화 컨테이너의 계층 구조입니다.
그리고 가장 위에는 VOX_CharConvo라는 Switch Container가 있습니다. 이 컨테이너는 어떤 캐릭터가 말하도록 설정하는 데에 사용됩니다. 그리고 지명된 Switch Container는 어떤 타입의 심즈 언어나 대화 오디오를 재생해야 하는지를 선택합니다. 이 예시에서는 깡패(Brute)의 오디오가 담긴 VOX_BruteConvo가 펼쳐져 있습니다. 각 대화 타입은 Random Container 안에 담겨 있어서, 오디오 이벤트가 트리거되면 사운드 그룹에서 오디오 파일을 랜덤으로 선택할 수 있게 해줍니다.
하지만 위에 있는 참조 이미지에서 예상할 수 있듯이, Neutral, Positive, Negative 컨테이너는 약간 다르게 구성되어 있습니다. 이 세 가지 컨테이너는 파일을 랜덤으로 선택할 뿐만 아니라 대화의 흐름을 잘 유지하면서 다양한 길이와 단어의 심즈 언어 구문을 선택할 수 있어야 합니다. 구문 타입이나 단어를 랜덤으로 선택하는 것은 Random Container를 사용하여 꽤나 쉽게 작업할 수 있었습니다. 실제 대화의 흐름의 경우 조금 더 세분화된 작업이 필요했습니다. 다음은 깡패(Brute)의 Neutral Convo 컨테이너의 Property Editor 입니다:
여기에서는 몇 가지 작업이 진행되고 있습니다. 먼저 Initial Delay 설정을 살펴봅시다.
이 설정은 반복 재생 애니메이션의 기본 시작 상쇄값으로 사용되며, 랜더마이저는 값을 선택하는 데에 사용됩니다. 꽤 간단하죠.
다음으로 Play Type을 살펴볼까요.
이 설정은 Neutral 컨테이너에서 6개의 가능한 옵션 중 하나를 랜덤으로 선택하는 데에 사용됩니다. 일반적으로는 이전에 재생된 오디오 클립을 반복하지 않도록 하여 "기관총"같은 반복 효과를 방지하려고 할겁니다. 하지만 여기서는 이미 사용되었더라도 모든 하위 컨테이너가 선택될 수 있도록 해야 합니다. 이렇게 하면 각 타입 간의 전환 효과가 가려져서 대화를 더욱 동적이고 다양하게 만들 수 있게 해줍니다.
Play Mode는 Loop Continuously(무제한 반복)으로 설정되어 있습니다.
이렇게 설정하면 다른 사람이 말하기 시작하거나 주변에서 살해된 사람에 대해 반응하는 등 대화를 중단하라는 이벤트가 트리거되기 전까지 캐릭터가 계속해서 말하게 됩니다. 아무리 사령관(Admiral)이 장황한 독백을 할 수 있는 캐릭터라 한들 한 사람의 독백만 들리도록 하고싶지 않으니까요. Transition Delay는 0~0.4초 사이로 설정되어 랜덤 상쇄값이 적용되면 캐릭터 간에 구문 사이의 자연스러운 간격 외에 좀 더 공간을 줄 수 있습니다.
먼저 각 클립 간을 크로스페이드하는 방법을 시도해봤지만, 실제로 자연스럽게 대화하는 것이 아니라 오디오가 스트리밍되는 것처럼 느껴지더라구요. 또한 심즈 언어의 각 Question(질문) 구간 끝에는 배우의 억양이 섞인 약간의 무음이 있어서 약간의 공간을 통해 대화의 흐름을 더욱 자연스럽게 만들어줍니다.
마지막으로 가중치를 살펴봅시다.
캐릭터들은 심즈 언어를 약간 더 말하도록 가중치가 설정되어 있습니다. 실제 단어를 완전히 제거하지는 않으면서 각 단어가 좀 더 확연하게 들리며 여러 단어가 나열될 가능성을 최소화하기 위해서죠.
재생 설정 외에 각 Random Container에는 Wwise의 Wwise Silence를 사용하는 두 개의 무음 오디오 클립이 있습니다. 이 클립 또한 이 클립이 담겨 있는 컨테이너에 따라 길이가 달라지며 말 사이에 추가적인 간격을 제공하여 피로함을 줄여주고 대화의 흐름을 더 자연스럽게 만들어줍니다. 여러 무음 클립이 연달아 트리거될 수도 있는데, 괜찮습니다. 모든 사람이 길게 말할만한 체력이 있는 것이 아니니까요.
다음 동영상에서 한 캐릭터의 전체 구조가 Wwise에서 어떻게 들리는지를 들어보세요.
오디오만 따로 들어봐도 꽤 괜찮게 들리죠. 하지만 게임에서는 어떻게 들릴까요?
아, 더 괜찮게 들리네요. 걸어가면서 무리지어 있는 사람들로부터 들리는 작은 대화들이 게임 세계를 더 활기차고 사람들이 숨쉬는 세상인 것처럼 만들어주죠. 저희는 또한 Wwise의 Shareset 기능을 사용해서 거리에 따라 소리가 변하는 방식을 제어했습니다. Shareset는 거리에 따른 소리의 감소나 감쇠값을 각 사운드에 따로 설정하는 대신 그룹으로 묶여진 사운드에 연결하는 방법입니다. 다음은 Conversation Shareset의 모습입니다.
곡선은 볼륨 감소를 제어하며 거리가 멀어질수록 고/저대역 필터링을 적용합니다. 초록색 곡선은 Spread이며, 사운드가 차지하는 음장(soundfield)을 결정합니다. 이 값이 최소일 경우 점원이 되어 사운드가 들려오는 위치를 쉽게 결정할 수 있습니다. 이 값이 최대일 경우 리스너로부터 소리의 위치에 상관 없이 음장을 채웁니다. 저는 이 Spread 값을 75%로 설정해서 누군가의 옆에 있을 경우 스피커에 방향성을 어느 정도 제공하는 동시에 음장을 채움으로써 그 사람과 플레이어 간의 근접성을 강조하여 여러분이 대화에 속해있는 듯한 느낌을 받을 수 있도록 해주었습니다.
또한 소리가 향하는 방향에 따라 볼륨을 감쇠하고 필터를 적용할 수 있는 원추(cone) 감쇠 기능도 사용했습니다. 사운드가 사람의 몸의 앞쪽에 있는 입에서 나오기 때문에 그 사람 뒤에 있다면 소리가 약간 작게 들려야 하겠죠. 아래 동영상에서 간단한 데모를 확인해보세요 (오른쪽 모서리에서 변경 사항을 확인하세요):
게임에서의 재생도 상대적으로 간단합니다. 적어도 제 쪽에서는요. 프로그래머분들이 제가 Wwise 이벤트를 애니메이션에 연결할 수 있으며 반복 재생 애니메이션이 별도의 시작 애니메이션을 가질 수 있게 하여 계속해서 오디오를 다시 트리거하지 않도록 하는 맞춤 Anim Event를 Unity에서 제작해주셨습니다. Wwise 이벤트에는 대화의 타입을 선택할 수 있는 Switch 동작과 VOX_CharConvo 컨테이너를 재생할 수 있는 Play 동작이 담겨 있습니다. 캐릭터 선택은 코드를 통해 실행됩니다. 또한 모든 대사 타입에 아주 약간의 페이드 아웃이 있는 일반적인 Stop 이벤트를 사용해서 캐릭터가 이동하거나 다른 애니메이션으로 전환 (예: 공격)할 때에 트리거합니다. 근사하게 보이지는 않지만 잘 작동된답니다.
Anim Event는 문자열 인자를 통해 실행됩니다. 이 경우 Wwise 이벤트 이름을 AKSoundEngine.PostEvent 호출 안에서 사용합니다. 저희는 이동을 제외한 모든 애니메이션에 이 기능을 사용했으며, 필요한 모든 동작을 애니메이션 타임라인에 여러 Anim Event로 흐트려놓는 대신 하나의 Wwise 이벤트 안으로 넣었습니다. 여러 Anim Event를 사용했을 때 속도 저하나 오작동이 발생하고 전반적으로 신뢰도가 떨어져서 Audiokinetic분들이 한 개의 이벤트를 사용하는 방식으로 전환해보라고 해주셨는데 정말 좋은 해결책이었습니다 (맥스님 고맙습니다!). 간단한 예시로 Bludgeon Attack의 이벤트를 살펴봅시다. 이 이벤트에는 14개의 Action이 있습니다.
이쯤에서 마무리할까요. 게임에서 음향은 때때로 블랙 박스와 같이 느껴질 수 있죠. 이렇게 '비하인드 씬'을 함께 살펴보면서 저희 작업 과정을 이해하고 여러분의 귀에 소리가 들리기까지 어떤 작업이 필요한지 알아보는 시간이 되었으면 합니다! Wwise 자체에 관심이 있으신가요? Wwise는 무료로 다운로드할 수 있을 뿐만 아니라 수많은 튜토리얼과 리소스가 제공된답니다. 여기에서 다운로드해보세요.
Unity와 함께 작업해보려면 베락 닐 보야(Berrak Nil Boya)의 동영상을 찾아보세요. Unity 자체 튜토리얼부터 시작하여 아주 흥미로운 것도 다뤄줍니다. 저희가 작업했던 것과 레이아웃이 조금 바뀌었을 수 있지만, 여전히 모든 것들이 동일한 방식으로 작동됩니다!
그리고 저희 배우분들에게 정말 큰 감사의 말씀을 전하고 싶습니다. 저희 배우들을 꼭 검색해보세요:
Ally Murphy
Amelia Tyler
David McCallion
Jay Britton
Kenny Blyth
Kim Allan
Toni Frutin
Steam(스팀)에서 머더러스 퍼수츠를 플레이해보는 것도 잊지 마세요!
Thanks for reading,
제이미 크로스(JAIME CROSS)
댓글