Игровой программист — это инженер- программист , программист или компьютерный ученый , который в первую очередь разрабатывает кодовые базы для видеоигр или связанного с ними программного обеспечения , такого как инструменты разработки игр . Игровое программирование имеет множество специализированных дисциплин, все из которых подпадают под общий термин «игровой программист». [1] [2] Игрового программиста не следует путать с игровым дизайнером , который работает над игровым дизайном . [3]
В ранние дни видеоигр (с начала 1970-х до середины 1980-х годов) программист игр также брал на себя работу дизайнера и художника . Это было связано с тем, что возможности ранних компьютеров были настолько ограничены, что наличие специализированного персонала для каждой функции было ненужным. Игровые концепции, как правило, были легкими, и игры предназначались только для нескольких минут за раз, но, что более важно, художественный контент и вариации игрового процесса были ограничены ограниченной мощностью компьютеров.
Позже, когда специализированное аркадное оборудование и домашние системы стали более мощными, разработчики игр смогли разрабатывать более глубокие сюжетные линии и могли включать такие функции, как графика высокого разрешения и полноцветная графика, физика , продвинутый искусственный интеллект и цифровой звук . Технологии продвинулись до такой степени, что современные игры обычно могут похвастаться 3D-графикой и полноценным видео с использованием ресурсов, разработанных профессиональными графическими художниками . В настоящее время уничижительный термин « программистское искусство » стал подразумевать яркие цвета и блочный дизайн, которые были типичны для ранних видеоигр.
Желание добавить больше глубины и активов в игры потребовало разделения труда . Первоначально создание искусства было передано штатным художникам . Программирование следующей игры стало отдельной дисциплиной от игрового дизайна . Теперь только некоторые игры, такие как игра-головоломка Bejeweled , достаточно просты, чтобы требовать всего одного штатного программиста. Однако, несмотря на это разделение, большинство разработчиков игр (художники, программисты и даже продюсеры ) имеют некоторое право голоса в окончательном дизайне современных игр.
Современная видеоигра может включать в себя развитую физику, искусственный интеллект, 3D-графику, оцифрованный звук, оригинальное музыкальное сопровождение, сложную стратегию и может использовать несколько устройств ввода (таких как мыши , клавиатуры , геймпады и джойстики ) и может быть играбельной против других людей через Интернет или по локальной сети . Каждый аспект игры может занять все время одного программиста и, во многих случаях, нескольких программистов. Некоторые программисты могут специализироваться в одной области игрового программирования , но многие знакомы с несколькими аспектами. Количество программистов, необходимых для каждой функции, в некоторой степени зависит от навыков программистов, но в основном диктуется типом разрабатываемой игры.
Программисты игровых движков создают базовый движок игры, включая симулированную физику и графические дисциплины. [4] Все чаще видеоигры используют существующие игровые движки , как коммерческие, так и с открытым исходным кодом или бесплатные . Их часто настраивают под конкретную игру, и эти программисты занимаются этими модификациями.
Программист игровой физики занимается разработкой физики, которую будет использовать игра. [5] Обычно игра будет имитировать только несколько аспектов физики реального мира. Например, космическая игра может нуждаться в имитации гравитации , но не будет нуждаться в имитации вязкости воды .
Поскольку циклы обработки всегда в цене, программисты физики могут использовать «сокращения», которые являются недорогими в вычислительном отношении, но выглядят и действуют «достаточно хорошо» для рассматриваемой игры. В других случаях нереалистичная физика используется для облегчения игрового процесса или для драматического эффекта. Иногда указывается определенное подмножество ситуаций, и физический результат таких ситуаций сохраняется в записи определенного рода и вообще никогда не вычисляется во время выполнения.
Некоторые программисты физики могут даже углубиться в сложные задачи обратной кинематики и других движений, приписываемых игровым персонажам, но все чаще эти движения назначаются через библиотеки захвата движения , чтобы не перегружать центральный процессор сложными вычислениями.
Исторически это звание обычно принадлежало программисту, который разрабатывал специализированные алгоритмы блиттера и умные оптимизации для 2D-графики . Однако сегодня оно почти исключительно применяется к программистам, которые специализируются на разработке и модификации сложных 3D- графических рендереров. Однако некоторые навыки 2D-графики только недавно снова стали полезными для разработки игр для нового поколения мобильных телефонов и портативных игровых консолей .
Программист 3D-графики должен иметь прочные знания в области сложных математических концепций, таких как векторная и матричная математика, кватернионы и линейная алгебра .
Опытные программисты, специализирующиеся в этой области разработки игр, могут требовать высокую заработную плату и, как правило, являются дефицитным товаром. [ необходима ссылка ] Их навыки можно использовать для видеоигр на любой платформе .
Программист ИИ разрабатывает логику времени для имитации интеллекта врагов и противников. [6] Недавно это превратилось в специализированную дисциплину, поскольку эти задачи раньше выполнялись программистами, которые специализировались в других областях. Программист ИИ может программировать системы поиска пути , стратегии и тактики противника. Это один из самых сложных аспектов программирования игр, и его сложность быстро развивается. Современные игры посвящают примерно 10-20 процентов своего персонала по программированию ИИ. [7]
Некоторые игры, такие как стратегические игры, такие как Civilization III , или ролевые видеоигры, такие как The Elder Scrolls IV: Oblivion , активно используют ИИ, в то время как другие, такие как головоломки , используют его умеренно или вообще не используют. Многие разработчики игр создали целые языки , которые можно использовать для программирования собственного ИИ для игр с помощью скриптов . Эти языки, как правило, менее техничны, чем язык, используемый для реализации игры, и часто используются дизайнерами игр или уровней для реализации мира игры. Многие студии также делают скрипты своих игр доступными для игроков, и они часто широко используются сторонними разработчиками модов .
Технологию ИИ, используемую в программировании игр, не следует путать с академическим программированием и исследованием ИИ . Хотя обе области заимствуют друг у друга, их обычно считают отдельными дисциплинами, хотя есть и исключения. Например, игра 2001 года от Lionhead Studios Black & White представляет собой уникальный подход ИИ к управляемому пользователем существу , которое использует обучение для моделирования поведения во время игры. [8] В последние годы все больше усилий направляется на многообещающие области исследования ИИ и программирования игрового ИИ. [9] [10] [11] [12]
Не всегда отдельная дисциплина, звуковое программирование было основой игрового программирования со времен Pong . Большинство игр используют аудио, и многие имеют полную музыкальную партитуру. Компьютерные аудиоигры вообще избегают графики и используют звук в качестве основного механизма обратной связи. [13]
Во многих играх используются передовые технологии, такие как 3D-позиционный звук , что делает программирование звука нетривиальным делом. В этих играх один или два программиста могут посвятить все свое время созданию и совершенствованию игрового звукового движка, а программисты звука могут быть обучены или иметь формальный опыт в области цифровой обработки сигналов .
Инструменты для создания скриптов часто создаются или поддерживаются звуковыми программистами для использования звуковыми дизайнерами . Эти инструменты позволяют дизайнерам связывать звуки с персонажами, действиями, объектами и событиями, а также назначать музыку или атмосферные звуки для игровых сред (уровней или областей) и устанавливать переменные среды, такие как реверберация.
Хотя все программисты добавляют контент и опыт, предоставляемые игрой, программист геймплея больше фокусируется на стратегии игры, реализации игровой механики и логики и «ощущении» игры. Обычно это не отдельная дисциплина, так как то, что делает этот программист, обычно отличается от игры к игре, и он неизбежно будет вовлечен в более специализированные области разработки игры, такие как графика или звук.
Этот программист может реализовать таблицы стратегий, настроить входной код или настроить другие факторы, которые меняют игру. Однако многие из этих аспектов могут быть изменены программистами, которые специализируются в этих областях (например, таблицы стратегий могут быть реализованы программистами ИИ).
В ранних видеоиграх программисты игрового процесса писали код для создания всего игрового контента — если игрок должен был выстрелить в определенного врага, а на экране должна была появиться красная клавиша и какой-то текст, то вся эта функциональность была написана как часть базовой программы на языке C или ассемблера программистом игрового процесса.
Сегодня чаще всего основной игровой движок отделяется от программирования игрового процесса. Это имеет несколько преимуществ в разработке. Игровой движок занимается графическим рендерингом, звуком, физикой и т. д., в то время как скриптовый язык занимается такими вещами, как кинематографические события, поведение врагов и игровые цели. Крупные игровые проекты могут иметь команду скриптеров для реализации такого игрового контента.
Скриптеры обычно также являются и геймдизайнерами. Часто бывает проще найти квалифицированного геймдизайнера, которого можно обучить скриптовому языку , чем квалифицированного геймдизайнера, который освоил C++ .
Этот программист специализируется на программировании пользовательских интерфейсов (UI) для игр. [14] Хотя некоторые игры имеют собственные пользовательские интерфейсы, этот программист, скорее всего, разработает библиотеку , которую можно использовать в нескольких проектах. Большинство UI выглядят 2D, хотя современные UI обычно используют ту же 3D-технологию, что и остальная часть игры, поэтому некоторые знания 3D-математики и систем будут полезны для этой роли. Расширенные системы UI могут позволять создавать скрипты и специальные эффекты, такие как прозрачность, анимация или эффекты частиц для элементов управления.
Программирование ввода, хотя обычно не является должностью или даже штатной позицией в определенном игровом проекте, все равно является важной задачей. Этот программист пишет код, определяющий, как устройства ввода, такие как клавиатура , мышь или джойстик, влияют на игру. Эти процедуры обычно разрабатываются на ранних этапах производства и постоянно корректируются в процессе разработки. Обычно одному программисту не нужно посвящать все свое время разработке этих систем. Для игры с управлением движением в реальном времени, использующей такие устройства, как Wii Remote или Kinect, может потребоваться очень сложная система ввода с низкой задержкой, в то время как требования HID к пошаговой стратегической игре с управлением мышью, такой как Heroes of Might and Magic, реализовать значительно проще.
Этот программист пишет код, который позволяет игрокам соревноваться или сотрудничать, подключенным через локальную сеть или Интернет (или в более редких случаях напрямую через модем ). [15] Программисты, реализующие эти игровые функции, могут тратить все свое время на эту одну роль, которая часто считается одной из самых технически сложных. Задержка сети , сжатие пакетов и сброшенные или прерванные соединения — вот лишь некоторые из проблем, которые необходимо учитывать. Хотя многопользовательские функции могут занять весь производственный цикл и требуют, чтобы другие системы движка были спроектированы с учетом сетевых возможностей, сетевые системы часто откладываются до последних нескольких месяцев разработки, что добавляет дополнительных трудностей этой роли. В некоторых играх сетевые функции (часто считающиеся менее приоритетными, чем основной игровой процесс) были сокращены на несколько месяцев до выпуска из-за таких проблем, как отсутствие управления, продуманности дизайна или масштабируемости. Virtua Fighter 5 для PS3 — яркий пример этой тенденции. [16]
Программист инструментов [17] может помочь в разработке игры, написав для нее специальные инструменты. Инструменты разработки игр часто содержат такие функции, как компиляция скриптов, импорт или конвертация художественных ресурсов и редактирование уровней. Хотя некоторые используемые инструменты могут быть продуктами COTS , такими как IDE или графический редактор, программисты инструментов создают инструменты со специфическими функциями, адаптированными к конкретной игре, которые недоступны в коммерческих продуктах. Например, разработчику приключенческой игры может понадобиться редактор для разветвления диалогов сюжета , а разработчик спортивной игры может использовать фирменный редактор для управления игроками и статистикой команды. Эти инструменты обычно недоступны потребителям, которые покупают игру.
Перенос игры с одной платформы на другую всегда был важным занятием для разработчиков игр. Некоторые программисты специализируются на этом занятии, преобразуя код из одной операционной системы для работы на другой. Иногда программист отвечает за то, чтобы приложение работало не только на одной операционной системе, но и на различных устройствах, таких как мобильные телефоны . Однако часто «перенос» может включать в себя переписывание всей игры с нуля, поскольку проприетарные языки , инструменты или оборудование делают преобразование исходного кода бесплодным занятием.
Этот программист должен быть знаком как с исходными, так и с целевыми операционными системами и языками (например, конвертировать игру, изначально написанную на C++ , в Java ), конвертировать активы, такие как иллюстрации и звуки, или переписывать код для телефонов с малым объемом памяти. Этот программист также должен будет обходить стороной реализации языка с ошибками, некоторые из которых имеют мало документации, рефакторить код , контролировать несколько ветвей кода, переписывать код для масштабирования для самых разных размеров экрана и внедрять специальные инструкции оператора. Им также может потребоваться исправлять ошибки, которые не были обнаружены в оригинальной версии игры.
Программист технологий, скорее всего, будет найден в крупных студиях разработки с определенными отделами, посвященными исключительно НИОКР . В отличие от других членов команды программирования, программист технологий обычно не привязан к определенному проекту или типу разработки в течение длительного периода времени, и он, как правило, будет подчиняться непосредственно техническому директору или руководителю отдела, а не производителю игр. Как следует из названия должности, эта должность чрезвычайно требовательна с технической точки зрения и требует глубоких знаний оборудования целевой платформы. Задачи охватывают широкий спектр тем, включая практическую реализацию алгоритмов, описанных в исследовательских работах, оптимизацию сборки на очень низком уровне и способность решать сложные проблемы, касающиеся требований к памяти и проблем кэширования на последних этапах проекта. Существует значительное количество пересечений между этой позицией и некоторыми другими, в частности, графическим программистом.
В небольших командах один или несколько программистов часто описываются как «универсалы», которые берут на себя различные другие роли по мере необходимости. Универсалы часто занимаются задачей отслеживания ошибок и определения того, какие подсистемные знания требуются для их исправления.
Ведущий программист в конечном итоге отвечает за все программирование игры. Его работа заключается в том, чтобы убедиться, что различные подмодули игры реализуются должным образом, и отслеживать разработку с точки зрения программирования. Человек на этой должности обычно переходит из других аспектов программирования игры на эту должность после нескольких лет опыта. Несмотря на название, у этого человека обычно меньше времени на написание кода, чем у других программистов на проекте, поскольку они должны посещать встречи и взаимодействовать с клиентом или другими руководителями по игре. Тем не менее, от ведущего программиста по-прежнему ожидается программирование по крайней мере часть времени, а также наличие знаний в большинстве технических областей игры. Часто между техническим директором и ведущим программистом существует много общего, поэтому эти работы часто выполняются одним человеком.
Программисты игр могут специализироваться на той или иной платформе, например, Wii U или Windows . Таким образом, в дополнение к специализации в одной дисциплине игрового программирования, программист может также специализироваться на разработке для определенной платформы. Таким образом, должность одного программиста игр может быть «Программист 3D-графики PlayStation 3». Некоторые дисциплины, такие как ИИ, переносимы на различные платформы и не нуждаются в адаптации к той или иной системе. Кроме того, общие принципы разработки игр, такие как концепции программирования 3D-графики, звуковая инженерия и дизайн пользовательского интерфейса, переносимы между платформами.
Примечательно, что есть много программистов игр без формального образования по этой теме, которые начинали как любители и много программировали самостоятельно, ради развлечения, и в конечном итоге добились успеха благодаря своим способностям и опыту, приобретенному дома. Однако в большинстве вакансий для программистов игр указывается степень бакалавра (по математике, физике, информатике, «или эквивалентный опыт»).
Все чаще университеты начинают предлагать курсы и степени в области игрового программирования. Любые такие степени имеют значительное совпадение со степенями в области компьютерных наук и программной инженерии . [ необходима цитата ]
Зарплаты программистов игр различаются от компании к компании и от страны к стране. Однако в целом оплата за программирование игр примерно одинакова для сопоставимых должностей в бизнес-секторе. И это несмотря на то, что программирование игр является одним из самых сложных видов и обычно требует больше часов, чем основное программирование.
Результаты опроса 2010 года в США показывают, что средняя зарплата игрового программиста составляет 95 300 долларов США в год. Наименее опытные программисты, с опытом работы менее 3 лет, получают среднюю годовую зарплату более 72 000 долларов. Наиболее опытные программисты, с опытом работы более 6 лет, получают среднюю годовую зарплату более 124 000 долларов. [18]
Как правило, ведущие программисты получают самую высокую зарплату, хотя некоторые программисты 3D-графики могут конкурировать или превосходить их зарплаты. Согласно тому же опросу выше, ведущие программисты в среднем зарабатывают $127,900 в год. [19]
Хотя продажи видеоигр соперничают с другими формами развлечений, такими как фильмы , индустрия видеоигр чрезвычайно нестабильна. Программисты игр не защищены от этой нестабильности, поскольку их работодатели испытывают финансовые трудности.
Сторонние разработчики, наиболее распространенный тип разработчиков видеоигр , зависят от постоянного притока средств от издателя видеоигр . Если не соблюдается контрольная точка или крайний срок (или по ряду других причин, например, отмена игры), средств может не хватить, и разработчик может быть вынужден уволить сотрудников или объявить о банкротстве и выйти из бизнеса. Программисты игр, работающие на крупных издателей, в некоторой степени изолированы от этих обстоятельств, но даже крупные издатели игр могут выйти из бизнеса (как, например, когда Hasbro Interactive была продана Infogrames , и несколько проектов были отменены; или когда The 3DO Company обанкротилась в 2003 году и прекратила всю деятельность). Резюме некоторых программистов игр состоят из коротких периодов, длящихся не более года, поскольку они вынуждены переходить из одной обреченной студии в другую. [20] Вот почему некоторые предпочитают консультироваться и, следовательно, в некоторой степени защищены от последствий судеб отдельных студий.
Большинство коммерческих компьютерных и видеоигр написаны в основном на C++ , C и некоторых языках ассемблера . Многие игры, особенно те, которые имеют сложную интерактивную игровую механику, нагружают оборудование до предела. Таким образом, для этих игр требуется высокооптимизированный код, чтобы работать с приемлемой частотой кадров. Из-за этого скомпилированный код обычно используется для компонентов, критически важных для производительности, таких как визуальный рендеринг и физические расчеты. Почти все игры для ПК также используют либо DirectX , OpenGL APIs , либо некоторую библиотеку-оболочку для взаимодействия с аппаратными устройствами.
Различные языки сценариев , такие как Ruby , Lua и Python , также используются для генерации контента, такого как игровой процесс и особенно ИИ. Скрипты обычно анализируются во время загрузки (когда игра или уровень загружаются в основную память), а затем выполняются во время выполнения (через логические ветви или другие подобные механизмы). Они, как правило, не выполняются интерпретатором , что привело бы к гораздо более медленному выполнению. Скрипты, как правило, используются выборочно, часто для ИИ и высокоуровневой игровой логики. Некоторые игры разрабатываются с высокой зависимостью от скриптов, а некоторые скрипты компилируются в двоичный формат перед выполнением игры. На этапе оптимизации разработки некоторые функции скрипта часто переписываются на скомпилированном языке.
Java используется для многих игр на основе веб-браузера , поскольку он кроссплатформенный , обычно не требует установки пользователем и представляет меньше рисков для безопасности по сравнению с загруженной исполняемой программой. Java также является популярным языком для игр на основе мобильных телефонов . Adobe Flash , который использует язык ActionScript , и JavaScript являются популярными инструментами разработки для игр на основе браузера.
По мере того, как игры росли в размерах и сложности, промежуточное ПО становится все более популярным в отрасли. Промежуточное ПО обеспечивает большую и более высокоуровневую функциональность и большие наборы функций, чем стандартные API более низкого уровня, такие как DirectX и OpenGL , такие как скелетная анимация . Помимо предоставления более сложных технологий, некоторое промежуточное ПО также делает разумные попытки быть независимыми от платформы , делая общие преобразования, например, из Microsoft Windows в PS4 намного проще. По сути, промежуточное ПО нацелено на то, чтобы исключить как можно больше избыточности в цикле разработки (например, написание новых систем анимации для каждой игры, которую выпускает студия), позволяя программистам сосредоточиться на новом контенте.
Другие инструменты также важны для разработчиков игр: 2D- и 3D-пакеты (например, Blender , GIMP , Photoshop , Maya или 3D Studio Max ) позволяют программистам просматривать и изменять ресурсы, созданные художниками или другим производственным персоналом. Системы управления исходным кодом сохраняют исходный код в безопасности, защищены и оптимизируют слияние. IDE с отладчиками (например, Visual Studio ) делают написание кода и отслеживание ошибок менее болезненным процессом.