Программист видеоигр
Программист видеоигр (англ. game programmer) — специалист в области разработки программного обеспечения, программист или учёный-компьютерщик, занимающийся созданием исходных кодов для видеоигр и связанного с ними программного обеспечения, например, инструментов для разработки игр. Программирование видеоигр включает множество узкоспециализированных дисциплин, все из которых объединяются термином «программист видеоигр»[1][2][3].
История
В ранний период развития видеоигр (с начала 1970-х до середины 1980-х годов) программист видеоигр часто одновременно выполнял функции дизайнера и художника. Это было связано с низкими техническими возможностями ранних компьютеров, из-за чего специализация по функционалу была излишней. Концепции были просты, игры создавались для кратковременного времяпрепровождения, а графика и разнообразие игрового процесса ограничены вычислительной мощностью.
Позднее развитие специализированного аркадного железа и домашних систем дало возможность разрабатывать более глубокие сюжетные линии, использовать графику высокого разрешения с полной цветопередачей, физику, сложный искусственный интеллект и цифровой звук. С развитием технологий современные игры обычно используют трёхмерную графику и полноэкранное видео с ресурсами, созданными профессиональными графическими художниками. Со временем появился пренебрежительный термин «программистское искусство», описывающий яркие цвета и примитивный дизайн, свойственные ранним видеоиграм.
Стремление увеличить глубину и разнообразие содержания игр привело к разделению труда. Первоначально художественное оформление стало отдельной задачей, возложенной на профессиональных художников. Позже программирование видеоигр выделилось в отдельную дисциплину, отличную от дизайна видеоигр. В современных условиях только самые простые игры, такие как головоломка Bejeweled, требуют одного полного рабочего программиста. Несмотря на разделение труда, большинство разработчиков — художники, программисты и даже продюсеры — имеют влияние на конечный дизайн современных игр.
Дисциплины
Современная видеоигра может включать продвинутую физику, искусственный интеллект, 3D-графику, оцифрованный звук, оригинальное музыкальное сопровождение, сложную стратегию и поддержку нескольких устройств ввода (мышь, клавиатура, геймпад, джойстик) и быть рассчитанной на сетевую игру через Интернет или локальную сеть. Каждый из этих аспектов может потребовать полной занятости отдельного программиста или даже группы специалистов. Некоторые программисты специализируются в одной области, многие знакомы с несколькими аспектами сразу. Количество программистов зависит как от их квалификации, так и от типа разрабатываемой игры.
Программисты игрового движка разрабатывают базовый движок игры, включая физику и графическую составляющую[4]. Всё чаще в видеоиграх используются готовые игровые движки — коммерческие, открытые или бесплатные. Обычно они дорабатываются под нужды конкретной игры, и эти доработки осуществляют программисты движка.
Такой программист создаёт модули, отвечающие за физическую симуляцию в игре[5]. Как правило, симулируются только необходимые физические аспекты (например, гравитация для космических игр, но без учёта вязкости воды).
Поскольку процессорное время всегда ограничено, зачастую используются упрощённые, но достаточно реалистичные для игры физические модели. Иногда применяется намеренно неправдоподобная физика для облегчения игры или создания особого «эффекта». Также возможна предопределённая физика с хранением результатов возможных ситуаций без вычислений во время запуска приложения.
Некоторые программисты физики внедряют обратную кинематику и другие сложные движения персонажей, однако всё чаще эти задачи реализуют с помощью библиотек захвата движения, чтобы избежать загрузки ЦП сложными расчётами.
Исторически этот специалист писал оптимизации и алгоритмы для двумерной графики (например, битблиттеры). В наши дни роль «программиста графики» подразумевает специалистов по движкам трёхмерной графики. Умения работы с 2D-графикой вновь стали востребованы для игр на современных мобильных телефонах и карманных консолях.
3D-программист должен хорошо разбираться в математике: векторах, матрицах, кватернионах и линейной алгебре.
Квалифицированные специалисты в этой области обычно востребованы и высокооплачиваемы, их часто не хватает на рынке труда.
Программист ИИ разрабатывает логику, позволяющую имитировать интеллект врагов и противников[6]. Это относительно молодая, но стремительно развивающаяся отрасль. Специалист занимается программированием поиск пути, стратегических и тактических решений. Для реализации сложных систем современные игры выделяют на ИИ около 10-20 % штата программистов[7].
Тип использования ИИ зависит от жанра: стратегические игры (например, Civilization III) или ролевые игры (например, The Elder Scrolls IV: Oblivion) широко используют ИИ, тогда как в головоломках его применяют редко. Во многих игровых компаниях созданы собственные языки сценариев для реализации ИИ с помощью скриптов. Эти системы доступны и для дизайнеров игр, и для игроков (например, для сторонних модификаций).
Игровой ИИ не следует путать с академическим искусственным интеллектом: хотя они заимствуют решения друг у друга, это самостоятельные направления. Однако возможны пересечения — к примеру, игра Black & White от студии Lionhead Studios реализует уникальный подход с обучаемым существом на основе методов машинного обучения[8]. В последние годы всё больше внимания уделяется интеграции современных исследований по ИИ и игровых ИИ-технологий.[9][10][11][12]
Звуковое программирование существует с времён Pong как отдельная или совмещённая задача. Большинство игр используют звук, некоторые имеют полновесный оркестровый саундтрек. В аудиоиграх звук зачастую становится главным каналом обратной связи, полностью заменяя графику[13].
Многие современные игры используют такие технологии, как трёхмерный позиционный звук, что делает программирование аудиосистем нетривиальной задачей. В крупных проектах над аудиодвижком могут работать несколько человек, специализирующихся на цифровой обработке сигналов.
Часто звуковые программисты создают или поддерживают инструменты для звукорежиссёров. Эти инструменты позволяют связывать звуки с персонажами, событиями, окружением и задавать музыкальные или атмосферные эффекты, а также параметры среды (например, реверберация).
Хотя все программисты играют роль в формировании внутреннего содержания и ощущений игры, программист игрового процесса (геймплея) фокусируется на реализации игровых механик и логики, а также на «ощущении» игры. Эта специализация часто пересекается с другими, и один человек может отвечать за разные области — от графики до звука.
Такой программист реализует таблицы стратегий, подправляет обработку ввода и иные параметры, влияющие на игровой процесс, в том числе те, что касаются других специализаций (например, стратегии могут реализовываться программистами ИИ).
В эпоху ранних видеоигр весь игровой контент — например, появление врагов, ключей и текстов на экране — кодировался непосредственно программистом на C либо ассемблере.
В современных проектах основной игровой движок отделён от игровой логики и наполнения. Игровой движок занимается рендерингом, звуком, физикой и другими системами, тогда как сценарные языки управляют кат-сценами, поведением врагов и целями. Крупные студии могут иметь отдельную команду скриптеров для реализации игрового контента.
Скриптеры часто являются и дизайнерами. Проще найти дизайнера, которого можно обучить основам языка сценариев, чем того, кто освоил C++.
Этот специалист разрабатывает пользовательский интерфейс (UI) для игр[14]. Часто он создаёт библиотеку, используемую во множестве проектов. Современные интерфейсы, вслед за остальной игрой, часто используют 3D-технологии, поэтому знания математики трёхмерных систем важны и здесь. Продвинутые UI могут поддерживать скрипты и специальные эффекты (прозрачность, анимация, эффекты частиц).
Программирование ввода — важная, хотя и не всегда формально выделяемая задача: пишется код, управляющий обработкой событий с клавиатуры, мыши, геймпада, джойстика. Эти рутинные части создаются в начале проекта и дорабатываются по мере его развития. Сложность работы зависит от требований: так, игры с контроллерами движения (Wii Remote, Kinect) нуждаются в сложной, низкозадерживающей обработке сигналов, в отличие от пошаговых стратегий.
Создаёт код для сетевого режима — мультиплеер, кооперативная игра через LAN, Интернет или иногда через прямое соединение (модем)[15]. Часто эта задача требует полного рабочего времени одного или нескольких специалистов: необходимо решать вопросы сетевой задержки, сжатия пакетов, обрывов соединения и др. Реализация сетевых протоколов может быть серьёзной головной болью для команды — иногда сетевой компонент откладывается до последних месяцев работ, что добавляет трудностей. Некоторым играм, например Virtua Fighter 5 для PlayStation 3, сетевой режим изначально «вырезали» из-за нехватки ресурсов или времени[16].
Этот специалист занимается созданием внутренних инструментов — конвертеров, редакторов уровней, импортёров ресурсов, построителей скриптов[17]. Многие инструменты выпускаются как коммерческие продукты, например, IDE или графические редакторы, но программисты инструментов разрабатывают ПО, не имеющее коммерческих аналогов, под конкретные нужды студии. Например, для приключенческой игры нужен редактор разветвлённых диалогов, для спортивных — менеджер составов команд и их статистик. Такие программы не доступны конечным пользователям.
Портирование игр на другие платформы всегда было значимой задачей: некоторые программисты специализируются на адаптации игры к другой операционной системе или устройству (например, с ПК на мобильный телефон). Иногда «портирование» оборачивается фактической переработкой с нуля — из-за различий в языках, оборудовании или инструментарии.
Такой программист должен разбираться в обеих ОС и языках, уметь преобразовывать ассеты (графику и звук), оптимизировать код под ограничения целевых устройств, обходить ошибки платформы, рефакторить код, работать с несколькими ветками исходников, реализовывать поддержку разных разрешений и придерживаться технических требований производителя устройств. Часто приходится исправлять ошибки оригинальных версий.
Эта должность чаще встречается в крупных студиях с отдельными отделами R&D. Технологический программист не привязан к одному проекту, чаще работает напрямую с техническим директором. Работа требует глубинных знаний аппаратной части платформы: реализация новых алгоритмов, низкоуровневая оптимизация, решение задач оптимизации памяти и кеширования на завершающих стадиях. Эта специализация во многом перекрывается с задачами графических программистов.
В малых командах один или несколько программистов берут на себя задачи по разным специализациям в зависимости от необходимости. Обычно «универсалы» занимаются поиском и локализацией ошибок, определяя, к какой подсистеме они относятся.
Ведущий программист отвечает за всё программирование игры: следит за правильностью реализации всех подсистем и контролирует ход разработки с инженерной точки зрения. Обычно такой специалист переходит в роль руководителя после многих лет другой профильной работы. Ведущий тра тит меньше времени непосредственно на код, но всё же предусматривается программирование определённой части системы и высокая техническая компетентность во всех аспектах игры. Часто функции технического директора и ведущего программиста объединяет один человек.
Платформы
Программисты видеоигр могут специализироваться по платформам — например, Wii U или Microsoft Windows. Один специалист может совмещать знание конкретного игрового направления с владением определённой платформой — отсюда, например, должность «программист 3D-графики для PlayStation 3». Некоторые дисциплины, например ИИ, адаптируются к любой платформе. Базовые принципы — программирование графики, работа со звуком, дизайн интерфейса — также универсальны.
Образование
Многие программисты видеоигр не имеют формального образования в этой области, начав как энтузиасты, программисты-самоучки. Со временем успеха достигают благодаря врождённым склонностям и самостоятельному опыту. Большинство вакансий требует высшего образования (в области математики, физики, компьютерных наук или эквивалентного опыта).
Постепенно университеты вводят курсы и программы по программированию игр. Эти направления сильно пересекаются с компьютерными науками и разработкой программного обеспечения.
Заработная плата
Зарплаты программистов видеоигр зависят от компании и страны. В целом, они примерно соответствуют аналогичным должностям в бизнес-сфере, несмотря на более высокий уровень сложности и обычно большие переработки.
Согласно исследованию в США (2010), средняя зарплата программиста видеоигр составляет 95 300 долларов США в год. Специалисты с опытом менее трёх лет получают более 72 000 долларов, а опытные (от 6 лет стажа) — более 124 000 долларов в год[18].
Ведущие программисты обычно наиболее высокооплачиваемы, хотя отдельные специалисты (например, по 3D-графике) могут получать столько же или больше. В том же исследовании средняя зарплата ведущего программиста — 127 900 долларов в год[19].
Профессиональная стабильность
Несмотря на то, что продажи видеоигр сравнимы с доходами других индустрий развлечений (например, кино), индустрия видеоигр отличается высокой волатильностью. Программисты не защищены от кризисов, связанных с финансовыми проблемами работодателей.
Большинство сторонних разработчиков зависят от регулярных инвестиций со стороны издателей игр. В случае задержек, отмены проектов или других проблем финансирование может сократиться, компания вынуждена увольнять сотрудников или даже объявлять банкротство. Даже крупнейшие издатели могут прекратить существование (пример — продажа Hasbro Interactive компании Infogrames с отменой ряда проектов, либо банкротство The 3DO Company в 2003 году). Некоторые программисты вынуждены часто менять место работы, переходя из одной закрывающейся студии в другую[20]. По этой причине ценятся специалисты, работающие на условиях консалтинга.
Языки и инструменты
Большинство коммерческих компьютерных и видеоигр пишутся на C++, C и частично на ассемблере. Многие игры, особенно с продвинутыми игровыми механиками, максимально используют возможности аппаратуры, что требует высоко оптимизированного кода для приемлемого быстродействия. По этой причине критические по производительности компоненты — визуализация и физика — реализуются на компилируемых языках. Для обмена данными с оборудованием в играх для ПК используются DirectX или OpenGL, а также различные библиотеки-обёртки.
Для генерации контента (геймплей, особенно ИИ) используются скриптовые языки (Ruby, Lua, Python) — они обычно компилируются при загрузке уровня (а не интерпретируются в реальном времени), что ускоряет работу программы. Скрипты позволяют реализовывать ИИ и логику верхнего уровня без затрат на повторную компиляцию основного кода. Часто в процессе оптимизации отдельные скриптовые функции переписывают на компилируемом языке.
Java применяют для браузерных игр, поскольку этот язык кроссплатформенный, не требует установки и обычно безопаснее с точки зрения безопасности, чем локальное ПО. Java также популярен в мобильных играх. Adobe Flash (с языком ActionScript) и JavaScript — ещё одни средства создания браузерных игр.
По мере усложнения игр всё большую роль играет промежуточное ПО (middleware), обеспечивающее более высокий уровень функций по сравнения с базовыми API вроде DirectX/OpenGL (например, скелетная анимация). Главная задача middleware — избавить команду от рутинных задач, повторяющихся от проекта к проекту, и упростить портирование (например, с Windows на PlayStation 4).
Необходимы и другие инструменты: 2D/3D-графические редакторы (Blender, GIMP, Photoshop, Maya, 3D Studio Max) для просмотра и корректировки ассетов; системы контроля версий для безопасного хранения исходников; IDE с отладчиками (например, Visual Studio) для разработки и отладки кода.
Примечания
Литература
- Bates, Bob. Game Design : [англ.]. — 2nd. — Thomson Course Technology, 2004. — ISBN 1-59200-493-8.
- Moore, Michael E. Game Industry Career Guide : [англ.] / Michael E. Moore, Jeannie Novak. — Delmar : Cengage Learning, 2010. — ISBN 978-1-4283-7647-2.
- Evans, Richard. AI Game Programming Wisdom : [англ.]. — Charles River Media, 2002. — ISBN 1-58450-077-8.
Ссылки
- Рекомендации Тома Слопера, ветерана индустрии, по программированию игр
- Профессия программиста на сайте Eurocom (архивировано 7 ноября 2007)