menu
 

우주의 침묵 속 사운드 | 하드스페이스: 쉽브레이커의 시스템

게임 오디오

하드스페이스: 쉽브레이커(Hardspace: Shipbreaker)는 최근 Playstation 5, Xbox Series S/X 및 PC에서 출시된 1인칭 무중력 우주선 해체 게임입니다. 노동, 부채, 자본주의에 대한 풍자 게임이죠. 플레이어가 거대한 미래 대기업에서 일하는 일상을 체험하는 몰입형 시뮬레이션의 형태로 진행됩니다. 플레이어는 지구 궤도를 떠다니며 크고 작은 우주선을 재활용하는 임무를 수행하면서, 연료 시스템이나 원자로를 잘못 다뤄서 폭파되는 일이 없도록 조심해야 합니다. 어렵고 위험한 일이죠. 하지만 이상하게도 재미있습니다.

HSSB-Image01-InGame-POV

하드스페이스: 쉽브레이커에서의 회수 구역 모습

제가 2017년 이 프로젝트에 처음 참여했을 때는 지금보다 훨씬 작고 단순한 게임이었지만 그때도 핵심 골자는 이미 확립되어 있었습니다.

  • 시뮬레이션을 우선시할 것. 가상의 미래 작업을 시뮬레이션합니다. 플레이어가 우주선 해체 작업을 실제로 수행하는 느낌을 받아야 합니다. 
  • 물리 기반 게임플레이. 만족스러운 물리 시뮬레이션을 통해 대부분의 게임플레이를 생성하여 재미있는 상호작용과 실험을 유도합니다.
  • 절단 게임플레이. 복잡하면서 만족스러운 절단 메커니즘을 통해 게임플레이에 깊이를 더합니다. '절단 도구'를 사용하여 사물을 작은 조각들로 잘라낼 수 있습니다. 
  • 블루칼라 느낌. 블루칼라, 즉 공사장에서 작업하는 노동자들 분위기가 매우 중요합니다. 장비는 물려받은 것이며 가끔 오작동하기도 합니다. 예전처럼 잘 작동하는 것이 아무 것도 없죠. 모든 것이 낡고 공장단지같은 느낌을 줘야 합니다. 

저희 팀과 저는 게임 오디오가 이러한 골자들을 제대로 구현하고 최대한 의미 있는 방식으로 스며들었으면 했습니다. 오디오가 시뮬레이션, 물리학, 미적 요소와 깊이 연결되어 플레이어의 행동 및 설정과 조화를 이루면서 완전히 믿을 수 있는 방식으로 반응해야 하죠. 게임이 시뮬레이션을 핵심으로 하고 있기 때문에 오디오가 시뮬레이션된 규칙을 따르도록 하고 싶었습니다. 예를 들어 플레이어가 우주 진공 상태에 있을 경우 공기 중 소리가 없어야 하죠. 공기 중 소리는 가압된 우주선 내부에 있을 때만 존재해야 합니다.

이렇게 '시뮬레이션을 따르려는' 욕구는 곧바로 흥미로운 몇몇 도전 과제를 불러왔습니다.

  • 우주 진공 상태에서 대부분의 시간을 보낼 때에는 훌륭한 사운드 경험을 어떻게 제공할 수 있을까요? 
  • 플레이어가 영역을 가압/감압할 수 있는 경우 '소리가 많음'에서 '소리 없음'으로 전환하는 것만으로는 어떻게 이 전환을 강조할 수 있을까요?
  • 게임에서 사물이 작은 조각들로 잘릴 때 이 물리적 상호작용을 어떻게 잘 들리게 할 수 있을까요? 
  • 장비가 낡아서 금방이라도 고장날 것 같은 느낌을 주면서도 정작 사용할 때에는 만족스럽고 재미있게 만들려면 어떻게 해야 할까요?

많은 고민과 프로토타입을 시도한 끝에 저희는 이러한 질문에 답하면서 게임의 핵심인 시뮬레이션을 지원해주는 독특하며 매력적인 소리풍경을 제공하는 시스템 모음을 개발해냈습니다. 이 블로그에서는 이러한 시스템 중 몇 가지와 Wwise 기능을 사용하여 이 시스템을 현실화시킨 방법에 대해 얘기하겠습니다. 

HSSB-Image02-InGame-Oops

아이고, 저런…

재합성(Resynthesis)

먼저 '재합성' 시스템을 살펴봅시다. 저희는 플레이어가 환경 내 위험 요소의 소리를 들을 수 있었으면 했습니다. 스파크가 튀는 전기 케이블이나 불타는 연료 라인에 너무 가까이 가게 된다면... 딱히 좋을 게 없겠죠. 여기서 즉시 위의 첫 번째 질문에 부딪혔습니다. 진공 상태에서 소리의 작동 방식을 시뮬레이션하고 있는데 플레이어가 이러한 위험 요소를 어떻게 들을 수 있을까요? 간단히 말하면 네, 들을 수 없습니다. 

저희는 게임 디자이너와 협력하여 '재합성(Resynthesizer)'이라는 게임 내 기술을 만들었습니다. 이 기술은 플레이어의 구조복에 부착할 수 있는 가상의 장비죠. 이 장비는 주어진 환경에서 위험 요소를 감지하고 이 위험 요소에 대해 시뮬레이션된 소리를 재생합니다. 이 기술은 게임 내 화폐를 지불하고 업그레이드를 하면 플레이어가 획득할 수 있게 되어있습니다. 또한 기술 자체도 업그레이드할 수 있어서 플레이어가 업그레이드할수록 '재합성'이 작동하는 범위가 점점 더 넓어집니다. 

재합성- 구현

저희는 Wwise에서 위험 요소 FX 액터 믹서에 있는 Wwise Gain Effect를 활성화/우회하는 방식을 사용하여 범위 업그레이드를 다뤘습니다. Distance(거리)에 연결된 RTPC를 사용하여 플레이어가 일정 거리 이상 떨어져 있을 때 Wwise Gain Effect를 사용하여 소리를 차단할 수 있었죠. 이를 통해 가압된 공간에서는 정상적으로 감쇠되지만 감압된 공간에서는 플레이어의 현재 재합성 범위에서만 소리가 들리도록 표준 감쇠를 설정할 수 있습니다.

HSSB-Image03-ResynthDistance

위험 액터 믹서에 있는 Wwise Gain Effect

저희는 State를 사용하여 Effect를 우회하고 활성화했지만 State 변경을 트리거하는 방식은 Wwise의 음악 시스템을 독특한 방식으로 사용하여 실행했습니다. 음악 시스템에는 변수(예: State나 Switch)를 쿼리하고 이 변수의 값에 따라 Event를 트리거할 수 있습니다. 다시 말해 State Group의 한 값을 쿼리하여 그 결과를 사용해 다른 State Group의 값을 설정할 수 있죠. 

플레이어의 현재 재합성 업그레이드 레벨은 Wwise에서 State가 아닌 RTPC로 전송되고 있습니다. RTPC가 전역적으로 설정되었으며 위험 물체가 각자 로컬 RTPC 값을 사용하고 있었기 때문에 RTPC를 직접 사용하여 Wwise Gain Effect를 활성화하는 것은 불가능했습니다. 전역적 RTPC 값을 수신하고 이를 모든 위험 물체가 참조할 수 있는 State 값으로 변환하여 Wwise Gain Effect를 우회/활성화할 수 있어야 했습니다. 다행히 Wwise의 음악 시스템을 사용하여 이를 정확히 수행할 수 있었죠.

먼저 전역적 RTPC에서 대상 값을 선택하는 Switch를 만들었습니다.

Wwise Resynth Global RTPC To Switch

그런 다음 음악 시스템에서 1초마다 반복 재생되는 컨테이너를 만들어 Upgrade_Resynthesizer Switch의 값을 쿼리했습니다. 이 Switch의 값에 따라 무음 Music Segment는 Music Event Cue를 통해 State의 값을 설정했습니다. 

HSSB-Image05-WwiseMusicSystemResynth

그런 다음 이 State를 사용하여 위험 물체에서 Wwise Gain Effect를 활성화/우회했습니다.

HSSB-Image06-WwiseResynthBypassMatrix

물론 이 구현 방식은 상당히 난해하기 때문에 반드시 추천하지는 않습니다. 하지만 코드 지원이 전혀 없고 긴급하게 구현해야 할 기능이 있을 때 Wwise의 시스템이 얼마나 멀리까지 확장될 수 있는지 보는 것만으로도 꽤나 흥미롭죠.

HSSB-Image07-demo_resynthScreen

업그레이드 트리에서 재합성에 대한 플레이어 뷰

재합성 - 사운드

재합성 기능을 구현하면서 직면한 다음 과제는 블루칼라 분위기와 충돌을 일으키지 않는 방식으로 사운드를 좋게 만드는 것이었습니다. 플레이어가 진공 상태에서 위험을 들을 수 있기를 원했지만 재합성된 사운드는 너무 완벽하거나 공기 중 소리와 너무 비슷해서도 안됐죠. 저희는 재합성기가 게임 내 장비라는 허구를 받아들였고, 플레이어의 장비가 낡고 고장나기 직전인 소리를 내야한다고 이미 결정했습니다. 재합성기를 믿을만하도록 하려면 결함이 있고 버벅거리며 삐빅대거나 뚝뚝 끊기기도 하는 소리가 나야 하죠. 

이를 위해 처음에는 Glitchmachines의 Fracture라는 플러그인을 기반으로 한 오프라인 처리를 사용했습니다. 이 플러그인을 Plogue Bidule 안에 호스트하여 모의 랜덤 샘플-앤-홀드 값을 생성하고 이를 Fracture에 전달하여 몇 가지 매개 변수를 조작했죠. 

HSSB-Image08-ReaperPlogueBiduleFracture

위험 사운드는 이 사슬을 통해 오프라인으로 처리되었으며 결함 소리가 꽤 만족스러웠습니다. 

하지만 이 방식은 한 번에 한 사운드가 재생될 때만 작동했죠. 두 개 이상의 사운드가 함께 재생될 때 샘플-앤-홀드 변경의 단계가 동기화되지 않아서 최종 결과가 엉망이 되었고, 더 많은 음원이 추가될수록 상황은 더욱 나빠졌습니다. 오프라인 처리가 효과적이지 않을 것이라는 것이 분명해졌습니다. 이런 종류의 DSP를 재합성된 사운드에 사용하려면 실시간 효과를 재합성된 모든 사운드의 서브믹스에 함께 적용해야 했죠. 

이로 인해 저희는 Pure Data를 사용하여 Heavy 컴파일러를 사용하여 Pd 패치를 플러그인으로 변환하는 커스텀 Wwise 플러그인 제작을 실험하기 시작했습니다. Pd에서 저희는 Fracture에서 구성한 처리와 비슷한 효과를 만들었습니다. 샘플 디그레이더(sample degrader), 스텝 플랜저(step flanger), 마이크로 스터터(micro-stutter), 비프음 생성기(bee-generator)로 구성된 멀티 효과를 만들었죠. 

HSSB-Image09-Pd-Resynth-Main

재합성 Pd 패치 - 상위 레벨

저희는 필요한 매개 변수를 '@hv_param' 노드로서 노출시켜 Wwise에서 매개 변수를 구성할 수 있도록 했습니다. 플레이어가 게임 내 재합성기를 업그레이드하면서 결함과 성능 저하 효과의 강도를 줄이도록 해당 매개 변수에 RTPC를 할당할 수 있었습니다. 

그런 다음 이 처리는 모든 채널에 동일한 처리를 하기 위해 하위 패치에서 수행됩니다. 하위 패치는 위의 이미지에 adc와 dac 노드 사이에서 볼 수 있습니다.

HSSB-Image10-Pd-Resynth-Channel

채널 처리 하위 패치

Heavy를 통한 변환 후 결과 플러그인은 재합성된 모든 사운드를 수신하는 믹서 버스에서 인스턴스화될 수 있으며 모든 샘플-앤-홀드 스테핑이 동기화됩니다. 전체 재합성기 서브믹스에서 단일한 DSP를 실행했으며 그 결과 CPU 사용량이 최소화되었습니다. 정확히 저희가 원하는 바였죠. 

다음은 Wwise에서 실행되는 플러그인이 화염 기둥 반복 재생음을 처리하는 것을 보여줍니다.

그리고 이 동영상은 게임 안에서 실행되는 효과를 보여줍니다.

'Heavy'한 문제들

여기에서 저희가 Heavy로 생성한 플러그인으로 작업하면서 맞닥뜨린 몇 가지 문제에 대해 얘기하려고 합니다. 

먼저 기본적으로 Heavy 라이브러리는 3개 이상의 채널을 지원하지 않습니다. 저희는 이 효과를 서라운드 버스에서 포스트 패닝으로 인스턴스화하고 싶었습니다. 그러기 위해서는 컴파일러가 6 채널을 지원하도록 변경해야 하죠. 이 작업은 hvcc's c2wwise.py 파일에서 빠르고 쉬운 변경으로 수행할 수 있었습니다. 하지만 심각한 안정성 문제를 방지하기 위해 효과를 호스팅하는 버스가 Wwise의 Channel Configuration 드롭다운에서 5.1로 제한되어야 한다는 사실을 발견했습니다. 6개가 넘는 채널의 출력 장치를 사용할 경우 충돌이 날 수 있다는 점을 방지하기 위해서였죠. 

두 번째로, 플러그인 DLL을 저작 도구와 PC 버전 게임에서 사용하도록 생성하는 것은 쉬웠지만 Playstation과 Xbox에 대해 생성하는 것은 그다지 쉬운 과정이 아니었습니다. 다행히 저는 Blackbird 팀에 있는 엔지니어분들에게 부탁하여 Visual Studio에서 대상을 구성하고 콘솔 플랫폼에 필요한 파일을 생성하도록 할 수 있었죠. 코딩 지원이 없을 경우 효과를 콘솔에서 작동하도록 하는 것이 꽤나 큰 작업일 수 있다는 점을 알아두세요.

터치-전송 사운드

다음으로 '터치 전송(Touch Transfer)'이라고 부르는 시스템에 대해 설명해드리겠습니다. 이 시스템은 음원이 플레이어와 닿으면 소리가 들리도록 만들어, 가압되지 않는 환경에서도 사운드가 들리도록 해줍니다. 이 효과는 영화 그래비티(Gravity)에서 영감을 받아 만들었습니다. 쉽브레이커 개발이 시작되기 몇 년 전에 출시됐는데, 여전히 굉장한 영향력을 끼치고 있던 영화였죠. 

'터치 전송' 시스템은 게임 개발 도중 계속해서 입에 오르내리던 '이런걸 할 수 있다면 정말 멋지지 않을까…?' 류의 대화 중 하나에서 탄생했습니다. 가압된 선박 내부에서는 2D 환경음과 3D 환경 이미터로 풍부한 소리 풍경을 만들어내고 해당 구역이 감압될 때 뮤트시켰죠. 이 효과는 그 자체만으로도 훌륭했지만 '소리를 방사하는 사물을 만졌을 때 수트를 통해 이 소리를 들을 수 있다면 정말 멋지지 않을까?'라는 질문이 바로 나왔습니다. 

이 아이디어는 세 가지 보완적인 설계 목표로 구체화되었죠.

1. 선박 내 사물이 그저 빈 다각형 상자가 아니라 시스템과 기계로 구성된 진동하는 실제 사물처럼 현실적으로 만들어 몰입도를 높이기 위함.
2. 플레이어가 선박 주변을 둘러보며 만지고 느끼며 촉각적 체험을 하도록 함..
3. 환경 내 위험 요소를 알려줌.(예: 시끄러운 연료 파이프 및 위잉 소리를 내는 전기 위험)

터치-전송 처리의 후보로 구별한 사운드는 다음과 같습니다.

  • 2D 환경음. 선박 자체 구조를 만지면 이를 통해 2D 환경음을 들을 수 있습니다. 
  • 3D 환경 이미터. 예를 들어 컴퓨터나 연료 파이프같은 물체를 만질 경우 손을 대고 있는 동안 여기서 방출되는 오디오를 들을 수 있습니다. 
  • 물리적 충돌. 충돌하는 물체나 충돌한 표면을 만질 경우 그 접촉을 통해 모든 물리적 임팩트 사운드를 들을 수 있습니다. 

'터치 전송'용으로 설정된 몇 가지 특별한 사운드가 있지만, 대부분은 위의 카테고리 중 하나에 속합니다.

게임에서 터치-전송 사운드가 작동되는 모습

터치-전송 사운드 구성

Wwise에서 저희는 플레이어가 터치-전송 사운드를 생성할 수 있는 세 가지 다른 방법을 나타내는 세 가지 RTPC를 만들었습니다. 손으로 무언가를 만질 때를 위한 RTPC, 신체의 일부로 무언가를 만질 때(예: 사물에 기대어 쉬기)를 위한 RTPC. 그리고 물리적 충돌에 관련된 무언가를 만질 때를 위한 RTPC를 제작했죠. 이는 Wwise에서 각각 'Grab', 'Prox' 'Physics'라는 라벨을 붙였습니다 .

HSSB-Image11-TT-RTPCs

세 가지 터치-전송 RTPC

2D 환경음의 경우 모든 2D 환경음이 담긴 상위 액터 믹서 노드에 RTPC를 구현했습니다. 벽이나 선박의 일부에 닿게 되면 관련된 RTPC를 100으로 올리고 Touch Transfer 버스로 사운드를 전송합니다.

HSSB-Image12-TT-2DAmbs

2D 환경음 노드와 해당 Touch Transfer RTPC

3D 이미터의 경우 조금 더 복잡했습니다. 진공 버전의 사운드는 감쇠가 있는 3D 사운드이지만 사운드를 Touch Transfer 버스로 전송했을 때는 감쇠가 없는 2D로 만들고 싶었기 때문이죠. 이러한 사운드의 경우 가압된 영역에 대한 3D 감쇠 버전과 Touch Transfer RTPC가 올라갈 때 까지 들리지 않는 또다른 2D 버전, 이렇게 두 개의 인스턴스를 재생했습니다. 

HSSB-Image13-TT-3DEmitters

Touch Transfer를 위해 구성된 3D 이미터

물리적 사운드는 2D 환경음과 동일한 방식으로 처리하여 모든 물리적 사운드가 담긴 상위 노드에 RTPC를 구현했습니다. 

터치 전송된 사운드를 'Grab', 'Prox', 'Physics' 카테고리로 구분하니 사운드의 우선 순위를 정하는 믹서 구조를 구성할 수 있었습니다. 손을 통해 전송되는 사운드는 플레이어가 사물에 기대어 있음으로서 전송되는 사운드를 덕킹합니다. 왜냐하면 손의 사용은 긍정적이고 의도적인 동작인 반면 사물에 기대어서 나오는 사운드는 수동적이기 때문이죠. 터치 전송되는 단발성 물리적 사운드는 다른 종류의 터치 전송 사운드를 덕킹하도록 구성되어 있습니다. 이 구성을 사용하면 터치 전송 사운드에 어떤 변화가 생기더라도 항상 플레이어가 느낄 수 있죠. 

HSSB-Image14-TT-MeterOnBus-Crop

저희는 특히 게임플레이 피드백 구조로서 이 시스템을 사용할 때의 결과가 아주 만족스러웠습니다. 게임에는 플레이어가 실수로 절단하여 치명적인 불덩이나 전기 아크를 일으킬 수 있는 위험한 사물이 많습니다. 이러한 사물은 연료나 전기 공급을 끊어서 안전하게 만들 수 있기 때문에 오디오를 이러한 시스템에 연결하여 관련 자원이 끊길 때 이미터의 오디오를 중단하도록 했습니다. 이렇게 하면 플레이어가 사물을 만지기만 해도 안전한지 확인할 수 있죠. 

다음 동영상은 터치 전송 사운드가 게임플레이 피드백으로 사용되는 예시를 보여줍니다.

  • 선박의 양쪽 측면에는 두 개의 연료 파이프 시스템이 있습니다. 
  • 이 파이프는 연료로 가득 차있어서 절단하기 위험합니다. 파이프 안으로 연료가 빠르게 지나가는 소리는 들을 수 있습니다.
  • 연료를 내보내는 벨브는 플레이어가 절단하려는 파이프 부분에서 선박의 반대쪽 끝에 있습니다. 
  • 선박을 감압한 후에는 공기가 부족하기 때문에 파이프에 있는 연료를 더 이상 들을 수 없게 됩니다. 
  • 하지만 플레이어가 파이프를 만지면 어떤 것에 연료가 담겨 있고 어떤 것에 연료가 비워졌는지를 들을 수 있습니다.
  • 두 연료 시스템을 모두 비워낸 후 플레이어는 두 파이프를 손으로 만지며 어떤 것이 절단해도 안전한지를 확인합니다.
연료 시스템이 안전안지 확인하기 위해 터치 전송 사운드를 사용하는 예시

터치 전송 - 작업 방식

어떤 사물을 만지고 있는지 추적하는 시스템은 상당히 복잡합니다. 다음은 저희 테크니컬 디렉터인 리차드 해리슨(Richard Harrison)이 설명해드리는 사물 추적 관리 코드의 개요입니다.

우주선에서 사물이 카테고리로 나뉘는 방식은 세 가지 단계로 나눠집니다. 먼저 'Parts'는 선박의 단일한 부품입니다. 두 번째인 'Groups'는 사실상 단일 사물을 나타내는 Parts의 작은 모음입니다 (예: 장착 플레이트와 안테나는 모두 위성 안테나를 구성하는 Group의 Parts죠). Parts와 Groups는 모두 3D SFX 이미터가 될 수 있습니다. 마지막으로 'Hierarchies'는 서로 물리적으로 연결된 모든 Parts와 Groups의 모음입니다. 선박의 일부를 잘라내면 근원에서 차단되지만 여전히 서로 연결되어있는 모든 Parts나 Groups이 그들만의 새로운 Hierarchy로 할당되죠.

'Touches'는 Grab(왼/오른쪽 손)이나 Proximity에 의해 이뤄지며, 이는 각각 서로 다른 RTPC 값에 영향을 미치기 때문에 별도로 추적됩니다. Grab은 많은 설명이 필요하지 않습니다. 근접성 감지는 플레이어 주변의 특정 반경 내에서 구형의 겹침(overlap) 확인을 통해 처리됩니다. 사물이 이 구형 안에 떨어지면 근접성에 의해 '접촉'된 것으로 간주됩니다.

핵심적으로 이 터치 전송 시스템은 근사한 버전의 레퍼런스 카운터라고 할 수 있습니다. Part, Group, Hierarchy와 접촉할 때마다 특정 항목의 카운트에 1을 추가하고 멈출 때마다 1을 제거하죠. Part, Group, Hierarchy의 접촉 횟수가 0보다 큰 한, 이것을 '접촉'하고 있다고 확신할 수 있죠. 카운트가 0보다 증가한 Parts와 Groups의 경우 해당 Grab이나 Proximity RTPC를 증가시킵니다. 이 Part나 Group이 3D SFX를 방사할 경우 RTPC는 어떤 방식으로든 이 사운드가 들릴 수 있게 만듭니다. 접촉 수가 0으로 돌아갈 경우 해당 RTPC는 다시 0이 됩니다.
Hierarchies는 Parts 및 Groups와 같은 방식으로 추적되지만 다른 방식으로 사용됩니다. Hierarchy RTPC는 Hierarchy가 선박의 Reactor(2D 선박 환경음의 근원으로 사용됨)를 담고 있을 때만 설정됩니다. 그렇지 않으면 전송된 물리적 SFX에 영향을 받은 Hierarchy를 접촉하고 있는지의 여부를 충돌 시스템에 알리는데 이 추적이 사용됩니다.

마지막 문제는 사물의 분할 및 파괴로 인해 발생합니다. 저희 레퍼런스 카운터는 Part, Group, Hierarchy가 분할될 때를 이해하고, 원래 항목에서 접촉을 제거하고, 이러한 접촉을 새로 생성된 항목에 올바르게 재할당할 수 있을 만큼 똑똑해야 합니다. 이것이 작동하는 방식에 대한 자세한 설명은 쉽브레이커의 절단 논리에 굉장히 의존하며 이 글에서 다루기에는 너무 범위가 커질 것 같네요.

물리 문제

마지막으로 쉽브레이커의 물리 오디오 시스템을 간단히 살펴봅시다. 

이전 프로젝트에서 물리 시스템은 사물이 표면에 충격을 가할 때 재생할 사운드를 결정하는 '물리 오디오 태그'가 있는 사물을 기반으로 했습니다. 태그된 두 사물이 서로 충돌할 때 재생할 사운드를 결정하기 위한 조회 테이블이 있을 수도 있고, 원래 사물이 분리될 때 자체 물리 태그와 함께 생성되는 잔해 하위 사물이 있을 수도 있습니다. 충돌 시 충돌 강도는 RTPC로서 전달되며 물리 태그와 강도 값의 조합에 따라 재생될 사운드가 결정됩니다. 하지만 쉽브레이커에서는 이 기존의 방식으로는 해결할 수 없는 독특한 문제가 있었습니다. 

쉽브레이커에서 플레이어는 컴퓨터 터미널과 같은 큰 사물을 들어서 표준 '강체 역학 사물' 방식으로 던질 수 있습니다. 하지만 또한 플레이어는 절단 도구를 사용하여 컴퓨터를 반으로 가를 수도 있죠. 그러면 컴퓨터 터미널의 두 부분이 생기며, 이를 던져버릴 수도 있습니다. 이제까지는 그닥 극복하기 어려운 것은 아닙니다. RTPC를 사용하여 사물의 질량을 표현하고 Wwise에서 이 RTPC를 사용하여 컴퓨터 터미널 사운드의 '크기'를 변경하면 되니까요. 하지만 플레이어는 절단 도구를 사용하여 아주 얇은 조각을 잘라내어 금속판 조각을 만들어낼 수 있습니다. 이 경우 컴퓨터 터미널 사운드가 아니라 금속판 조각이 튕겨져나가는 듯한 사운드가 나야 합니다. 다시 말해 컴퓨터 터미널이 한 물리적 사운드에서 완전히 다른 사운드를 재생하는 것으로 전환해야 하죠.

HSSB-Image15-Game-ComputerTerminal

선박 내 컴퓨터 터미널

이 문제는 한동안 저희를 당황하게 만들었습니다. 충분히 얇게 잘라내야 금속판이 되어야 한다는 것을 컴퓨터 터미널에게 어떻게 알릴 수 있을까요? 사용하게 된 해결책은 아주 간단했습니다. 사물에 두 가지 물리 태그가 있어야 하며 첫 번째 태그에서 두 번째로 전환되는 질량 값이 구성되어야 하죠.

이제 물리 오디오 디자인 사양에서 복사해 붙여넣겠습니다.

컴퓨터 터미널과 같은 사물에는 'AudioMaterialData' 컴포넌트가 있습니다. 이 컴포넌트에는 세 가지 입력란이 있습니다.

  • Tag: 사물의 물리 오디오 식별자. 컴퓨터 터미널은 'object_large_metal_electronic_heavy'라는 값을 가질 수 있죠.
  • Family: 사물이 속한 일반적인 재질 그룹. 컴퓨터 터미널의 경우 'metal_light'라는 값이 해당됩니다.
  • Threshold: 사물이 Tag 값 대신 Family 값을 사용할 원본 사물의 질량 백분율을 나타내는 숫자.

Tag는 해당 사물이 Threshold에 지정된 질량 백분율을 초과할 때 Family를 오버라이드하는 것이라고 할 수 있습니다. 

충돌 시 해당 오브젝트 질량의 절대값은 Wwise에 RTPC로서 전달되며 사운드 디자이너가 이를 사용하여 사운드의 인지적 '크기'를 결정하게 되죠. 이 RTPC는 사물이 Threshold 값보다 높거나 낮은지에 상관 없이 업데이트되며 전달됩니다.

Family와 Tag 입력란은 선택 사항입니다.

  • 사물이 충돌할 때 Tag가 없을 경우 시스템은 Threshold 값에 상관 없이 Family 값을 사용합니다.
  • Family에 값이 없을 경우 사물은 Threshold 값 아래로 떨어질 때까지 Tag 값을 사용하여 충돌할 때 사운드가 들리지 않게 됩니다. (이것이 원했던 결과인 경우도 있죠.)

Tag와 Family의 서로 다른 값에는 서로 다른 Wwise 이벤트가 할당됩니다. 물리 오디오 시스템은 Tag나 Family가 사용되는지의 여부에 따라 올바른 이벤트를 시작하죠.

HSSB-Image16-Unity-AudioMaterialAsset-WithBox

Unity에서의 물리 오디오 구성

이 아이디어를 생각해낸 후에는 아주 순조로웠습니다. Wwise에서 평소대로 물리 사운드를 구성하고 Unity 사물은 Tag/Family 값과 Threshold 값에 대한 질량에 따라 어떤 사운드를 사용해야 할지 알 수 있죠.

HSSB-Image17-Wwise-PhysicsTagAndFamily

다음은 게임에서 시스템이 작동하는 모습입니다.

이 글을 통해 저희가 작업한 시스템을 살펴보는 흥미로운 시간이 되었길 바랍니다. 쉽브레이커는 아주 시스템 집약적인 게임입니다. 이 글에 포함되지 않은 수많은 시스템이 더 들어있죠. 나중에 다른 글에서 다뤄보면 어떨까 합니다.
읽어주셔서 감사합니다!

벤 맥컬러프 (Ben McCullough)

오디오 디렉터

Blackbird Interactive(블랙버드 인터랙티브)

벤 맥컬러프 (Ben McCullough)

오디오 디렉터

Blackbird Interactive(블랙버드 인터랙티브)

벤 맥컬러프는 1999년부터 게임 업계에서 종사해왔으며, 수상 경력이 있는 오디오 디렉터입니다. 가장 최근에 작업한 프로젝트는 Blackbird Interactive의 하드스페이스: 쉽브레이커(Hardspace: Shipbreaker)입니다. 이 전에는 에이지 오브 엠파이어(Age of Empires), 슬리핑 독스(Sleeping Dogs), 리틀빅플래닛(LittleBigPlanet), 모드네이션 레이서(Modnation Racers), 프로토타입(Prototype), 콜린 맥레이 랠리(Colin McRae Rally), 토카 레이스 드라이버(ToCA Race Driver), 브로큰 소드(Broken Sword), 등 다양한 게임에 참여했습니다. 그는 GDC와 개발자 컨퍼런스에서 연설한 경험이 있으며 벤쿠버 영화 학교에서 강연했습니다. 현재는 캐나다 벤쿠버에 거주 중입니다.

mastodon.gamedev.place/@benm

댓글

댓글 달기

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

다른 글

라우드니스를 처리하는 최상의 방법, 제 1강: 라우드니스 측정 (1부)

방송과 같은 푸시 서비스, 멀티 플랫폼 상호작용 엔터테인먼트, 인터넷 스트리밍과 같은 다양한 미디어 형식에서 라우드니스는 단지 신호 전달 표준이 아니라 소비자 선호에 직접적인...

12.11.2019 - 작성자: 지에 양 (Jie Yang, 디지몽크)

게임 사운드 보관 | 제 1부: 기본 지식

게임 업계에서 사운드 보관은 상당히 민감한 부분입니다. 데모씬과 레트로 게임에 각별한 애정이 있든, 혹은 최신 도구와 엔진으로 작업하는 사운드 전문가이든 (아니면 옛날 사운드에 푹...

9.9.2021 - 작성자: 파니 러비야르 (Fanny REBILLARD)

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

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

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

Strata 멀티트랙 SFX 라이브러리를 먼저 사용해본 사람들은 이렇게 말했습니다.

Strata의 시작 지난 40~50년 동안 SFX 라이브러리 제작자들은 거의 동일한 방식으로 콘텐츠를 제작하고 배포했습니다.디자인한 사운드를 녹음, 믹싱, 렌더링하고 테마별...

1.12.2022 - 작성자: 시몽 아슈비 (Simon Ashby)

Wwise 라이선스 및 가격 책정에 대해

"도대체 어떤 방식으로 책정되는거죠??"전 세계 스튜디오의 어두운 구석 어딘가에서 Wwise의 가격 모델이 조금... 복잡하다는 속삭임들이 있어 왔습니다. 완전히 틀린 말은 아닐...

13.4.2023 - 작성자: 마이크 드러멜스미스 (Mike Drummelsmith)

실용적인 구현: Wwise를 활용하여 세인트 로우(2022)에서 실제 라디오 재구현하기

세인츠 로우(Saints Row, 2022)의 사전 제작 단계에서 시스템을 처음 설계할 때 오디오 팀은 여러 시스템의 작동 방식을 실제 세계에 맞추기로 결정했습니다. 이는 주로 팀...

15.1.2025 - 작성자: 브렌든 엘리스 (Brendon Ellis)

다른 글

라우드니스를 처리하는 최상의 방법, 제 1강: 라우드니스 측정 (1부)

방송과 같은 푸시 서비스, 멀티 플랫폼 상호작용 엔터테인먼트, 인터넷 스트리밍과 같은 다양한 미디어 형식에서 라우드니스는 단지 신호 전달 표준이 아니라 소비자 선호에 직접적인...

게임 사운드 보관 | 제 1부: 기본 지식

게임 업계에서 사운드 보관은 상당히 민감한 부분입니다. 데모씬과 레트로 게임에 각별한 애정이 있든, 혹은 최신 도구와 엔진으로 작업하는 사운드 전문가이든 (아니면 옛날 사운드에 푹...

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

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