Большой World of Tanks продолжает активно развиваться — игра часто получает обновления, включая как что-то, связанное с игровым процессом (новые карты и танки, режимы игры и сезонные события, умения экипажа и полевая модернизация), так и что-то чисто техническое. Например, использование новых графических технологий. Если мы говорим о ПК, то здесь есть множество гибких настроек, чтобы и комфортно поиграть с красивой картинкой, и сам ПК при этом не спалить.
В случае с мобильными устройствами все немного сложнее, и апдейты графики проводятся не так часто.
В этом посте рендер-разработчики студии мобильной разработки Wargaming MS-1 Рамиль Кудашев и Александр Бабей расскажут о том, что нового (и красивого) появилось в летнем релизе World of Tanks Blitz.
Осторожно, внутри тяжелые гифки.
Мы хорошо помним, как живо было встречено введение реалистичной физики в большом WoT. Помните, до этого момента танки ездили будто по рельсам, без отрыва от земли. А при попытке разбежаться и прыгнуть со скалы танк мгновенно останавливался на краю. Это был не инстинкт самосохранения поседевшего экипажа — просто тогда не было физики. Зато сейчас она есть, и при желании куда-то заехать с разгону или откуда-то (и на кого-то) прыгнуть — можно.
Мобильным танкам долгое время не хватало подобной графической динамики, и мы начали ее реализовать с, пожалуй, самой сложной штуки — с динамичной гусеничной подвески. Для каждого танка.
Подвеска
Одним из самых сложных моментов тут было не столько отрисовать все и сделать так, чтобы оно красиво двигалось, сколько минимизировать время, которое художник будет тратить на настройку подвески отдельно взятого танка.
Для этого мы отказались от создания новой геометрии гусениц танков. В целом-то для динамической подвески нужны гибкие гусеницы, которые несложно замоделить с нуля. Но это потребовало бы перемоделирования подвески на каждом танке, а их в игре множество.
Так что мы решили реализовать модификацию геометрии гусениц программно.
Вот как все работает.
По боковой проекции оригинальной гусеницы мы строим контур — замкнутый многоугольник.
Его ребра разбиваются на звенья при помощи дополнительных точек, на выходе получаем замкнутую цепь, которая и описывает контур гусеницы.
3. Из нижней части оригинальной гусеницы берем и программно вырезаем кусок геометрии — он будет использоваться для заполнения звеньев полученной цепи.
4. Сгенерированная гусеница рендерится за один вызов отрисовки. В этом вызове вырезанная геометрия повторяется множество раз благодаря инстансингу. Трансформация для каждого инстанса вычисляется в вершинном шейдере на основе позиций точек переданной туда цепи.
5. После всего этого действа у нас получается гибкая гусеница, состоящая из звеньев. Ее физику мы уже можем симулировать — натягивать или прогибать, как надо, меняя позиции точек цепи.
Первыми при симуляции физики подвески двигаются катки. Мы определяем объекты под танком при помощи рейкастов, а затем меняем позиции катков так, чтобы они огибали эти объекты. После этого цепь гусеницы подстраивается уже под новое положение катков, с учетом этого огибания.
В цепи есть два вида точек — прикреплённые к самим каткам (красные), двигающиеся вслед за ближайшим катком, и свободные (белые). Именно свободные точки и формируют подвижные сегменты — части цепи, которые будут натягиваться (как нервы мехвода), прогибаться или расстилаться по колесам в зависимости от расположения и направления движения танка.
Благодаря всем этим преобразованиям художник видит сгенерированную гибкую гусеницу. Собственно, единственное, что ему нужно сделать — подправить позиции точек, прикрепленных к каткам. И то, если нужно. Здесь художник просто перетаскивает мышкой нужные точки.
А чтобы все было совсем красиво и реалистично, художнику нужно не только откорректировать точки гибкой гусеницы, но и прописать параметры катков. Здесь все сложнее, чем проставить флаг «Так, эта штука будет двигаться». Надо определить, какие именно катки и на какое максимально допустимое расстояние будут двигаться, а потом прописать для них параметры прогибания и расстилания гусеницы: силу и скорость.
Такой подход позволяет нам настраивать динамическую подвеску на одном танке силами одного художника примерно за 20 минут. К обновлению 8.0, о котором идет речь, мы настроили 456 танков.
Как это работает в больших Танках
У старшего брата за динамическую подвеску и красивый изгиб гитары гусеницы отвечает технология Soft skinning. Она отличная, но куда более требовательная к железу. Если бы мы использовали ее на мобилках, играть в Blitz было бы сложно. Зато тепло.
По сути, главной сложностью всего процесса для нас стало именно большое количество танков в игре. Тут же нельзя было задать единые параметры настройки гусениц, как с волшебной кнопкой «Сделать красиво». Учесть все-все-все случаи, которые надо обработать в коде, не представлялось возможным. Игроки очень изобретательны. Очень.
Поэтому правки постоянно вносили и в генерацию самих гусениц, и в симуляцию физики этих гусениц.
PBR — physically based rendering
Кроме подвески, в игре появился новый физически достоверный рендеринг материалов и освещения техники. Он использует принципы распространения света в реальном мире.
Благодаря ему получилось сделать так, что металл, резиновые ободы катков, разные чехлы и другие материалы выглядят гораздо реалистичнее.
Кроме этого, к танкам применяется глобальная схема освещения, уникальная для каждой карты.
Он же отвечает за внешние изменения танка в зависимости от того, по чему он едет — можно заметно испачкаться на ряде карт, затем заехать в воду: грязь смоется, и ваша боевая машина какое-то время будет чистой и блестящей, пока не высохнет.
Все эти графические настройки можно менять. Конечно, не так гибко, как в больших Танках, но достаточно для того, чтобы комфортно поиграть в Blitz и на бюджетном смартфоне. У разных настроек разный «вес» — например, описанный выше PBR не так уж и сильно влияет на производительность. А вот высокое качество теней — это уже весомо.
Что дальше
А дальше мы будем стараться продолжать своевременно обновлять приложение по мере выхода новых технологий, чтобы поддерживать визуальную составляющую игры на должном уровне.
На любых девайсах.
Вот здесь за 5 минут можно посмотреть подробный обзор обновления 8.0.
P.S. Если вам интересно что-то еще из внутренней кухни Wargaming, от технических деталей создания игр до введения тех или иных функций — пишите в комментариях.
Комментарии (12)
sborisov
28.09.2021 13:53+1Было бы интереснее узнать -
1. зачем вы сделали, когда у противника остаётся 1хп (думаю не всех это радует), хотя по вашим же рассказам +- 25% - он должен был быть добит
2. при полном сведении - вы не попадаете, в то время как противник при стрельбе без сведения - попадает вам точно в пиксель...AlastorMoody
28.09.2021 15:48+11 хп это еще ладно, а вот когда в EBR 105 почти в упор прилетает от т110е4, и у колесника начинает от подобного лишь чутка подспускать колесо, это вот печалит)
DarkNews
28.09.2021 17:48+3Я точно на хабре, а не на пикабу или форуме ВоТ с такими вопросами уровня школьника начальных классов? Даже стыдно как то стало, мне, из за ваших вопросов.
deepform
А будет история про то, как ваши эффективные менеджеры сделали из достаточно неплохой игры донатную помойку?)
fruit_cake
Вроде изначально был донат? Или он какой-то другой был?
AlastorMoody
Вот зря вы, у WG из подобных игр самый крутой баланс между донатом и возможностями.
Если руки прямые, можно вообще без доната и дополнительных приблуд выносить тех же донатеров с обвесом.
Если руки кривые, хоть по 10к в день донать, лучше играть не станешь.
alexbabey, спасибо за пост, у меня вопросец.
Вот вы писали про то, как графически отображается заезд танка в воду и подобное. Есть ли возможность отображать повреждения как-то занятнее, чем просто дырка от пробития? Это же может быть реально погнутый ствол после попадания в пушку и последующего ремонта, разбитый триплекс или фонарь, подтекающее топливо из пробитого бака?
Или слишком сложно?
alexbabey Автор
@AlastorMoody, спасибо за вопрос!
На данный момент ничего такого не планируется, но в дальнейшем все возможно.
По сложности, да, динамическое изменение геометрии значительно сложнее, чем нанесение следа от попадания.
Конечно можно просто иметь две геометрии, одну для целого объекта, вторую для поврежденного, и подменять их при изменении состояния (что и происходит с гусеницами). Но такой подход требует дополнительного времени художников на создание поврежденных состояний объектов, да и эффект от простой подмены не такой крутой как хотелось бы, поэтому в эту сторону не двигаемся.
azatfr
Я вам переход World of warplanes с 1.9 версии на 2.0 никогда не прощу. Вы просто убили игру. В игре не осталось людей. И ваши игры жутко не оптимизированные. Клиент Warthunder, в котором совмещены танки, самолеты, вертолеты и корабли, имеет меньший объём чем клиенты вашей одной игры и при этом картинка у Warthunder не уступает и даже превосходит вашу.
deepform
Я ,возможно ,неправильно выразился.
Просто обилие рекламы/банеры всюду.
А так, когда играл, 60% побед было.
gdt
Да, но вы часом не забыли про экономику? Надо быть суперпапкой чтобы на 10 после боя стабильно выходить в плюс без прем-аккаунта, резервов и прочих плюшек. На 6 да можно бесконечно нагибать без према, на 8 тоже если руки прямые, на 10 — не верю (с).