← Все записи

Технологии3 мин чтения

Почему мы перешли в 3D

Заранее нарисованные анимации упёрлись в объём, и поле боя Terminal Leave стало трёхмерным. Почему так решили и как прошли два с лишним месяца перехода.

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

В чём была проблема

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

Жить нельзя было с тем, что ждало дальше. Объём растёт не от числа предметов, а от числа их сочетаний. Позже в игре появятся гражданские и полиция, и для некоторых миссий есть идея маскировки под гражданских. Значит, гражданская одежда должна сочетаться со всеми видами брони и оружия. Кроме того, в планах индивидуальная и бонусная экипировка: зимняя и летняя форма, полицейская, спецназ, та же гражданская. Один комплект гражданской одежды — это ещё около 6 ГБ спрайтов, семь дней рендера и дополнительные 200 МБ загрузки в игре. Каждый следующий — столько же.

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

Что не изменилось

Самое важное: изменилось только то, как бой показан.

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

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

Как проверяли

Игра открывается в браузере, в том числе на телефоне, и главный вопрос был в том, потянут ли телефоны трёхмерную сцену.

Прежде чем что-либо переделывать, я собрал стенд: сцена боя на three.js с бойцами и местностью, с переключением качества и счётчиком кадров. Его прогнали в браузере на двух телефонах — на старом iPhone, заведомо слабее того, на который игра рассчитана, и на Android 2018 года.

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

Как шёл переход

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

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

Было и стало

Бой до перехода и после: сверху — спрайты, снизу — 3D.

Поле боя на спрайтах
До перехода: спрайты
Поле боя в 3D
После перехода: 3D

Что ещё не готово

Если честно — ничего. Сделана только основа: бой показывается в 3D. Всё остальное — временные заглушки, собранные из того, что уже было.

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