게임 속 발소리가 겹쳐도 왜 시끄러워지지 않을까?

게임 속에서 수십 명이 같은 시간에 뛰어다니더라도 소리가 뭉개지지 않는 까닭은 오디오 엔진이 우선순위가 낮은 소리를 걸러내기 때문인데요. 유니티와 FMOD의 실제 보이스 컬링 규칙을 그대로 코드로 옮겨 발소리 715번 중 23.8%가 스피커까지 가지 못한다는 것을 실험으로 확인해보겠습니다.

다 들리면 오히려 이상해진다

50명분의 발소리가 전부 동시에 재생된다고 상상해보면 그건 자연스러운 전장의 소음이 아니라 그냥 뭉개진 잡음 덩어리에 가깝다고 할 수 있습니다.

추가로 믹싱 파이프라인과 오디오 하드웨어가 한 번에 처리할 수 있는 소리 채널 수에는 물리적인 제한이 있습니다.

다시 말해 “너무 많은 소리가 한 번에 다 들리면 이상하게 들린다.”는 문제와 “애초에 물리적으로 다 처리할 수 없다.”라는 문제가 동시에 걸려 있는 것입니다. 그렇기 때문에 실제 게임 오디오 엔진들은 처음부터 모든 소리를 플레이어에게 다 들려주지 않는 것을 기본 전제로 제작되어 있습니다.

보이스에도 우선순위가 존재

해당 문제는 유니티와 FMOD 같은 오디오 엔진에서 이미 표준적으로 다뤄지고 있는데요. AudioSource.isVirtual 항목에는 “결과 음량이 오디오 프로젝트 설정에서 지정한 최대 가청 소리 개수(N)만큼의 가장 큰 소리들의 음량보다 작으면 그 소리는 컬링된다.”고 밝혀져 있습니다.

즉 동시에 재생되는 소리가 아무리 많더라도 실제로 스피커에서 소리가 나는 것은 그중 가장 큰 N개일 뿐이고 나머지는 조용히 가상 상태로만 존재한다는 말입니다. 우선 순위를 매기는 AudioSource.priority 값은 0부터 256 사이의 정수로 정해지고 우선순위가 떨어지는 것부터 먼저 가상화하되 순위가 동일하면 더 조용한 쪽이 밀려난다는 규정이 적용됩니다.

오디오 미들웨어 FMOD 쪽 자료도 같은 개념으로 풀어서 밝히는데요. 우선순위가 높은 채널은 아무리 조용해도 우선순위가 낮은 채널에서 절대 자리를 뺏기지 않는다는 것이었습니다. 서로 다른 두 엔진이 독립적으로 같은 방법에 도달했다는 것은 이제 이것이 우연한 제작 과정이나 설계가 아니라 소리가 많은 게임상에서는 필수적인 구조라는 이야기입니다.

50명이 뛰는 상황을 만들어보니

궁금증이 생겨 이 규칙을 그대로 코드에 옮겨 캐릭터 50명이 5초 동안 동시에 뛰는 상황을 파이썬을 돌려서 직접 카운트해봤습니다. 캐릭터마다 듣는 사람으로부터의 거리를 1~25m 사이로 무작위로 두고 거리 제곱에 반비례하게 음량을 계산하였습니다. 실제로 스피커에서 소리가 나는 보이스 수는 16개로 제한하고 유니티 문서의 패턴대로 그 순간 음량이 가장 큰 16개만 들리도록 하고 나머지는 가상 처리가 되게 제작하였습니다.

이를 검토해보니 제한이 없을 때는 동시 재생 보이스 수가 최고 28개까지 올라갔고 대부분의 구간에서 20개 안팎을 오고 갔습니다. 반대로 16개로 리밋을 걸자 그래프는 처음 몇 프레임을 빼고는 5초 내내 정확히 16이라는 값에 딱 붙어서 만들어졌습니다. 전체 715번의 발소리 이벤트 중 170번(23.8%)은 발생한 순간 이미 더 큰 소리 16개에 밀려서 한 번도 스피커에 재생되지 않았습니다.

게임에서 50명이 동시에 뛸 때 동시 재생 보이스 수를 16개 제한과 제한없음으로 비교한 계단형 영역 그래프

그럼 나머지는 어디로?

여기서 생길 수 있는 호기심은 “그 170번의 발소리는 삭제된 것인가?”라는 질문입니다. 답은 아니다에 가까운데요.

유니티 문서가 안내하는 가상의 보이스는 소리 자체를 삭제하는 것이 아니라 재생 위치와 상태를 계속 추적하면서 실제 오디오 출력만 오프하는 방식입니다.

그래서 캐릭터가 플레이어 쪽으로 다가와 음량 순위가 16위 안으로 다시 들어오면 그 소리는 처음부터 다시 트는 게 아니라 원래 있어야 할 재생 지점부터 자연스럽게 이어서 들리게 됩니다. 하지만 이번 시뮬레이션은 순수하게 거리 기반 음량만으로 순위를 매겼다는 아쉬운 점이 있습니다.

실제 게임에서는 플레이어 자신의 발소리나 바로 옆에 존재하는 적처럼 물리적으로는 조용하더라도 게임 플레이상 중요한 소리에 별도로 높은 우선순위를 설정하는 경우가 많습니다. 순수 음량 순위만 따지고 적용했다면 이런 소리들이 먼 곳의 큰 소리에 밀려 묻힐 수도 있다는 말입니다.

결론: 소리는 골라서 들려주고 있었다

마무리하자면 715번의 발소리 중 170번은 삭제된 소리가 아닌 애초에 스피커까지 갈 필요가 없는 불필요하다고 판단되어 걸러진 소리였습니다. 게임이 아무리 시끄러운 전투 장면에서도 소음 덩어리처럼 플레이어에게 전달되지 않는 이유는 소리를 억지로 줄여서 그런 것이 아니라 그 순간 가장 들려줄 가치가 있는 소리만 골라내는 판단이 매 프레임 조용히 일어나고 있었기 때문입니다. 사운드 플레이가 중요한 배틀그라운드나, 서든어택 같은 게임을 하시는 분들에게 유용한 정보였기를 바라며 글 마무리하도록 하겠습니다.

댓글 남기기