Высоконагруженные системы // Максим Барышников

Современная индустрия видеоигр: взгляд инженера

Facebook
Twitter
Google+
Pinterest
Vkontakte
Odnoklassniki
686 0
Что из себя представляет современная индустрия видеоигр, из чего состоит гэймдев, кем и как создается реалистичный физический мир, из чего состоит инфраструктура вокруг игры, куда ведет постоянная борьба за производительность на клиентских машинах, а также что может дать статистика крэшэй и анализ дампов.

Меня зовут Максим Барышников, я работаю в компании Wargaming, где руковожу подразделением под названием «Платформа». Мы отвечаем за инфраструктурные сервисы всех игр компании, то есть совокупность компонентов, которые не являются исключительно игрой. Например, аккаунты пользователей, хранение и обработка данных игроков, внутриигровая экономика, контекстная персонализация, социальные службы, монетизация и многое другое.

До «Платформы» я работал в группе разработки World of Tanks, где отвечал за серверную часть, также я знаком и с остальными аспектами производства игр, так как геймдев подразумевает набор очень плотно пересекающихся дисциплин, в которых довольно сложно работать обособленно.

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

Современная индустрия видеоигр

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

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

По оценкам, в 2020 году геймдев-рынок выросна 12–20 % по сравнению с 2019-м и достиг объема в $ 180 млрд, что, например, существенно больше, чем вся мировая киноиндустрия (~ $100 млрд в 2019). Быстрее всего в последние годы растет рынок мобильных игр (на 15 % — в 2019-м, на 25 % — в 2020-м). Чтобы понять, насколько это впечатляющие цифры, темпы роста можно сравнить с ростом мировой экономики (2–3 % — в период 2018–2019, падение на 3–4 % — в 2020, данные World Bank Group).

Структурно современная игровая индустрия состоит из нескольких уровней:

  • платформы (PC, консоли, мобильные устройства, VR, аркадные автоматы и т. п.);
  • игровые движки (программные системы, обеспечивающие инструментарий для разработки игр);
  • разработка игр;
  • издание и оперирование;
  • продвижение игр (маркетинг);
  • потребление.

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

Но в начале немного истории.

Зарождение и развитие индустрии компьютерных игр

Началом развития индустрии принято считать 1971 год и выход Computer Space, которая была далеко не первой созданной компьютерной игрой, но стала первой программой такого рода, предназначенной для коммерческого использования. Индустрия не может считаться таковой без коммерческой составляющей, так что начало эпохи аркадных автоматов, на которых и вышла Computer Space, можно смело принимать за точку отсчета.

В 1983 году случилась рецессия, обусловленная насыщением рынка аркадных устройств и появлением ПК, под которые игры научились делать довольно быстро. Но в течение следующих нескольких лет было не очень понятно, каким образом их массово продавать и защищать от копирования.

В целом индустрия продолжила развиваться. Например, появились первые специализированные печатные издания, посвященные видеоиграм.

Затем начался период системного становления. В 1990-е возник удобный формат дистрибуции — CD-ROM: в играх стали использовать первые технологии 3D-визуализации, гейм-дизайн начал обретать признаки системной области знаний, возникла совместная игра в клубах, начал зарождаться киберспорт. Значимым событием стало появление в 1994 году в Ванкувере первого учебного заведения для подготовки разработчиков игр.

В 2000-е годы в игровой индустрии произошло сразу несколько примечательных событий. Распространение интернета способствовало появлению онлайн-игр, Apple выпустила iOS, Google — Android, а Facebook начал привлекать сторонних разработчиков для создания игр на своей социальной платформе. Киберспорт расцвел. Fun fact: в Южной Корее StarCraft стал национальным видом спорта, который в буквальном смысле собирал стадионы.

Сейчас наибольший рост показывает сегмент мобильных игр, а VR-развлечения пока не получили массового распространения, несмотря на то, что стремятся к этому последние пять-семь лет. Онлайн самыми востребованными становятся игры с «длинной» моделью оперирования. Плюс разработчики стремятся делать их кросс-платформенными, всё больше конкурируя за время игрока. Киберспорт породил также интересный спин-офф в виде видеоблогинга, который, к слову, неплохо монетизируется.

Чем занимаются инженеры в индустрии видеоигр

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

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

Работа над игровым движком

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

  • управление ресурсами (загрузка, выгрузка, кеширование и т. п.);
  • графическая подсистема (отрисовка сцены);
  • подсистема симуляции физических явлений (взаимодействие твердых тел, симуляция тканей, жидкостей и т. п.);
  • Artificial Intelligence, или подсистема искусственного интеллекта;
  • сетевая подсистема;
  • набор вспомогательных подсистем, которые призваны экономить время разработки самой игры.

«Наукоемкой» работу над игровым движком делают требования к нему: высокая производительность, эффективность, надежность, универсальность, портируемость и так далее. Поскольку индустрия требует всё большей реалистичности во всех аспектах игр, то и движки вынуждены соответствовать, выжимая всё возможное из «железа». Иногда приходится идти до пределов возможного, а затем делать еще несколько шагов вперед. К примеру Quake III Arena, в которую играли, кажется, вообще все, была бы невозможна в том виде, в котором мы ее знаем, без довольно изобретательного способа вычисления обратного квадратного корня и магической константы 0x5f3759df.

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

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

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

Программирование геймплея

Самая обобщенная категория инженеров в геймдеве — программисты геймплея. Они претворяют в жизнь игровые механики и в целом собирают игру. Например, если вы делаете шутер от первого лица (FPS, first person shooter), то игровыми механиками будут: передвижение персонажей, стрельба, модель нанесения урона, специальные навыки персонажей и так далее.

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

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

Кстати, именно у геймплейщиков получаются самые смешные баги.

Разработка околоигровых сервисов

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

Эти сервисы чаще всего разрабатываются по абсолютно тем же принципам, что и бэкэнд современных онлайн-проектов. То есть здесь можно увидеть типичный микросервисный конгломерат, работающий где-нибудь в облаке. Соответственно, ожидания от разработчиков, требования к ним и состав работы тоже схожи.

Разработчики околоигровых сервисов чаще всего сталкиваются с высокими нагрузками в типичном понимании: нужно «держать» десятки тысяч запросов в секунду, обрабатывать гигабайты событий в час, хранить тера- и петабайты информации и так далее.

Мифы и заблуждения об игровой разработке

Разработчики — лентяи, которые на работе играют в компьютерные игры

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

Для того чтобы стать разработчиком игр, нужно быть геймером

Если вы дочитали до этого момента, то уже понимаете, что это не так. Значительная часть работы требует академических знаний, а не опыта игры. Сколько бы вы не играли в игры, вы не будете больше знать о том, как распространяется свет в пространстве, почему подповерхностное рассеивание света (subsurface scattering) важно для создания реалистично выглядящей кожи, почему освещение с трассировкой лучей в реальном времени иметь очень хочется, но тяжело получается и как сделать так, чтобы игроки, находящиеся в разных странах, могли без задержек играть в одном физическом пространстве, стреляя друг в друга и сталкиваясь корпусами. Идея, думаю, понятна.

Чтобы игра воспринималась реалистичной, в ней нужно всё нужно делать максимально приближенным к реальности

 В этом утверждении только часть правды, оно верно скорее для отдельных элементов игры. Например, сейчас большинство графических движков стремится использовать PBR (physically based rendering) — отрисовку сцены с использованием физических свойств материала. Это позволяет создавать картинку, в которой игровые объекты реагируют на окружение ожидаемым для игрока способом. Например, если опустить камень в воду, а затем достать, он должен намокнуть, иначе «сломается» реалистичность.

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

В своей лекции [выше] я говорю об этом подробнее и привожу несколько практических и часто контринтуитивных примеров, когда мы умышленно делаем спецэффекты недостоверными, для того чтобы игра воспринималась более реалистичной.

Можно ли сделать игру в одиночку?

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

В целом индивидуальная разработка (indie development) — неотъемлемая часть индустрии и не является сегодня чем-то сверхъестественным. Так что желающие могут смело пробовать.

Что еще почитать об индустрии видеоигр?

  • Материал о процессе создания игр, в том числе больших
  • Инструкцию, как сделать компьютерную игру в одиночку
  • Выступление Джареда Кона, ведущего инженера геймплея студии Psyonix, в котором он рассказывает о работе над игрой Rocket League
  • Объяснение процесса симуляции физики в видеограх
  • Технический доклад про генераторы случайных чисел, который дает неплохое понимание того, какого рода проблемы возникают у разработчиков игр в стандартных, казалось бы, вещах.

    ПОДПИШИСЬ НА НАШУ ТЕХНО-РАССЫЛКУ
    ПОДПИШИСЬ
    НА НАШУ ТЕХНО-РАССЫЛКУ