Интервью с ведущим геймплей-программистом Assassin’s Creed: Valhalla
В рамках нашей рубрики «Как стать разработчиком игр?» ведущий геймплей-программист Assassin’s Creed: Valhalla из студии Sperasoft Максим Арван согласился рассказать о своей профессии.
Расскажи о себе? Как ты пришел в геймдев? Где учился? Где и над чем сейчас работаешь?
Привет. Меня зовут Максим, мне 32. Сейчас я работаю в компании Sperasoft на позиции Lead Gameplay Programmer. Текущий мой проект еще не подлежит разглашению. Последний проект, в котором я участвовал – Assassin’s Creed Valhalla.
Я закончил Факультет Технической Кибернетики в Политехе. Сейчас он называется Институтом компьютерных наук и технологий.
До геймдева я работал над роботами для атомных станций и инспекции газовых труб, потом были рентгенохирургические комплексы.
Меня всегда тянуло к железу, к работе с микроконтроллерами и платами, осциллографами и блоками питаний.
Тянуло, скорее всего, потому, что от момента внесения изменений в код до получения результата очень короткая прямая. Ты потратил день на документацию и написание простейшего модуля – и вот этот маленький шаговый двигатель уже работает так, как тебе надо. Изменил пару значений в регистре – работает совсем по – другому.
Причина, по которой я сменил область, была проста — мне хотелось, чтобы тысячи и миллионы людей пользовались тем, что я создаю. Мне хотелось узнать, как создаются массовые продукты, как выдерживаются стандарты качества для таких продуктов.
При этом мне не хотелось терять этой короткой прямой между изменением и результатом, и тут довольно случайно в моей жизни появилась работа над AI в геймдеве. Мне повезло попасть в очень сильную команду, которая занималась разработкой Assassin’s Creed: Origins.
Расскажи о работе геймплей-программиста (для тех, кто не представляет, что это такое).
Ранее мой бывший коллега и хороший товарищ Александр Балакшин отлично разложил по полочкам основной инструментарий и процессы геймплей-программиста (GPP) (Читайте: Александр Балакшин «Профессия геймплей-программист»). От себя хотел бы осветить больше сторону скиллсета геймплейщика.
Работая над геймплеем, программисту приходится замыкать на себе взаимодейстие с большим количеством людей из разных сфер и дисциплин, будь то геймдизайнеры, квестдизайнеры, левелдизайнеры, теханиматоры, программисты из смежных команд. Безусловно, разработка любого продукта – это командная работа, и хорошая коммуникация внутри команды и вне ее крайне важна, но добавив щепотку геймдев-специфики с ее переменчивыми требованиями и концепциями, на выходе оказывается, что одним из самых важных навыков GPP становится умение коммуницировать с людьми.
Геймплей-программист одновременно является техническим регулятором на стадии разработки и обсуждения фичи (именно он должен объяснить, почему 3000 одновременно дерущихся NPC на сцене – это серьезная нагрузка на платформу и есть ограничения) и переводчиком желаний геймдизайнера на технический язык. Программист должен собрать из имеющихся компонентов, дописав недостающие, систему, которая должна работать по правилам, что регулирует геймдизайнер.
Какое влияние геймплей-программист оказывает на разработку игры?
На стадии обсуждения и прототипизации каждой фичи программист выступает первопроходцем и одновременно техническим регулятором. В задачу программиста входит понять, что на текущем движке реально сделать и какие его ограничения. Он должен оценить, насколько затратно будет внести те или иные изменения в движок, сколько модулей необходимо создать и как их увязать друг с другом. Далее на базе этих знаний идет обсуждение реализации фичи с точки зрения дизайна.
На стадии реализации программист переводит видение дизайнера в код. На этой стадии знание базовых принципов, на которых строится игра, может быть крайне полезным для программиста. Чем лучше он погружен в эту сферу, тем меньше будет итераций взаимодействия с дизайнером, и соответственно, тем проще работать всем звеньям цепи. На этой же стадии в обязанности программиста входит создание всех инструментов для настройки и отладки фичи. Чем больше будет уделено внимания данному аспекту, тем проще будет работа на стадии доводки и отладки. На этой стадии чаще всего реализуется базовый функционал без покрытия особенных редко встречающихся ситуаций (edge cases)
На стадии отладки цель программиста – доработать систему, чтобы она была стабильна и работоспособна в максимальном количестве всевозможных ситуаций, даже самых редких. Цель получить стабильную систему, выполняющую свою задачу во всех ситуациях, не выходящую за рамки технических ограничений.
Все описанное выше подразумевает работу над одной фичой, но эти же правила применимы и в работе над игрой в целом.
Какая рутина присутствует в ежедневной работе геймплей-программиста?
На удивление, ничего не приходит в голову. Проект, даже самый большой, отличается от того, каким он был прошлую неделю, в лучшую или худшую сторону – вопрос уже совсем другой. Точно могу сказать, что слова “рутина” нет у меня в арсенале.
Есть, пожалуй, один момент, который точно стоит держать в голове: Если вы – геймплей – программист, то с большей вероятностью стоит утверждать, что вы больше «геймплей», чем «программист». Так как в этой сфере крайне мало классических задач программиста, на то, чтобы поддерживать достойный уровень алгоритмиста, математика и знатока стандартов, придется прикладывать дополнительные усилия вне работы.
Что для тебя видеоигры? Развлечение/форма искусства?
Для меня игры во многом похожи на продукцию киноиндустрии, как с точки зрения продакшн-процессов, так и с точки зрения того, что мне они дают. Мне нравится иметь возможность улечься на диван и перенестись в приятный мне мир, пообщаться с героем, с которым могу себя хоть как-то проассоциировать. Это может быть, как игра, так и кино или сериал. Все вплоть до того, какую степень влияния на историю я хочу оказывать в данный момент. Отвечая на вопрос, для меня игры — это развлечение.
Расскажи о процессе создания игры с точки зрения геймплей-программиста?
На текущий момент зона моих обязанностей сместилась в более менеджерскую зону. Моим главным приоритетом стала общая работа и производительность всей команды программистов. Если отвечать на вопрос, как я способствую тому, чтобы игра была крутой, то ответ будет: делаю все, чтобы вся команда успешно делала игру крутой. По-прежнему, взаимодействую я со всеми: с дизайнерами, аниматорами, заказчиками, программистами из распределенных студий, но делаю я это уже скорее для настройки процессов, нежели для решения технических задач. Хотя и без них не обходится.
В какие игры играешь сейчас? Чем вдохновляешься?
Сейчас я с головой погрузился в AC Valhalla (во время разработки стараюсь всячески обходить основной сюжет стороной, чтобы потом самому им насладиться).
Мне не просто назвать какие-то отдельные жанры, есть просто игры, которые мне нравятся, а связать их воедино довольно сложно.
Не так давно открыл для себя технологию PlayLink от Sony. Она позволяет подключать несколько мобильных телефонов к PS4 и использовать их, как контроллеры. «Знание – сила» и «Безумцы» на домашних вечеринках заходят просто шикарно.
До этого запоем прошел свежий ремастер THPS 1+2. Отличный ремастер, старый пуленепробиваемый геймплей на современном движке, куча новых режимов и еще 300 способов заставить тебя остаться в игре. Ну и куда же без бесподобного саундтрека. Что касается маркетинговой кампании для ремастера — образец (посмотрите на YouTube промо-ролики к игре).
Пока ждал ремастер THPS отдал 40 баксов за игру Skater XL. Жена до сих пор не понимает, что я мог там усмотреть, так как в игре вообще нет геймплея. Но эту игру купил инженер во мне. Довольно интересно реализован микс из физического и анимационных движков.
Назови три, по твоему мнению, самые крутые игры и поясни, в чем их крутость
Supaplex – мне очень повезло, мой папа был программистом и я не могу припомнить, чтобы у меня дома не было персоналки. Так, 4 года примерно, я познакомился с головоломками Supaplex. Не могу сказать, что я любитель головоломок, но эти мне капитально запали в душу. Ах эти звуки из Писиспикера… Jagged Alliance 2 — примерно в шестом классе мой товарищ Дима дал диск «Агонии Власти» (в нашей локализации игра называлась именно так) и уверил, что мне понравится. И он был прав, мне очень понравилось. Но не сразу,— сначала я ничего не понял. До этого я не сталкивался с пошаговыми стратегиями. В то время все гоняли в CS 1.6 и Quake, поэтому в моей голове плохо укладывался не realtime. Потом в один момент, я понял, что это же шахматы, но только с наемниками, оружием, кучей статов, отношениями, финансовой системой, крафтом и потрясной озвучкой от Акеллы. Год назад снова ее распаковал и перепрошел. Я игрок довольно странный, меня не интересует графон и саундтрек, когда они ставятся во главу угла. Я из тех, кто будет ставить старые игры и упиваться геймплеем и их балансом. GTA 5 — Эталон. «Творю все, что хочу». Хотя под это понятие отлично подошла бы и вторая часть.Что доставляет наибольшую радость в твоей работе? В чем самый большой кайф?
Лично меня привлекает относительно быстрый результат. Изменишь несколько настроек – и вот уже твой оппонент превратился из медленного ленивца в скоростную турбо-занозу. В масштабе проекта, за несколько месяцев весь проект очень сильно меняется. И это очень просто увидеть и почувствовать. Всегда есть ощущение, что то, что ты делаешь, ведет к изменениям, это помогает не останавливаться.
Ну и, конечно же, ничто не сравнится с тем, что ты смотришь на YouTube видео игроков, которые используют механики, в разработках которых участвовали ты и твоя команда.
Какими качествами должен обладать крутой геймплей-программист? Как эти качества в себе развивать?
Я являюсь приверженцем не самого популярного мнения, что самое важное качество геймплей программиста – это коммуникабельность. Обилие взаимодействия с
представителями других департаментов, с издателями, с командами других программистов (часто распределенными) показывает, что умение находить связь и точки взаимопонимания крайне важно в случае, если вы преследуете общую цель.
Разумеется, все вышеприведенное имеет смысл только если присутствует должная техническая база: языки программирования, линейная алгебра, кинематика.
Как развивать коммуникабельность? Я в этом не спец, но, считаю, лучший стимул для развития – общение. Воспринимайте это, как инструмент, необходимый вам в работе, учитесь слушать, учитесь излагать свои мысли четко и компактно, вырабатывайте умение общаться конструктивно.
Следующим качеством в моем списке будет знание английского языка. Не стоит повторять, что большая часть книг и документации написана именно на нем и не имеет должных переводов, это очень важно для программистов, которые занимаются созданием новых систем. Очень часто работа геймплейщика представляет из себя адаптацию новой фичи в уже существующую кодовую базу. И тут оказывается, что имена методов и переменных задаются на английском языке. В такие моменты английский язык и Ctrl+Shift+ F – это лучшие друзья программиста. Сразу оговорюсь, если в коде вы встречаете ‘int bolshoeZnachenie = 300; потребуются более продвинутые инструменты для продуктивной работы.
Как относишься к инди? В какие инди-игры играл?
С миром инди я знаком довольно поверхностно. Из тех игр, с которыми познакомился, очень понравились Limbo и The Stanley Parable.
Расскажи какую-нибудь историю, связанную с твоей профессией и геймдевом?
Когда я пришел в геймдев (до этого я никогда не занимался играми), самая первая моя задача была следующей: четырёхногое животное при проигрывании анимации питья из водоема должно было учитывать угол наклона поверхности, на которой оно стоит и степень того, насколько оно уже находится в воде. Мне надо было согласовать мою идею с тех. аниматорами и дизайнерами, а потом реализовать ее.
Первая задача, точно не хочется упасть в грязь лицом. Я решил подойти к вопросу серьезно. За пару часиков на листке бумаги я набросал формулу, которая учитывала порядка 10 параметров, включая расстояния между костями головы и шеи, длину морды животного, допуски по тому, как глубоко можно опускаться в воду, и т.д. Я гордо продемонстрировал схему и свои рассчеты лиду (Ваня, привет!), на что он похвалил, но сказал, что есть альтернативный, чуть более простой вариант. Берем угол, умножаем на абстрактный коэффициент, который подберет дизайнер, и передаем результат в анимационный движок. Готово.