Большой World of Tanks продолжает активно развиваться — игра часто получает обновления, включая как что-то, связанное с игровым процессом (новые карты и танки, режимы игры и сезонные события, умения экипажа и полевая модернизация), так и что-то чисто техническое. Например, использование новых графических технологий. Если мы говорим о ПК, то здесь есть множество гибких настроек, чтобы и комфортно поиграть с красивой картинкой, и сам ПК при этом не спалить.

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

В этом посте рендер-разработчики студии мобильной разработки Wargaming MS-1 Рамиль Кудашев и Александр Бабей расскажут о том, что нового (и красивого) появилось в летнем релизе World of Tanks Blitz. 

Осторожно, внутри тяжелые гифки.

Мы хорошо помним, как живо было встречено введение реалистичной физики в большом WoT. Помните, до этого момента танки ездили будто по рельсам, без отрыва от земли. А при попытке разбежаться и прыгнуть со скалы танк мгновенно останавливался на краю. Это был не инстинкт самосохранения поседевшего экипажа — просто тогда не было физики. Зато сейчас она есть, и при желании куда-то заехать с разгону или откуда-то (и на кого-то) прыгнуть — можно. 

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

Подвеска

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

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

Так что мы решили реализовать модификацию геометрии гусениц программно. 

Вот как все работает. 

  1. По боковой проекции оригинальной гусеницы мы строим контур — замкнутый многоугольник.

  2. Его ребра разбиваются на звенья при помощи дополнительных точек, на выходе получаем замкнутую цепь, которая и описывает контур гусеницы. 

И так для каждого танка
И так для каждого танка

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

4. Сгенерированная гусеница рендерится за один вызов отрисовки. В этом вызове вырезанная геометрия повторяется множество раз благодаря инстансингу. Трансформация для каждого инстанса вычисляется в вершинном шейдере на основе позиций точек переданной туда цепи. 

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

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

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

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

А чтобы все было совсем красиво и реалистично, художнику нужно не только откорректировать точки гибкой гусеницы, но и прописать параметры катков. Здесь все сложнее, чем проставить флаг «Так, эта штука будет двигаться». Надо определить, какие именно катки и на какое максимально допустимое расстояние будут двигаться, а потом прописать для них параметры  прогибания и расстилания гусеницы: силу и скорость. 

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

Как это работает в больших Танках

У старшего брата за динамическую подвеску и красивый изгиб гитары гусеницы отвечает технология Soft skinning. Она отличная, но куда более требовательная к железу. Если бы мы использовали ее на мобилках, играть в Blitz было бы сложно. Зато тепло. 

По сути, главной сложностью всего процесса для нас стало именно большое количество танков в игре. Тут же нельзя было задать единые параметры настройки гусениц, как с волшебной кнопкой «Сделать красиво». Учесть все-все-все случаи, которые надо обработать в коде, не представлялось возможным. Игроки очень изобретательны. Очень. 

Поэтому правки постоянно вносили и в генерацию самих гусениц, и в симуляцию физики этих гусениц. 

PBR — physically based rendering

Кроме подвески, в игре появился новый физически достоверный рендеринг материалов и освещения техники. Он использует принципы распространения света в реальном мире. 

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

Кроме этого, к танкам применяется глобальная схема освещения, уникальная для каждой карты. 

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

Все эти графические настройки можно менять. Конечно, не так гибко, как в больших Танках, но достаточно для того, чтобы комфортно поиграть в Blitz и на бюджетном смартфоне. У разных настроек разный «вес» — например, описанный выше PBR не так уж и сильно влияет на производительность. А вот высокое качество теней — это уже весомо. 

Что дальше

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

На любых девайсах. 

Вот здесь за 5 минут можно посмотреть подробный обзор обновления 8.0.

P.S. Если вам интересно что-то еще из внутренней кухни Wargaming, от технических деталей создания игр до введения тех или иных функций — пишите в комментариях.

Комментарии (12)


  1. deepform
    28.09.2021 13:14
    +7

    А будет история про то, как ваши эффективные менеджеры сделали из достаточно неплохой игры донатную помойку?)


    1. fruit_cake
      28.09.2021 15:20
      +3

      Вроде изначально был донат? Или он какой-то другой был?


    1. AlastorMoody
      28.09.2021 15:47
      +4

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

      Если руки прямые, можно вообще без доната и дополнительных приблуд выносить тех же донатеров с обвесом.

      Если руки кривые, хоть по 10к в день донать, лучше играть не станешь.

      alexbabey, спасибо за пост, у меня вопросец.

      Вот вы писали про то, как графически отображается заезд танка в воду и подобное. Есть ли возможность отображать повреждения как-то занятнее, чем просто дырка от пробития? Это же может быть реально погнутый ствол после попадания в пушку и последующего ремонта, разбитый триплекс или фонарь, подтекающее топливо из пробитого бака?

      Или слишком сложно?


      1. alexbabey Автор
        28.09.2021 17:42
        +2

        @AlastorMoody, спасибо за вопрос!
        На данный момент ничего такого не планируется, но в дальнейшем все возможно.
        По сложности, да, динамическое изменение геометрии значительно сложнее, чем нанесение следа от попадания.

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


        1. azatfr
          29.09.2021 11:07

          Я вам переход World of warplanes с 1.9 версии на 2.0 никогда не прощу. Вы просто убили игру. В игре не осталось людей. И ваши игры жутко не оптимизированные. Клиент Warthunder, в котором совмещены танки, самолеты, вертолеты и корабли, имеет меньший объём чем клиенты вашей одной игры и при этом картинка у Warthunder не уступает и даже превосходит вашу.


      1. deepform
        29.09.2021 04:43

        Я ,возможно ,неправильно выразился.

        Просто обилие рекламы/банеры всюду.

        А так, когда играл, 60% побед было.


      1. gdt
        30.09.2021 03:37

        Да, но вы часом не забыли про экономику? Надо быть суперпапкой чтобы на 10 после боя стабильно выходить в плюс без прем-аккаунта, резервов и прочих плюшек. На 6 да можно бесконечно нагибать без према, на 8 тоже если руки прямые, на 10 — не верю (с).


  1. sborisov
    28.09.2021 13:53
    +1

    Было бы интереснее узнать -
    1. зачем вы сделали, когда у противника остаётся 1хп (думаю не всех это радует), хотя по вашим же рассказам +- 25% - он должен был быть добит
    2. при полном сведении - вы не попадаете, в то время как противник при стрельбе без сведения - попадает вам точно в пиксель...


    1. AlastorMoody
      28.09.2021 15:48
      +1

      1 хп это еще ладно, а вот когда в EBR 105 почти в упор прилетает от т110е4, и у колесника начинает от подобного лишь чутка подспускать колесо, это вот печалит)


    1. DarkNews
      28.09.2021 17:48
      +3

      Я точно на хабре, а не на пикабу или форуме ВоТ с такими вопросами уровня школьника начальных классов? Даже стыдно как то стало, мне, из за ваших вопросов.


  1. deepform
    29.09.2021 10:54

    Все мы в душе всегда остаёмся детьми)


  1. wxe
    07.10.2021 13:39

    Интересно как организовано взаимодействие танков с землей и камнями на сервере.