Програміст відеоігор
Програміст відеоігор - це інженер програмного забезпечення, програміст або інформатик, який розробляє в основному кодову базу для відеоігор або відповідного програмного забезпечення, наприклад, засобів розробки ігор. Програмування ігор має багато спеціалізованих дисциплін, і всі вони підпадають під загальний термін «ігровий програміст»[1][2]. Ігрового програміста не слід плутати з ігровим дизайнером, який працює над дизайном гри. [3]
Історія
Коли ігри тільки почали розроблятися, (з початку 1970-х до середини 1980-х) ігровий програміст взявся також за роботу дизайнера та художника. Причиною цьому було те, що можливості ранніх комп’ютерів були настільки обмеженими, що непотрібно було мати окремий персонал для кожної функції. Концепції ігор, як правило, були легкими, і в ігри передбачалося грати лише по кілька хвилин за раз, але, що більш важливо, художній вміст та варіації в геймплеї були обмежені невеликою потужністю тогочасних комп'ютерів.
Пізніше, коли спеціалізоване аркадне обладнання та домашні системи стали потужнішими, розробники ігор могли розвивати більш глибокі сюжетні лінії та могли включати такі функції, як висока роздільна здатність та повнокольорова графіка, фізика, вдосконалений штучний інтелект та цифровий звук. Технологія настільки розвинулася, що сучасні ігри зазвичай можуть похвалитися тривимірною графікою та повноформатним відео, використовуючи активи, розроблені професійними графічними дизайнерами. У наш час зневажливий термін "мистецтво програмування" почав означати різновид яскравих кольорів та блочного дизайну, характерних для ранніх відеоігор.
Прагнення додати більше глибини та активів до ігор вимагало розумного розподілу праці. Спочатку художня продукція передавалася штатним художникам. Далі програмування ігор відокремили від ігрового дизайну як дисципліну. Зараз лише деякі ігри, такі як головоломка Bejeweled, досить прості, щоб вимагати лише одного штатного програміста. Однак, незважаючи на цей розподіл, більшість розробників ігор (художники, програмісти і навіть продюсери ) мають право голосу в остаточному дизайні сучасних ігор.
Дисципліни
Сучасна відеогра може включати в себе просунуту фізику, штучний інтелект, тривимірну графіку, оцифрований звук, оригінальну музичну партитуру, складну стратегію і може використовувати декілька пристроїв вводу (наприклад, миші, клавіатури, геймпади і джойстики), і в неї можна грати проти інших людей за допомогою Інтернету або по локальній мережі. Кожний аспект гри може займати весь час одного програміста, а в багатьох випадках - декількох програмістів. Деякі програмісти можуть спеціалізуватися в одній області програмування ігор, але багато хто знайомий з декількома іншими аспектами. Кількість програмістів, необхідних для кожної функції, деякою мірою залежить від навичок програмістів, але в основному визначається типом розроблюваної гри.
Програміст ігрового рушія
Програмісти ігрового рушія створюють базовий рушій гри, включаючи імітовані фізичні та графічні дисципліни. [4] У відеоіграх все частіше використовуються наявні ігрові двигуни, комерційні, з відкритим кодом чи безкоштовно. Вони часто налаштовуються під конкретну гру, і програмісти ігрового рушія обробляють ці модифікації.
Програміст фізичного рушія
Програміст фізичного рушія гри призначений для розвитку фізики, яку буде використовувати гра. Як правило, гра моделює лише декілька аспектів реальної фізики. Наприклад, космічній грі може знадобитися імітація сили тяжіння, але вона не потребує моделювання в'язкості води.
Оскільки цикли обробки завжди цінні, фізичні програмісти можуть використовувати "ярлики", які обчислювано недорогі, але виглядають і діють "достатньо добре" для відповідної гри. В інших випадках застосовується нереальна фізика, щоб полегшити ігровий процес або отримати драматичний ефект. Іноді вказується конкретна підмножина ситуацій, і фізичний результат таких ситуацій зберігається в якомусь записі і взагалі ніколи не обчислюється під час виконання.
Деякі програмісти фізичного рушія можуть навіть заглибитися у складні завдання зворотної кінематики та інших рухів, що приписуються ігровим персонажам, але все частіше ці рухи призначаються за допомогою бібліотек захоплення руху, щоб не перевантажувати центральний процесор складними обчисленнями.
Програміст графічного движка
Історично цей заголовок, як правило, належав програмісту, який розробляв спеціалізовані алгоритми блітера і розумні оптимізації для 2D графіки . Однак сьогодні він майже виключно застосовується до програмістів, які спеціалізуються на розробці та модифікації складних візуалізаторів 3D- графіки . Деякі навички 2D-графіки нещодавно знову стали корисними для розробки ігор для мобільних телефонів нового покоління та портативних ігрових консолей.
Програміст тривимірної графіки повинен чітко розуміти передові математичні поняття, такі як векторна та матрична математика, кватерніони та лінійна алгебра.
Кваліфіковані програмісти, що спеціалізуються на цій галузі розробки ігор, можуть вимагати високої заробітної плати і зазвичай є дефіцитним товаром. Їхні навички можна використовувати для відеоігор на будь-якій платформі.
Програміст штучного інтелекту
Програміст ШІ розробляє логіку часу для імітації інтелекту у ворогів і супротивників. [5] Нещодавно він перетворився на спеціалізовану дисципліну, оскільки ці завдання раніше виконували програмісти, які спеціалізувались в інших областях. Програміст ШІ може програмувати системи пошуку шляху, стратегії та тактичні системи противника. Це один із найскладніших аспектів програмування ігор, і його витонченість швидко розвивається. Сучасні ігри присвячують штучному інтелекту приблизно від 10 до 20 відсотків програмістів.[6]
Деякі ігри, такі як стратегічні ігри, такі як Civilization III, або рольові відеоігри, такі як The Elder Scrolls IV: Oblivion, активно використовують ШІ, тоді як інші, наприклад, головоломки, використовують його помірковано або взагалі не використовують. Багато розробників ігор створили цілі мови, за допомогою яких можна програмувати власний ШІ для ігор за допомогою сценаріїв. Ці мови, як правило, менш технічні, ніж мова, що використовується для реалізації гри, і часто використовуються дизайнерами гри або рівнями для реалізації світу гри. Багато студій також роблять сценарії своїх ігор доступними для гравців, і вони часто широко використовуються сторонніми розробниками модів.
Технологію ШІ, що використовується в програмуванні ігор, не слід плутати з академічним програмуванням ШІ та дослідженнями. Хоча обидві сфери дійсно запозичують одна в одної, їх зазвичай вважають окремими дисциплінами, хоча є винятки. Наприклад, гра 2001 року від Lionhead Studios Black & White має унікальний підхід до штучного інтелекту до контрольованої користувачем істоти, яка використовує навчання для моделювання поведінки під час гри.[7] В останні роки більше зусиль було спрямовано на втручання перспективних областей досліджень ШІ та програмування ШІ. [8] [9] [10] [11]
Звуковий програміст
Не завжди окрема дисципліна, звукове програмування було опорою ігрового програмування ще з часів Понгу . У більшості ігор використовується аудіо, а багато з них мають повну музичну партитуру. Комп'ютерні звукові ігри цураються графіки в цілому і використовують звук в якості основного механізму зворотного зв'язку. [12]
У багатьох іграх використовуються передові методи, такі як позиційний 3D-звук, що робить програмування аудіо нетривіальною справою. За допомогою цих ігор один або два програмісти можуть присвятити весь свій час створенню та вдосконаленню звукового механізму гри, а програмісти звуку можуть пройти навчання або мати офіційний досвід цифрової обробки сигналів.
Інструменти для написання сценаріїв часто створюють або підтримують програмісти звуку для використання звукорежисерами. Ці інструменти дозволяють дизайнерам пов'язувати звуки з персонажами, діями, об'єктами та подіями, одночасно призначаючи музику або атмосферні звуки для ігрових середовищ (рівнів чи областей) і встановлюючи такі змінні середовища, як реверберація.
Програміст ігрового процесу
Хоча всі програмісти додають вмісту та досвіду, які надає гра, програміст геймплею більше зосереджується на стратегії гри, реалізації її механіки та логіки та "відчутті" гри. Зазвичай це не окрема дисципліна, оскільки те, що робить цей програміст, зазвичай відрізняється від гри до гри, і вони неминуче будуть залучені до більш спеціалізованих областей розвитку гри, таких як графіка чи звук.
Цей програміст може реалізовувати таблиці стратегій, налаштовувати вхідний код або коригувати інші фактори, що змінюють гру. Багато з цих аспектів можуть бути змінені програмістами, які спеціалізуються на цих сферах, однак, наприклад, таблиці стратегій можуть впроваджуватися програмістами ШІ.
Програміст-сценарист
У ранніх відеоіграх програмісти геймплею писали код для створення всього вмісту в грі. Якщо гравець повинен був стріляти в певного ворога, а червона клавіша повинна з'являтися разом з деяким текстом на екрані, тоді ця функція написана програмістом ігрового процесу як частина основної програми на мові C або асемблеру.
Сьогодні найчастіше основний ігровий рушій, як правило, відокремлюється від програмування ігрового процесу. Це має ряд переваг у розвитку. Ігровий рушій має справу з візуалізацією графіки, звуком, фізикою тощо, тоді як мова сценаріїв має справу з такими подіями, як кінематографічні події, поведінка ворога та цілі гри. Великі ігрові проекти можуть мати команду сценаристів для реалізації такого роду ігрового контенту.
Сценаристи зазвичай також є ігровими дизайнерами. Часто простіше знайти кваліфікованого ігрового дизайнера, якого можна навчити мові сценаріїв, на відміну від того, який опанував C ++.
Програміст інтерфейсу користувача
Цей програміст спеціалізується на програмуванні користувальницьких інтерфейсів (UI) для ігор. [13] Хоча деякі ігри мають користувальницькі інтерфейси, програміст інтерфейсу користувача, швидше за все, розробить бібліотеку, яка може використовуватися в декількох проектах. Більшість інтерфейсів виглядають двовимірними, хоча сучасні інтерфейси зазвичай використовують ту саму технологію 3D, що й решта гри, тому деякі знання 3D-математики та систем корисні для цієї ролі. Розширені системи інтерфейсу можуть дозволяти сценарії та спеціальні ефекти, такі як прозорість, анімація або ефекти частинок для елементів управління.
Програміст вводу
Програмування введення даних, хоча зазвичай це не посада чи навіть штатна посада в конкретному ігровому проекті, все ще є важливим завданням. Програміст пише код із зазначенням того, як такі пристрої введення, як клавіатура, миша чи джойстик, впливають на гру. Ці процедури зазвичай розробляються на початку виробництва і постійно вдосконалюються під час розробки. Зазвичай одному програмісту не потрібно весь свій час присвячувати розробці цих систем. Гра в керованому режимі руху в реальному часі, що використовує такі пристрої, як Wii Remote або Kinect, може потребувати дуже складної системи з низькою затримкою введення, тоді як вимоги HID до керованої мишею покрокової стратегічної гри, такі як Heroes of Might and Magic, є значно простішими у реалізації.
Мережевий програміст
Цей програміст пише код, який дозволяє гравцям змагатися або співпрацювати, завдяки підключенню через локальну мережу або Інтернет (або в рідкісних випадках безпосередньо підключені через модем). [14] Програмісти, що впроваджують ці ігрові функції, можуть весь свій час проводити лише в цій ролі, яка часто вважається однією з технічно найскладніших. Затримка мережі, стиснення пакетів, а також розірвані або перервані з'єднання - це лише декілька проблем, які слід врахувати. Хоча функції для декількох гравців можуть зайняти весь графік виробництва і вимагати, щоб інші системи двигунів були розроблені з урахуванням мереж, мережеві системи часто відкладаються до останніх кількох місяців розробки, додаючи додаткові труднощі цим програмістам.
Програміст ігрових інструментів
Програміст інструментів [15] може допомогти розробці гри, написавши для неї власні інструменти. Інструменти для розробки ігор часто містять такі функції, як компіляція сценаріїв, імпорт або перетворення художніх ресурсів та редагування рівнів. Хоча деякі інструменти, що використовуються, можуть бути продуктами COTS, такі як IDE або графічний редактор, програмісти інструментів створюють інструменти зі специфічними функціями, пристосованими до конкретної гри, які недоступні в комерційних продуктах. Наприклад, розробнику пригодницьких ігор може знадобитися редактор для розгалуження діалогових вікон, а розробник спортивних ігор може використовувати власний редактор для управління статистикою гравців та команд. Ці інструменти, як правило, недоступні для споживачів, які купують гру.
Програміст перенесення
Портування гри з однієї платформи на іншу завжди було важливим процесом для розробників ігор. Деякі програмісти спеціалізуються на цій діяльності, перетворюючи код з однієї операційної системи в іншу. Іноді програміст відповідає за те, щоб програма працювала не лише для однієї операційної системи, а на різних пристроях, таких як мобільні телефони. Однак часто "перенесення" може включати переписування всієї гри з нуля, оскільки власні мови, інструменти та обладнання роблять перетворення вихідного коду безрезультатним завданням.
Програміст перенесення повинен бути знайомим як з оригінальною, так і з цільовою операційними системами та мовами (наприклад, перетворюючи гру, спочатку написану на C ++, на Java), конвертувати активи, такі як ілюстрації та звуки, або переписувати код для телефонів із низькою пам’яттю. Цьому програмісту також, можливо, доведеться обходити стороною реалізації мови з помилками, деякі з невеликою кількістю документації, кодом рефактора, наглядом за декількома гілками коду, переписуванням коду для широкого спектру розмірів екрану та реалізацією спеціальних вказівок оператора. Можливо, їм також доведеться виправити помилки, які не були виявлені в оригінальній версії гри.
Програміст технологій
Програміста технологій частіше можна зустріти у більших студіях розробки з конкретними відділами, присвяченими виключно науково-дослідним роботам. На відміну від інших членів команди програмістів, програміст технологій, як правило, не прив’язаний до конкретного проекту або типу розробки протягом тривалого періоду часу, і вони, як правило, підпорядковуються безпосередньо керівнику технічної служби або керівнику відділу, а не виробнику ігор. Як випливає із назви посади, ця посада надзвичайно вимоглива з технічної точки зору і вимагає глибоких знань апаратного забезпечення цільової платформи. Завдання охоплюють широкий спектр тем, включаючи практичну реалізацію алгоритмів, описаних у наукових роботах, дуже низький рівень оптимізації збірки та здатність вирішувати складні питання, що стосуються вимог до пам'яті та проблем кешування на останніх етапах проекту. Існує значна кількість перехрещення між цією позицією та деякими іншими, особливо графічним програмістом.
Загальний спеціаліст
У менших командах одного або декількох програмістів часто описують як "загальних спеціалістів", які виконують інші необхідні функції. Загальні спеціалісти часто займаються відстеженням помилок та визначенням того, яка експертиза підсистеми потрібна для їх виправлення.
Провідний програміст гри
Провідний програміст зрештою відповідає за все програмування гри. Це їх робота - переконатися, що різні підмодулі гри впроваджені належним чином, і відстежувати розвиток з точки зору програмування. Програміст зазвичай переходить від інших аспектів ігрового програмування до цієї ролі після декількох років досвіду. Незважаючи на назву, провідний програміст, як правило, має менше часу на написання коду, ніж інші програмісти проекту, оскільки вони повинні відвідувати зустрічі та взаємодіяти з клієнтом або іншими провідними особами гри. Однак від головного програміста все ще очікується, що він програмує принаймні частину часу, а також буде обізнаним у більшості технічних областей гри. У ролі технічного директора та провідного програміста часто є значні спільні точки зору, так що ці робочі місця часто охоплює одна людина.
Платформи
Програмісти ігор можуть спеціалізуватися на тій чи іншій платформі, такі як Wii U або Windows. Отже, окрім спеціалізації з однієї дисципліни ігрового програмування, програміст може також спеціалізуватися на розробці на певній платформі. Тому назва одного програміста гри може бути "Програміст 3D-графіки PlayStation 3". Деякі дисципліни, такі як ШІ, можна переносити на різні платформи, і їх не потрібно пристосовувати до тієї чи іншої системи. Крім того, загальні принципи розробки ігор, такі як концепції програмування 3D-графіки, звукова інженерія та дизайн інтерфейсу користувача, природно передаються між платформами.
Освіта
Варто відзначити, що є багато ігрових програмістів, які не мають офіційної освіти з цього питання, що почали як любителі і займаються великою кількістю програмувань самостійно, задля розваги, і врешті-решт досягають успіху завдяки своїм здібностям та досвіду, який отримали. Однак результат більшості заявок на роботу для програмістів ігор визначається ступенем бакалавра (з математики, фізики, інформатики або "або еквівалентний досвід").
Все частіше університети починають пропонувати курси та ступені з програмування ігор. Будь-які такі ступені значно збігаються із ступенями інформатики та програмного забезпечення.
Зарплата
Зарплата для ігрових програмістів варіюється в залежності від компанії та країни. Однак загалом оплата за програмування ігор, як правило, приблизно однакова для порівнянних робочих місць у бізнес-секторі. Це незважаючи на той факт, що програмування ігор є одним із найскладніших у будь-якому типі і, як правило, вимагає більше часу, ніж основне програмування.
Результати опитування 2010 року в США вказують на те, що середня заробітна плата програміста гри складає 95 300 доларів США на рік. Найменш досвідчені програмісти з досвідом роботи менше 3 років отримують середньорічну зарплату понад 72 000 доларів США. Найдосвідченіші програмісти, що мають досвід понад 6 років, отримують середньорічну зарплату понад $ 124000. [16]
Як правило, провідні програмісти отримують найбільшу компенсацію, хоча деякі програмісти 3D-графіки можуть оскаржувати або перевершити свою зарплату. Згідно з тим самим опитуванням вище, провідні програмісти заробляють в середньому 127 900 доларів США щороку. [17]
Безпека роботи
Хоча продажі відеоігор конкурують з іншими видами розваг, такими як фільми, індустрія відеоігор надзвичайно нестабільна. Ігрові програмісти не захищені від цієї нестабільності, оскільки їхні роботодавці відчувають фінансові труднощі.
Сторонні розробники, найпоширеніший тип розробників відеоігор, залежать від постійного припливу коштів від видавця відеоігор . Якщо ключовий момент чи терміни не будуть досягнуті (або з цілого ряду інших причин, наприклад, гра скасована), коштів може стати недостатньо, і розробник може бути змушений скоротити співробітників або оголосити про банкрутство та вийти з бізнесу. Ігрові програмісти, які працюють у великих видавництвах, дещо застережені від таких обставин, але навіть великі видавці ігор можуть припинити свою діяльність (наприклад, коли Hasbro Interactive було продано Infogrames і кілька проектів скасовано; або коли компанія 3DO збанкрутувала в 2003 році і припинила всі операції). Деякі резюме програмістів ігор складаються з коротких перебігів, які тривають не більше року, оскільки вони змушені перескакувати з однієї приреченої студії на іншу. Ось чому деякі воліють консультуватися і тому більш захищені від наслідків долей окремих студій.
Мови та інструменти
Більшість комерційних комп'ютерних та відео ігор написані переважно на C ++, C та деякою мовою асемблеру. Багато ігор, особливо ті, що мають складну інтерактивну механіку ігрового процесу, обмежують апаратне забезпечення. Тому для роботи цих ігор з прийнятною частотою кадрів потрібен високооптимізований код. Через це скомпільований код зазвичай використовується для важливих для продуктивності компонентів, таких як візуальний рендеринг та фізичні розрахунки. Майже всі ігри для ПК також використовують API DirectX, OpenGL або якусь бібліотеку обгортки для взаємодії з апаратними пристроями.
Різні мови сценаріїв, такі як 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) роблять написання коду та відстеження помилок менш болючим досвідом.
Дивіться також
Примітки
- Bates 2004, pp. 165-192.168.11 cc1
- Moore, Novak 2010, pp. 78-84
- Moore, Novak 2010, pp. 74-75
- Moore, Novak 2010, p. 79
- Moore, Novak 2010, pp. 80-81
- Number of Dedicated AI Programmers on A Game Development Team. AIGameDev. 26 лютого 2008. Архів оригіналу за June 7, 2008.
- Evans 2002, Chapter 11.2: Varieties of Learning, pp.567-578
- IEEE Symposium on Computational Intelligence and Games. Процитовано 26 березня 2010.
- Artificial Intelligence and Games Research Network. Архів оригіналу за 26 вересня 2009. Процитовано 26 березня 2010.
- The University of Alberta GAMES Group. Процитовано 26 березня 2010.
- Epstein, Susan L. Games & Puzzles. AITopics. Архів оригіналу за 1 May 2010. Процитовано 26 березня 2010.
- Moore, Novak 2010, p. 83
- Moore, Novak 2010, p. 81
- Moore, Novak 2010, p. 82
- Moore, Novak 2010, p. 78
- Top Gaming Studios, Schools & Salaries, Big FIsh Games, July 2013
- Fleming, Jeffrey (April 2010). 9th Annual Salary Survey. Game Developer (United Business Media) 17 (4): 8.
Список літератури
- Bates, Bob (2004). Game Design (вид. 2nd). Thomson Course Technology. ISBN 1-59200-493-8.
- Moore, Michael E.; Novak, Jeannie (2010). Game Industry Career Guide. Delmar: Cengage Learning. ISBN 1-4283-7647-X.
- Evans, Richard (2002). У Rabin, Steve. AI Game Programming Wisdom. Charles River Media. ISBN 1-58450-077-8.