Дизайн
Юся Shutova
3374

Подводные камни: разработка подводных лодок в World of Warships

World of Warships была выпущена в 2015 году и справедливо считается одной из лучшей игр про флот и морские сражения.

В закладки

Разработчики постоянно добавляют новый контент, чтобы поддерживать интерес к игровому проекту. Сердце геймплея — система классов, основанная на реальных кораблях - эсминцы, линкоры, крейсеры и авианосцы – они сражаются на равных, имея свои сильные и слабые стороны, хотя в действительности они строились и применялись для разных задач.

Есть ещё один класс кораблей, которого в игре не было — подводные лодки.

​Игроки спрашивали про них ещё с альфа-теста, и несмотря на то, что исторически этот класс едва ли принимал участие в эскадренных сражениях, разработчики приняли решение добавить его в игру.

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

Игровой процесс и тестирование

Самая главная проблема, которую решали гейм-дизайнеры – как внедрить новый класс в устоявшийся игровой процесс, не нарушая игровой баланс и не меняя механику игры. Изначально подводные лодки не проектировались для эскадренных сражений: в реальности операции подлодок могли занимать дни и недели, тогда как нам же необходимо вписать этот класс в насыщенный событиями бой длиною в 20 минут.

Поэтому разработчики значительно усилили динамику и скорость подлодки, чтобы превратить дни в минуты. Впрочем, это обычный прием, т.к. в сравнении с настоящими судами, скорость кораблей в World of Warships завышена.

Забавная ситуация возникла с торпедами: раньше их реальная глубина хода не имела значения для коллизии и большинство торпед при попадании поражало любой корабль, а ряд особых глубоководных торпед не поражал определённые классы (например, в игре есть торпеды, которые никогда не могут попасть в эсминец и будут просто проходить под ним). Для игрока эта ситуация была понятной и выглядела нормально. Но, т.к. подводная лодка перемещается по вертикали, специально для нового класса разработчики сделали честную коллизию торпед в 3D.

Для осколочно-фугасных снарядов, бомб и ракет был создан дополнительный сплеш, который действует только на подводные лодки и бьёт достаточно далеко. С одной стороны, это передаёт такое явление, как гидроудар, когда субмарина могла получить повреждения от близкого разрыва, а с другой — повышает риски при её обнаружении и помогает в противодействии.

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

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

  • Увеличили запас кислорода, который расходуется у подлодки на перископной глубине и при полном погружении, ограничили время нахождения под водой, но при этом замедлили пополнение кислорода. Это позволило избавиться от «нырков» - частых быстрых погружений, которые постоянно происходили в хеллоуинском ивенте, а также скорректировать темп геймплея, сделав его более размеренным и тактическим.
  • Упростили управление по вертикали, оставив три совершенно чётких и разных положения. Верхнее положение, когда субмарина находится на поверхности для пополнения кислорода и передышки между атаками, является самым заметным и уязвимым. Перископная глубина удобна для атаки, т.к. превосходно маскирует подлодку. Полное погружение используется для самого скрытного перемещения, в котором подводная лодка максимально защищена, но при этом имеет минимум информации о том, что происходит наверху. Перемещение между состояниями происходит плавно и красиво. В зависимости от обстановки в бою игрок принимает решение как управлять подлодкой – все максимально просто и четко. Однако из предыдущего опыта многие игроки помнили о возможности менять глубину в операции «Ужас глубин», и они просили разработчиков вернуть возможность выбирать глубину погружения подлодки. Идея хорошая, и, немного обсудив это, мы добавили первое снаряжение для подлодки: «Предельная глубина». Оно не добавляет возможность выбрать новую глубину, но позволяет подлодке погрузиться еще глубже и снизить урон, который игрок может получить от глубинных бомб эсминцев. Таким образом, мы прислушались к пожеланиям игроков и добавили немного глубины геймплею, позволяя иметь возможность перейти в контр наступление.
  • Вместо прежней схемы пуска торпед, которую вкратце можно описать как «прицелился — дал залп — забыл» была добавлена механика активного сонара, которая мотивирует игрока поддерживать контакт с целью через перископ после пуска торпед и постоянно взаимодействовать с ней, «стреляя» в неё акустическим импульсом. Она создаёт ту самую атмосферу «наблюдаю цель в перископ» и в своём роде эмулирует часы напряжённой работы подводников перед атакой и во время неё. Данной механикой можно не пользоваться, но в этом случае торпедная атака будет крайне неэффективной.

Далее встал вопрос, как это качественно протестировать и собрать обратную связь. Основываясь на предыдущем опыте запуска классов, мы учли недочеты предыдущего тестирования. Тестовый билд прошёл более жёсткий контроль качества. Широкая аудитория, которая приходит на бету, прежде всего заинтересована в геймплее, поэтому, даже со всеми оговорками про тестирование прототипа, мы постарались подготовить его в продакшен-качестве, ведь первое впечатление можно произвести только один раз.

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

Следующим этапом после беты станет не полноценный релиз, а добавление подлодок в отдельный PvP-режим на основной сервер. Это нужно, чтобы дать возможность широкой аудитории опробовать новый геймплей и защитить игроков от слишком резких изменений, когда мир делится на «до и после патча». Предполагается, что на этапе «живого» тестирования правки будут становиться всё более точечными, доводя геймплей до «релизного» состояния.

Мы долго и упорно готовились, тем не менее мы понимаем, что впереди ещё много работы. А ведь немало пришлось сделать даже для того, чтобы этот тест стал возможен.

Моделирование

Учитывая, что подводные лодки — это самые маленькие корабли в игре, процесс их моделирования не кажется слишком сложным. Если с линкором мы справляемся в среднем за 6 месяцев, то на подводную лодку уходит 2–2,5. По полигонам схожая история: подлодка — это 40–70 тысяч треугольников, а линкор занимает до 350–420 тысяч. Но есть другие нюансы, о которых мы начали догадываться в процессе разработки.

У подлодок обнаружилось очень много подвижных частей, состояние которых завит от текущего положения. Есть 2 типа рулей: рули направления и рули глубины. Главное оружие — это торпедные аппараты, которые по умолчанию закрыты крышками, но им необходимо правильно открываться для беспрепятственного запуска торпеды. Кроме собственной крышки аппарата есть ещё крышки лёгкого корпуса с различными вариантами открытия или смещения, и у каждой подлодки они работают по-своему. Всё это необходимо достоверно воссоздать с рабочими механизмами, имитирующими правильное открытие всех этих крышек, для соответствия нашим стандартам качества. Тем более, игроки любят рассматривать такие детали.

Чтобы подлодки выглядели достойно в приближении, пришлось поднять количество пикселей на метр, чтобы улучшить детализацию и общее качество текстур.

Другой проблемой стало большое количество отверстий по всему кораблю. Это обусловлено наличием прочных и лёгких корпусов с большим количеством полостей между ними, надстройками, рубками, ограждениями.

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

Артиллерийское вооружение на ПЛ пришлось доработать. Обычно там используются специальные версии корабельных орудийных установок, так что мы смоделировали их в состоянии готовности к погружению. В игре это вооружение не используется в силу слишком малой эффективности.

Наконец, на подводных лодках есть детали, которые используются преимущественно в порту, в бою они убираются. Для максимальной достоверности мы смоделировали и их: кнехты, шпили и другое швартовое оборудование, которое спрятано под палубой, а также ограждения, съёмные мачты, гафели, флаги, навигационное оборудование и прочая мелочёвка. Всё это игрок сможет увидеть, рассматривая подлодку в порту между боями.

Рендер

До подлодок у нас не было задачи отрисовывать игроку подводный мир. Теперь же такая задача появилась, ещё и с высокими требованиями к производительности: всё должно выглядеть объёмно, атмосферно и красиво.

Из-за мельчайших частиц, отражающих свет, и высокой плотности воды, мы видим, как лучи света, переливаясь, проходят сквозь воду.

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

Показать подводный мир сложно в том числе из-за необходимости отрисовывать множество полупрозрачных объектов: взрывы над водой, такелаж кораблей, поверхность воды, туман, водоросли, пузырьки. Стоит нарушить их порядок — и внимательный игрок заметит этот огрех рендера. В каждой точке экрана, где рисуются прозрачные объекты, видеокарта будет совершать расчёты, кратные числу этих слоёв. Это означает повышенную нагрузку на видеосистему и необходимость в дополнительной оптимизации игры.

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

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

Ещё одна деталь — объёмное освещение. Оно не бросается в глаза, но вместе с другими компонентами рендера улучшает восприятие картинки, особенно на высоких настройках графики. Под водой, чтобы определить цвет каждой точки на экране, нужно учесть не только освещение и цвет объекта, который в этой точке виден, но и свет, преломлённый и поглощённый водой между камерой и наблюдаемым объектом. Свет распространяется неравномерно сквозь толщу воды. Чтобы учесть это влияние, всё расстояние до объекта разбивается на отрезки и рассчитывается свет, рассеянный и поглощённый на каждом отрезке. На последнем шаге полученные результаты суммируются. Эта операция происходит для каждого пикселя подводного мира, что требует больших ресурсов видеокарты.

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

Большинство проведённых доработок рендера сами по себе не особо яркие, но все вместе они работают на создание нужной атмосферы.

Звук

Ещё один компонент игры, работающий на атмосферу, — это звук. Мы подходим к звуку крайне серьёзно, причём есть три важных момента.

  • Мы стараемся применять модульность и активно работаем с миксами, чтобы размер игрового клиента оставался на приемлемом уровне.
  • Звук в нашей игре работает не только на атмосферу, но и на обратную связь игроку, причём зачастую не самым прямым образом.
  • Мы не гонимся за «документальным» реализмом в звуке, а скорее стараемся брать реалистичные компоненты и дополнять их «киношными». Это распространённая практика: например, в большинстве боевиков взрывы и перестрелки звучат сочнее и ярче, чем в реальности.

Эти моменты проявились и в работе над подлодками. Помимо трёх состояний (поверхность, перископная глубина, глубина) ещё учитывается положение камеры (например, на перископной глубине субмарина уже под водой, а камера — над водой). Для каждой комбинации создаётся свой микс. Двигатель у подлодки тоже работает по-разному: под водой мы слышим электрический двигатель, причём он специально приглушён, чтобы выделить другие звуки, а над водой работает дизель.

Как уже упоминалось, мы не преследуем цель создать полную звуковую симуляцию. Поэтому на глубине игрок будет слышать атмосферный эмбиент, а когда на подлодке закончится кислород, к «техническим» звукам сирены будут подмешиваться «человеческие», чтобы создать эффект присутствия и сигнализировать игроку, что у него проблемы. Это можно услышать в примере.

Добавлять в игру новый класс — это волнительно, но при этом и крайне интересно. Надеемся, что эта обзорная статья передала вам эмоции, впечатления, а может, и полезные знания, которые мы приобрели, работая над подводными лодками.

Большинство проведённых доработок рендера сами по себе не особо яркие, но вместе они работают на создание нужной атмосферы.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Юся Shutova", "author_type": "self", "tags": ["\u043c\u0438\u0440_\u043a\u043e\u0440\u0430\u0431\u043b\u0435\u0439","\u0432\u0430\u0440\u0433\u0435\u0439\u043c\u0438\u043d\u0433","wows","world_of_warships","wargaming"], "comments": 8, "likes": 4, "favorites": 7, "is_advertisement": false, "subsite_label": "design", "id": 100566, "is_wide": false, "is_ugc": true, "date": "Fri, 17 Jan 2020 15:48:03 +0300", "is_special": false }
Создать объявление на vc.ru
Маркетинг
Как быстро и не имея специальных знаний проверить качество настройки контекстной рекламы
Семь признаков непрофессиональной настройки аккаунтов в «Яндекс.Директе».
0
{ "id": 100566, "author_id": 41598, "diff_limit": 1000, "urls": {"diff":"\/comments\/100566\/get","add":"\/comments\/100566\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/100566"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199114, "last_count_and_date": null }
8 комментариев
Популярные
По порядку
Написать комментарий...
2

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

Ответить
2

Игру удалил - советую и остальным 

Ответить

Комментарий удален

1

Что вы врёте!!!,ПЛ убьют игру....не играю в эту игру и другим не советую

Ответить
1

После того, что вы натворили с Пуэрто Рико, желание играть в вашу игру пропало полностью.

Ответить
1

Вы авианосцы забалансить после реворка не смогли,  в игре фугасная содомия, то как вы понерфели Анри и обратно апнули Гиндера говорит что у вас в игре кризис и вы не знаете что делать дальше. С лодками уверен что разгоните всех остальных кто еще по привычке играет. 

Ответить

Комментарий удален

0

а в блитце будут пл когда-либо?

Ответить
0

норм

Ответить
–1

Все норм, понравится вам. Баланс там тоже будет.

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9qZWN0SWQiOiI1ZTRmZjUxODYyOGE2YzcxNDUxNWY0ZGEiLCJpYXQiOjE1ODI1MzY0NDB9.AwBBnUWMy3RR1xtAoaXVr81WvqxdlD4C8CBpwFiONzw", "release": "1a3ceffd" } { "page_type": "default" }