stringtranslate.com

Программист видеоигр

Программист игр — это инженер-программист , программист или ученый-компьютерщик , который в основном разрабатывает кодовые базы для видеоигр или сопутствующего программного обеспечения , например, инструментов разработки игр . Программирование игр включает множество специализированных дисциплин, каждая из которых подпадает под общий термин «программист игр». [1] [2] Программиста игр не следует путать с гейм-дизайнером , который занимается игровым дизайном . [3]

История

Серия Apple II была популярной платформой для видеоигр в раннюю эпоху домашних компьютеров . Несмотря на то, что более поздние системы уступали ему по производительности, он оставался популярным до начала 1990-х годов.

На заре видеоигр (с начала 1970-х до середины 1980-х) программист игр также выполнял функции дизайнера и художника . Обычно это происходило потому, что возможности ранних компьютеров были настолько ограничены, что не было необходимости в специальном персонале для каждой функции. Концепции игр, как правило, были легкими, и игры предназначались для того, чтобы в них можно было играть всего несколько минут за раз, но, что более важно, художественный контент и вариации игрового процесса были ограничены ограниченной мощностью компьютеров.

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

Желание придать играм больше глубины и возможностей потребовало разделения труда . Первоначально художественное производство было поручено штатным художникам . В дальнейшем программирование игр стало отдельной дисциплиной от игрового дизайна . Сейчас лишь некоторые игры, такие как игра-головоломка Bejeweled , настолько просты, что для них требуется всего один штатный программист. Однако, несмотря на такое разделение, большинство разработчиков игр (художники, программисты и даже продюсеры ) имеют право голоса в окончательном дизайне современных игр.

Дисциплины

Современная видеоигра может включать в себя продвинутую физику, искусственный интеллект, 3D-графику, цифровой звук, оригинальную музыкальную партитуру, сложную стратегию и может использовать несколько устройств ввода (таких как мыши , клавиатуры , геймпады и джойстики ), и в нее можно играть против других людей через через Интернет или по локальной сети . Каждый аспект игры может занять все время одного программиста, а во многих случаях и нескольких программистов. Некоторые программисты могут специализироваться в одной области программирования игр , но многие знакомы с несколькими аспектами. Количество программистов, необходимое для каждой функции, в некоторой степени зависит от навыков программистов, но в основном определяется типом разрабатываемой игры.

Программист игрового движка

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

Программист физического движка

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

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

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

Программист графического движка

Исторически сложилось так, что это звание обычно принадлежало программисту, разрабатывавшему специализированные блиттерные алгоритмы и хитрые оптимизации для 2D-графики . Однако сегодня он применяется почти исключительно к программистам, которые специализируются на разработке и модификации сложных средств трехмерной графики . Однако совсем недавно некоторые навыки работы с 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] Хотя некоторые игры имеют собственные пользовательские интерфейсы, этот программист, скорее всего, разработает библиотеку , которую можно будет использовать в нескольких проектах. Большинство пользовательских интерфейсов выглядят двухмерными, хотя современные пользовательские интерфейсы обычно используют ту же 3D-технологию, что и остальная часть игры, поэтому для этой роли пригодятся некоторые знания 3D-математики и систем. Расширенные системы пользовательского интерфейса могут позволять использовать сценарии и специальные эффекты, такие как прозрачность, анимация или эффекты частиц для элементов управления.

Программатор ввода

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

Программирование ввода, хотя оно обычно не является должностью или даже постоянной должностью в конкретном игровом проекте, по-прежнему является важной задачей. Этот программист пишет код, определяющий, как устройства ввода, такие как клавиатура , мышь или джойстик, влияют на игру. Эти процедуры обычно разрабатываются на ранних стадиях производства и постоянно настраиваются в ходе разработки. Обычно одному программисту не нужно посвящать все свое время разработке этих систем. Игра в реальном времени с управлением движением, использующая такие устройства, как 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 и несколько проектов были отменены; или когда компания 3DO обанкротилась в 2003 году и прекратил все операции). Резюме некоторых игровых программистов состоят из коротких периодов работы продолжительностью не более года, поскольку они вынуждены прыгать из одной обреченной студии в другую. [20] Вот почему некоторые предпочитают консультироваться и поэтому в некоторой степени защищены от последствий судеб отдельных студий.

Языки и инструменты

Большинство коммерческих компьютерных и видеоигр написаны в основном на C++ , C и некоторых языках ассемблера . Многие игры, особенно со сложной интерактивной механикой игрового процесса, нагружают оборудование до предела. Таким образом, чтобы эти игры работали с приемлемой частотой кадров, требуется высокооптимизированный код. По этой причине скомпилированный код обычно используется для компонентов, критически важных для производительности, таких как визуальный рендеринг и физические расчеты. Почти все компьютерные игры также используют API-интерфейсы DirectX , OpenGL или какую-либо библиотеку-оболочку для взаимодействия с аппаратными устройствами.

Различные языки сценариев , такие как Ruby , Lua и Python , также используются для генерации контента, такого как игровой процесс и особенно AI. Скрипты обычно анализируются во время загрузки (когда игра или уровень загружаются в основную память), а затем выполняются во время выполнения (через логические ветки или другие подобные механизмы). Обычно они не выполняются интерпретатором , что приводит к гораздо более медленному выполнению. Скрипты, как правило, используются выборочно, часто для искусственного интеллекта и игровой логики высокого уровня. Некоторые игры разработаны с высокой зависимостью от скриптов, а некоторые скрипты перед запуском игры компилируются в двоичный формат. На этапе оптимизации разработки некоторые функции сценария часто переписываются на компилируемом языке.

Java используется во многих играх на основе веб-браузера, поскольку она является кроссплатформенной , обычно не требует установки пользователем и представляет меньший риск безопасности по сравнению с загруженной исполняемой программой. Java также является популярным языком для игр для мобильных телефонов . Adobe Flash , использующий язык ActionScript , и JavaScript — популярные инструменты разработки браузерных игр.

Поскольку игры растут в размерах и сложности, промежуточное программное обеспечение становится все более популярным в отрасли. Промежуточное программное обеспечение обеспечивает все более высокий уровень функциональности и больший набор функций, чем стандартные API более низкого уровня, такие как DirectX и OpenGL , например скелетная анимация . Помимо предоставления более сложных технологий, некоторые промежуточные программы также предпринимают разумные попытки быть независимыми от платформы , что значительно упрощает обычное преобразование, например, из Microsoft Windows в PS4 . По сути, промежуточное программное обеспечение направлено на максимально возможное устранение избыточности в цикле разработки (например, написание новых систем анимации для каждой игры, выпускаемой студией), что позволяет программистам сосредоточиться на новом контенте.

Разработчикам игр необходимы и другие инструменты: 2D- и 3D-пакеты (например, Blender , GIMP , Photoshop , Maya или 3D Studio Max ) позволяют программистам просматривать и изменять ресурсы, созданные художниками или другим производственным персоналом. Системы контроля версий обеспечивают безопасность и надежность исходного кода и оптимизируют слияние. IDE с отладчиками (например, Visual Studio ) делают написание кода и поиск ошибок менее болезненным занятием.

Смотрите также

Примечания

  1. ^ Бейтс 2004, стр. 165-192.168.11 cc1.
  2. ^ Мур, Новак 2010, стр. 78-84.
  3. ^ Мур, Новак 2010, стр. 74-75.
  4. ^ Мур, Новак 2010, с. 79
  5. ^ Мур, Новак 2010, с. 80
  6. ^ Мур, Новак 2010, стр. 80-81.
  7. ^ «Количество преданных своему делу программистов искусственного интеллекта в команде разработчиков игр» . AIGameDev . 26 февраля 2008 г. Архивировано из оригинала 7 июня 2008 г.
  8. ^ Эванс 2002, Глава 11.2: Разновидности обучения, стр. 567-578.
  9. ^ «Симпозиум IEEE по вычислительному интеллекту и играм» . Проверено 26 марта 2010 г.
  10. ^ "Сеть исследований искусственного интеллекта и игр" . Архивировано из оригинала 26 сентября 2009 года . Проверено 26 марта 2010 г.
  11. ^ "Группа GAMES Университета Альберты" . Проверено 26 марта 2010 г.
  12. ^ Эпштейн, Сьюзен Л. «Игры и головоломки». AIТемы . Архивировано из оригинала 1 мая 2010 года . Проверено 26 марта 2010 г.
  13. ^ Мур, Новак 2010, с. 83
  14. ^ Мур, Новак 2010, с. 81
  15. ^ Мур, Новак 2010, с. 82
  16. ^ TVG: AM2: Virtua Fighter 5 PS3 может быть обновлена ​​для онлайн-новостей. Архивировано 18 января 2008 г. на Wayback Machine.
  17. ^ Мур, Новак 2010, с. 78
  18. ^ Лучшие игровые студии, школы и зарплаты, Big Fish Games, июль 2013 г.
  19. ^ Флеминг, Джеффри (апрель 2010 г.). «9-й ежегодный обзор зарплат». Разработчик игр . Объединенные Бизнес Медиа. 17 (4): 8.
  20. ^ «Кризис STEM - миф» . 30 августа 2013 г.

Рекомендации

Внешние ссылки