Найти тему
Терри МакГиннис

Как устроены компьютерные игры: звук

Оглавление

Вы остались один на один на карте Nuke. Вы не отпускаете клавишу Shift. Страх жмёт сердце. Вся команда находится в муте, чтобы не отвлекать "советами". Вы начинаете доверять только своим ушам. И тут вы слышите как за стеной перед вами проходит враг. Вы тихо подходите к дверям, отжимаете Shift и выбегаете на врага... Но его нет! Как так? Ведь вы точно слышали его! Оказывается звук шагов доносился с нижнего этажа. И тут вы мысленно начинаете ругать устаревший звуковой движок игры Counter Strike Но как устроен звук в играх? Хватайте тарелку пельмешек, на связи разработчик игр со стажем работы в восемь лет!

de_nuke в CS GO
de_nuke в CS GO

Звук в реальности

Как у нас уже принято, вначале мы рассмотрим как что-то устроено в реальной жизни, а потом - ка это эмитируется в играх. "Звук — это физическое явление, представляющее собой распространение в виде упругих волн механических колебаний в твёрдой, жидкой или газообразной среде" сказано на Википедии. Что это означает? Думаю, вы замечали, что вибрация от телефона, который лежит в нескольких сантиметрах от вас, можно чувствовать, приложив руку к поверхности на которой тот лежит. Подобным образом и со звуком. Звук заставляет вибрировать частицы, которые передают вибрацию дальше, словно волны на воде, которые образуются одна за другой от одного источника волны на воде.

Волны на воде
Волны на воде

Подобно волнам звук может отскакивать от некоторых поверхностей не проходя через них и усиливаясь вблизи источника благодаря отскоку от стен.

Звук в играх

Похожим образом звук реализуется и в некоторых крупных играх. Однако есть способ как этот процесс облегчить в плане вычислений. Большинство игр воспринимают источник звука не как нечто физически осязаемое. Чаще всего источник звука для игровых движков - это точка. Игра просто считает как далеко ты находишься от точки и имея заданные параметры включает вам аудиофайл с той громкостью, с которой говорит алгоритм игры. Многие игровые движки даже имеют программные микшеры для тонкой настройки такого звука.

Микшер звука в Unity 5
Микшер звука в Unity 5

Но вы спросите: "Во многих играх, если я захожу в какое-то помещение, звук стаёт тише. Если игра просто делает звук тише с моим удалением от источника - как объяснить это?". И ответ довольно прост. Самый простой вариант - написать скрипт, который в некоторых областях будет принудительно делать звук тише. Но такой способ настаивает на том, чтоб программист заранее знал где будет источник звука. Есть вариант ещё проще. Игре следует проверять находится ли игрок в замкнутом пространстве и при этом находится ли источник звука с ним в этом пространстве или он за его стенами. Именно таких алгоритмов иногда не хватает в на локации Nuke, из-за чего непонятно на каком из этажей находятся игроки.

Игровой движок Unity 5 показывает источник звука и радиус в котором его будет слышно
Игровой движок Unity 5 показывает источник звука и радиус в котором его будет слышно

Так же может возникнуть вопрос о том, как работает фоновая музыка или звуки которые слышно независимо от расстояния до источника. И ответ так же прост (уверен вы уже сами знаете ответ). Нужно всего лишь убрать алгоритм затихания звука и проигрывать его с одинаковой громкостью независимо от удалённости от источник. Но некоторые игровые движки не позволяют так делать, потому разработчики просто привязывают источник звука к главному герою и сколько бы тот не бегал, источник звука будет на той же самой дистанции от него и не будет менять громкости.

Если у вас есть информация про более сложные алгоритмы построения звука или остались вопросы/предложения - добро пожаловать в комментарии!