Как стать программистом игр? Профессия “Геймплей-программист”
Продолжаем наши беседы о том как стать разработчиком игр: Профессия Gameplay-программиста и рассказ Александра Балакшина о ней.
Расскажи о себе? Как пришел в геймдев? Где учился? Где/над чем сейчас работаешь?
Александр Балакшин, 33 года. Родился и вырос в Мурманске, после окончания школы поступил в МГТУ им. Баумана на аэрокосмический факультет, специальность прикладная математика. После ВУЗа занялся вещами далекими от разработки игр. Однако, спустя 5 лет решил все-таки исполнить свою мечту детства и уйти в игровую индустрию. В данный момент я тружусь в компании Sperasoft и “оказываю значительный вклад в сезонные обновления Rainbow Six: Siege” (прошу прощения за формулировку, не я ее придумал)
Были ли в детстве мечты/мысли о разработке игр? Может быть во что-то играл в детстве такое из-за чего захотелось делать именно игры? Почему именно программирование игр? Почему геймплей?
То, что хочу стать программистом я понял в 7 классе. То, что хочу разрабатывать игры, наверное, даже чуть раньше. Тогда в середине 90-х в России был настоящий бум связанный с видеоиграми. Сначала 8, а потом и 16-битные приставки (у меня была Sega). Параллельно существовали ПК игры. Я помню, как мы с друзьями околачивались в игровых магазинах, смотрели, подбирая слюни, на полки с картриджами и наблюдали как продавцы играли на различных консолях. В то же время появилась первая игровая пресса. Порой очень плохо сверстанная и с совершенно безграмотными текстами, но нам это казалось очень крутым. У меня и моего друга даже была мотивация ходить в местную детско-юношескую библиотеку – в ожидании свободного компьютера для пары часов игры в X-Com в зале периодики можно было полистать старые подшивки “Страны игр” и “Навигатора игрового мира”. Именно из этих журналов мы узнавали про таких людей как Джон Кармак, Джон Ромеро и Питер Мулинье. Хотя на мой взгялд самым качественным и интересным был game.exe – помимо прекрасного авторского слога и отличной верстки, в нем всегда был раздел, который рассказывал про основные технологии разработки. У меня в Мурманске до сих пор лежит весьма внушительная коллекция данного журнала.
Если говорить про любимые игры детства, то это ecco the dolphin, earthworm jim, x-com: enemy unknown, warcraft II, command & conquer, full throttle, quake (мультиплеер в нем был революцией), half-life и конечно же fallout 2.
Ну а первой компьютерной игрой для меня был Captain comic – отец взял меня как-то на работу и ему надо было чем-то занять 5-летнего сорванца.
Расскажи о работе Геймплей-программиста (для тех кто не представляет что это такое). В чем заключается работа? В чем заключается, какие задачи перед тобой стоят, как ты их решаешь?
Если говорить образно, то программист игровой логики – это повар, который из готовых ингредиентов, на специально оборудованной кухне с помощью всяких хитрых приспособлений готовит блюдо под утонченный вкус заказчика. В нашем случае ингредиенты – это игровые ассеты: модели, материалы, эффекты и т.д. Кухня – это игровой движок, в котором есть своя утварь – анимационная подсистема, рендер, физических движок, звуковая подсистема и т.д. Ну а утонченный вкус заказчика – это требования гейм-дизайнера, человека, который в общем и придумывает игру.
Какая рутина присутствует в ежедневной работе? Что больше всего утомляет, пожалуйся :)
К счастью, рутины как таковой последние 2 года не наблюдаю от слова совсем – все весьма динамично и однотипных задач не так уж и много. Ну а если нужно сделать практически тоже самое, что делали раньше, но “с розовыми пуговицами” и при этом нельзя эффективно переиспользовать существующий набор решений, то всегда можно попробовать новый, более совершенный подход и заодно, по возможности, переделать старый код (сделать рефакторинг). Наверно самое тяжелое, что есть в работе – это feature cut, когда уже почти готовый функционал, на который был потрачен не один месяц, откладывается на полку, а то и вообще выбрасывается. Причин для этого может быть множество: от банального “не успеваем сделать по срокам” до “не оправдывает ранее возложенных ожиданий”. Однако, на мой взгляд, такова специфика не только игровой разработки, но и вообще создания какого-либо конечного продукта. Так что к этому стоит относиться нормально, абсолютно спокойно и c некоторой долей юмора.
Расскажи о процессе создания игры с точки зрения геймплей-программиста? Какая у тебя зона ответственности? Какие этапы претерпевает игра, как ты способствуешь тому чтобы она стала крутой? С кем еще из команды ты взаимодействуешь?
Обязанность игрового программиста – собрать все воедино, поэтому общаться приходится и с техническими художниками, и с аниматорами, и со звуковыми инженерами и конечно самое главное – с гейм дизайнерами. Мы воплощаем идеи последних в жизнь и по сути являемся их техническим альтер-эго. Причем поскольку нам известно, как все (или почти все) устроено изнутри, то оценивая сложность реализации той или иной идеи мы по возможности стремимся выбрать наиболее оптимальное решение. Конечно, наши «рацпредложения» далеко не всегда находят отклик среди коллег и тогда уже приходится работать по-настоящему искать новые подходы и проявлять смекалку.
Если же говорить про этапы разработки, то их можно выделить три:
1. Prototyping или pre-production. Главная задача – максимально быстро реализовать идею. Качество кода неважно, главное доказать, что оно работает и в это весело играть. Иногда, конечно, приходится делать чуть более детальные исследования, связанные, например, с производительностью. Если в определенные моменты самая оптимальная реализация предлагаемой идет является причиной слайд-шоу в 5 кадров в секунду на основных платформах (как правило текущее поколение консолей + PC минимальной поддерживаемой конфигурации), то эту фичу скорее всего не возьмут в дальнейшую разработку.
2. Production. Непосредственно создание той или иной игровой механики. Именно на этом этапе идет максимальное взаимодействие с остальными участниками разработки. Правда даже на этом этапе, требования могут меняться (причем весьма радикально) и порой приходиться переделывать достаточно большое количество уже написанного кода, а то и вообще отказываться от тех или иных идей. Однако здесь в отличие от прототипирования нужно делать все максимально хорошо и качественно. Как следствие цена переделки достаточно высока.
3. Polishing. Наконец, когда все нужные механики и идеи реализованы, нужно, чтобы все работало максимально стабильно, быстро и красиво. По большей части – это багофикс (исправление ошибок). Тем не менее, даже в этот момент могут возникнуть требования равно как на добавление каких-то небольших новых элементов, равно так и на удаление лишних.
В какие игры играешь сейчас? Чем вдохновляешься? Какие последние игры прошел? Любимые жанры?
С тех пор как начал заниматься разработкой, из-за нехватки времени играю крайне редко. Так что мой последний ААА опыт как игрока связан с hitman absolution, который застрял где-то на
середине. А прошел, если не изменяет память, tomb raider 2013. Хотя список того, во что хочется поиграть у меня есть и очень надеюсь, что доберусь до него раньше пенсии. Но поскольку следить за тем что происходит нужно как минимум с профессиональной точки зрения, то основной моей игровой платформой является youtube. Иногда смотрю let’s play не только новинок, но и некоторых старых вещей, на которые в свое время также не хватило времени.
Есть ли какой-то особый жанр игр или может быть известная франшиза, в которой хотелось бы поучаствовать?
С удовольствием поработал над чем-нибудь на Frostbite. Тот же Anthem выглядит крайне интересным. Очень хочется поработать над single player open-world adventure типа horizon zero dawn.
А так есть мечта сделать свою игру. Большую и красивую. И даже идея есть. Но пока для этого немного рановато.
Как относишься к инди? В какие инди-игры играл? Нравятся ли какие-то инди от наших соотечественников? Кому задонатил? :)
Не сказать, что я слежу за инди сценой слишком уже пристально. Хотя некоторые вещи просто не могут пройти мимо внимания. Например, совергенно потрясающий Monument valley. Ну а Limbo от Playdead – это вообще шедевр. На мой взгляд, люди, рискующие создавать свои игры минимально доступными средствами и во многом на чистом энтузиазме, безусловно заслуживают уважения. С другой стороны, благодаря возросшей доступности и развитию таких крутых игровых движков как Unity и Unreal engine, в последнее время появилась категория так называемых AA проектов – игр максимально близких по качеству (как минимум визуальной составляющей) к крупным AAA тайтлам, но сделанным сравнительно небольшими командами и со значительно более скромными бюджетами. Ярчайший пример – недавно вышедший Hellblade: Senua’s Sacrifice.
Еще одним любопытным примером являются Coldwood и их Unravel – шутка ли 18 человек делают совершенно потрясающую по красоте игру. При этом для разработки использовался не очень уж и популярный PhyreEngine. Немудрено, что EA обратили на них свой пристальный взор.
Касательно доната, я предпочитаю избегать микро транзакций, по мне лучше уж заплатить полную цену игры. Хотя кто знает, как оно будет в будущем – в том же star citizen, который еще не вышел, к существующим платежам достаточно тяжело применить приставку «микро». Однако, с учетом того, сколько стоит по времени даже «банальное» создание всяких шкурок для некоторых игр, их цена кажется вполне оправданной.
Есть ли какая-то профессиональная деформация? Как играются “чужие” игры когда ты сам разработчик?
По большей части предпочитаю просто расслабиться и получить удовольствие от игры. Хотя подсознательно все-равно начинаешь смотреть на игру как на набор механик. Пытаешься вычленить какие из них составляют core gameplay, какие support, а какие просто приятные фичи. Скорее всего этому более подвержены гейм-дизайнеры, но поскольку работать с ними приходится весьма плотно, то поневоле сам начинаешь обращать внимание на такие моменты.
Репортишь ли баги разработчикам? Возникает ли желание проверить какое-то поведение NPC, например? Может быть чем-то вдохновляешься, берешь идеи из других игр?
Поскольку играю редко, то нет. Тут скорее наоборот – предпочитаю сам смотреть фидбэк от пользователей (привет reddit). В плане идей и вдохновения – очень интересно смотреть доклады с GDC. В прошлом году Blizzard со своей entity component system для Overwatch произвели настоящий фурор. Недаром те же unity technologies добавили нечто подобное в свежую версию своего движка. Пусть даже и пока в experimental форме.
Что доставляет наибольшую радость в твоей работе? В чем самый большой кайф?
Каждая реализованная фича, которая работает как надо – это всегда маленькая победа и радость. Ну а когда результат твоей работы становится доступен пользователям, то это ни с чем, не передаваемое ощущение.
Посоветуй что-то ребятам, которых привлекает разработка игр и работа геймплей-программиста? Как начинать? С чего начинать? В какой ВУЗ поступить? Какие предметы ботать? Где поучиться нахаляву?
Перво-наперво выучите английский язык. С ним вам станет доступна львиная доля информации, связанной с игровой разработкой (и не только). Если Вы еще учитесь в школе, то начните изучать основы программирования. В принципе подойдет любой язык, который вам позволит освоить основные конструкции, алгоритмы и структуры данных. Параллельно выберите ВУЗ с хорошей технической составляющей. Конечно же я с удовольствием могу порекомендовать свою альма-матер – МГТУ им. Баумана – помимо сильной школы по фундаментальным дисциплинам, университет активно сотрудничает с различным компаниями, в области дополнительного образования и практики. В особенности в последнее время – яркий пример проект «Технопарк» совместно с mail.ru. Однако помимо этого есть внутриуниверситетские лаборатории и научно-образовательные центры, где можно получить ценнейшую практику, в том числе и по программированию. Безусловно есть целая плеяда Российских ВУЗов, на которые стоит обратить внимание: МГУ, МФТИ, СПбГУ, НГУ, МТУСИ, ИТМО, МИРЭА и т.д. Однако, если в силу тех или иных причин у Вас не получится поступить в какой-либо университет из вышеупомянутого списка, не отчаиваетесь. Практически в любом государственном университете Вам расскажут необходимые дисциплины на должном уровне. Главное на что стоит обратить внимание, на мой взгляд, – это математический анализ, физика, линейная алгебра, численные методы и теория вероятности.
Тем более что для игровой индустрии, львиную долю знаний (в особенности все, что касается программирования) вам придется получать самостоятельно. Благо источников сейчас предостаточно. Есть много хороших и бесплатных курсов на coursera. Лично для себя я выделил лекции по алгоритмам от Tim Roughgarden из Стэнфорда. У них сейчас есть даже целый цикл со специализацией https://ru.coursera.org/specializations/algorithms
Конечно же стоит попробовать самостоятельно изучить любой из ныне доступных игровых движков, например, Unity или Unreal Engine. На сайтах этих компаний есть бесплатные, весьма подробные туториалы. Плюс у этих технологий очень развитое сообщество и найти необходимую информацию не составит большого труда. Ну и самое главное, они активно применяются в разработке так что Вам будет проще найти первую работу.
Отдельно хотел бы порекомендовать участие в различных игровых хакатонах. И желательно чтобы это было оффлайн (например, на выходных). Неважно выиграете ли вы или нет. Более того вы даже можете не закончить ваш прототип за указанный срок. Однако объем знаний и опыта полученный за это сравнительно небольшое время может быть просто колоссальным. Более того,
Вы можете познакомиться с такими же энтузиастами, только более опытными, которые покажут и расскажут вам что к чему. Лично мне в свое время это очень помогло.
Какими качествами должен обладать крутой программист? Как эти качества в себе развивать?
Всегда должна быть тяга к знаниям. Даже если Вам кажется, что вы знаете все в своей предметной области, обратите внимание на смежные дисциплины или даже вещи, абсолютно на первый взгляд, не связанные с программированием. Как яркий пример – знание биологии позволяет рендер-программистам создавать достоверные модели освещения глаз и кожи, а специалисты по анимации руководствуются реальным поведением животных для создания их в игре. Никогда не знаешь откуда тебе придет ответ на тот или иной вопрос. Поэтому постоянно развивайтесь и изучайте что-то новое: смотрите доклады, читайте статьи и книги, проходите онлайн-курсы.
При решении задач, выработайте аналитический подход: старайтесь разбить сложные вещи на набор более простых. Ищите аналогии в существующем коде и определите, что вы можете переиспользовать, а что нет.
Всегда стремитесь сделать все максимально хорошо, однако не будьте перфекционистом. Иногда приходится поступиться «красотой» кода ради нужд стабильности или производительности. Как следствие стремитесь все написать максимально просто, но опять же не превращайте свою программу равно как в набор костылей, равно так и в зоопарк паттернов. Умейте найти золотую середину. Это придет со временем и опытом.
Не привязывайтесь к написанному вами коду. Он может быть изменен или вообще убран из проекта в любой момент. И дело даже не в качестве его исполнения, просто как я уже говорил в игровой разработке требования меняются достаточно часто, поэтому ситуации, когда месяцы работы уходят в небытие отнюдь не редкость. Воспринимайте это спокойно.
Ну и самое главное – умейте общаться с коллегами. Как правило вы реализуете не только свое видение игры, а в первую очередь то, как представляют ее гейм-дизайнеры и художники. Находите общие точки соприкосновения и стремитесь максимально ясно понимать, что от вас хотят в конечном виде. Конечно же стоит быть проактивным, и делиться своими идеями с коллегами, если, на Ваш взгляд, существует более рациональный подход к решению той или иной задачи. Но при этом также умейте слушать и относитесь с уважением к чужому мнению.
Рассажи какую-нибудь историю связанную с геймдевом, программированием геймплея? Забавную или драматическую
Как-то раз на одной из моих предыдущих работ пришлось обновлять версию приложения, которая пролежала без апдейтов где-то год. С учетом различных платформ, работы было где-то на 2 недели минимум. Плюс оказалось, что нужно еще обновить версию под Unity WebPlayer, который на тот момент уже официально не поддерживался ни одним браузером. Когда же все было успешно закончено, нам сообщили радостную новость, что мы прекращаем поддержку данной версии игры и вообще удаляем его из всех магазинов. Это является одной из наглядных иллюстраций того, что иногда работа, которую делает программист может быть спокойно выброшена. И с точки зрения экономики или интересности проекта это будет абсолютно правильным решением. К подобным ситуациям стоит относиться спокойно и немножко с юмором. Мы с коллегами называли такие задачи «покраской травы».
С другой стороны, иногда случалось, что идеи, оформленные в виде прототипов и отложенные на неопределенный срок в виду тех или иных причин (сложность исполнения, нехватка ресурсов, недостаточно интересно и т.д.) возвращались спустя почти год, обретали новую жизнь и делали игру лучше. Лично для меня такие моменты – одни из самых любимых и мотивирующих.
Отличное интервью и собеседник!