Закодоване мистецтво. Форум розробників

Прийнято вважати, що найбільший внесок у розробку гри вносять Геймдизайнер, художники і програмісти. Від компетентності та таланту цих чудо-богатирів багато в чому залежить успіх тайтла. Найменше відомо про програмістів: вони рідко з'являються на публіці, їх важко відірвати від комп'ютера і поговорити на нормальному, людською мовою - вони вважають за краще мову програмування. Проте мова сьогодні піде саме про програмістів. І з цієї нагоди з нами розмовляють:

nek - Юрій Некрасов, генеральний директор CrioLand;

dab - Олексій Дубовой, керівник і головний програміст Elemental Games;

AG - Макс Тумин, менеджер MiST land - South (відповідальний за проект Jagged Alliance 3D);

За тим, щоб запрошені гості не забули про предмет розмови, пильно стежили представники «Игромании»: Володимир Болвинов, Олексій Макаренко і Світлана Померанцева.

Незважаючи на важливість кожної з трьох перерахованих вище професій, часом їх ролі оскаржуються. У багатьох компаніях програмісти і навіть художники переводяться в розряд «технічних» працівників, завдання яких - лише чітко виконувати те, що прописано в дизайн-документі. Особливо часто такий підхід зустрічається у великих колективах на зразок Valve Software, Bethesda Softworks, Electronic Arts. При цьому всі лаври відправляються Гейбу Ньюеллу, г-ну Моліна або кому-небудь ще.

Якщо по відношенню до художників такий підхід зустрічається нечасто, то c програмістами це трапляється часто-густо. За прогнозами, висококваліфіковані програмісти будуть поступово витіснятися з ігрових компаній в спеціалізовані команди, доля яких - займатися виключно розробкою двигунів.

[Ігроманія]: Що ж таке програмування - мистецтво чи високотехнологічне ремесло? Чим відрізняється робота ігрового програміста від написання звичайного софта? Яка його роль в успіх або провал гри?

[AG]: Програмування - це високотехнологічне ремесло з елементами мистецтва. Майже скрізь є вже протоптані доріжки і готові рішення. Але місця для польоту фантазії все ще досить. І часто невідкладна швидка допомога натхнення просто необхідна! Сьогодні найбільш затребуваний мову програмування С ++, але все більш актуальними стають платформа .NET і скриптові мови.

Цьому не вчать в школі (на жаль для майбутніх кодеров і на щастя для всіх інших). Пройшовши свою першу комп'ютерну гру, мені захотілося розібратися в тому, як вона влаштована. Потім з'явилося бажання зробити щось своє. Але для цього довелося повчитися. На відміну від роботи над звичайним софтом, у геймдева безліч недоліків. Але з іншого боку, тут використовуються всі самі передові технології і зовсім інший темп життя. Багато моїх знайомих, з тих чи інших причин перейшли в інші області програмування, хотіли б повернутися назад до створення комп'ютерних ігор. У нас набагато веселіше! Для початку необхідно зрозуміти, що ж це буде за гра. Розібратися у всіх тонкощах і особливостях. А потім скласти плани і почати працювати. Програмісти, звичайно, можуть трохи поліпшити гру, вносячи свої ідеї. Але можуть і зіпсувати - наплодивши багів або зробивши такі фічі, які зажадають багато часу на реалізацію. Всі плани полетять в тартарари. Команда піде в штопор, кранч, безстроковий аврал. Все-таки головна відповідальність за успіх гри лежить на дизайнерів. Саме вони визначають, як все повинно виглядати і працювати.

[nek]: На мій погляд (програмую вже 20 років), програмування - це ремесло, але після досягнення деякого рівня майстерності кодування стає чимось більшим. Роботу майстра можна називати мистецтвом. Інше питання, що мало кому доступний такий рівень, і ніхто не зможе оцінити результат творчості. Навіть інший програміст, не кажучи вже про звичайних людей. Взагалі, програмістами називають кого завгодно. Я б розділив їх на три категорії:

- настроювачі програмних систем (на вищому рівні майстерності - хакери);

- люди, які пишуть код на тій чи іншій мові;

- програмні архітектори - ті, хто знає, що сам код не важливий, важливі архітектура движка, інтерфейси, формати, алгоритми.

В ігровій індустрії гра часто пишеться на скриптах. Тих, хто працює з ними, можна формально називати програмістами. Але насправді вони в першу чергу повинні бути хорошими Геймдизайнер, а програмування їм потрібно знати на рівні 10 класу. Хоча для виробництва будь-якого софта на нормальних PC сьогодні найбільш актуальним C ++, на мобільних платформах - Java.

[dab]: Всі люди (і програмісти в тому числі) планують свої дії на день, тиждень, місяць, рік. Ті, хто вибрав програмування, займаються приблизно тим же самим - шукають рішення задач різної складності. Тільки у них є одна перевага - вони можуть запустити частина програми і відразу подивитися на результат. Чи не сподобалося - можна повернутися на крок назад і переписати ділянку коду.

У звичайному житті не кожен може похвалитися знайомством з програмістом, особливо з ігровим. Так, все чули, що є така професія, але чим займаються ці люди, ніхто толком не знає. У нас тиха, спокійна робота, яка не так помітна, як, припустимо, робота художників. 3D-модель бачать все, її можна оцінити відразу, а хто побачить кілобайти коду, завдяки яким ця модель відображається на екрані правильно, а не догори ногами?

Ось якщо з моделлю відбуваються якісь дивні речі, це стає відразу помітно. І всім зрозуміло, хто винен - ​​нероба-програміст, який не помітив у грі якийсь баг. Щоб глюків не було, потрібні висококваліфіковані фахівці, здатні планувати як рішення задачі в цілому, так і свій власний час. Часто саме цей навик недооцінюється: часом на роботу беруть всіх, хто вважає себе таким, що відбувся програмістом - недовчений студентів, кодерів без досвіду.

Конкуренція в ігровій індустрії найжорстокіша. Хто зробить найбільш якісний проект в своєму класі і жанрі, той і продасть гру. А наслідувачі будуть плестися в хвості. Це логічно - користувачі вибирають краще. Відповідно в ігропрома є кілька «локомотивів», які роблять відмінні гри, заробляють на цьому хороші гроші і вкладають їх в нові, ще більш якісні проекти. Вони прагнуть зробити нове, щоб завжди бути на гребені хвилі.

І є дуже багато «вагончиків», що тягнуться за локомотивом без шансів вирватися вперед. У таких компаній просто немає грошей на розвиток. Вони все більше і більше відстають. На мізерні кошти, що залишилися від слабких тайтлів, неможливо найняти висококваліфікований персонал. Як панацею намагаються використовувати чужі ігрові движки, але такий підхід, на мій погляд, є помилковим. Так, можна скоротити витрати і час на розробку гри, але без серйозного доопрацювання движка неможливо досягти хороших результатів. Гра заздалегідь приречена, з неї вийде лише черговий безликий клон.

Щоб серйозно доопрацьовувати движок, потрібні професіонали. А де їх взяти, якщо програмісти, які хочуть розвиватися, йдуть з команд, неуважних до питань технологій? Набагато цікавіше і прибутковіше розробити складну систему для «Газпрому», ніж перекроювати чужий движок.

Якщо подивитися на лідерів, то в основі їх проектів лежать передові технології. І це не дивно, адже всі елементи геймплея давно відомі. Зараз неможливо розробити гру, в якій не проглядалися б риси інших проектів. Компанії вкладають величезні гроші в технології, прагнуть, щоб їх продукт був краще, ніж у конкурентів. У вітчизняній ігрової індустрії поки практично немає передових ігор. А отже, немає грошей на розробку своїх унікальних технологій, що веде до відставання від світових лідерів.

А отже, немає грошей на розробку своїх унікальних технологій, що веде до відставання від світових лідерів

Робота 3D-Моделер дуже важлива, але пожвавлюють світ гри програмісти.

Поправити невдалу модель - справа двох-трьох годин. Переписати код движка куди складніше.

Бібліотека для геймерів

Іноді під мистецтвом програмування на увазі гарне оформлення коду (відступи, смислові коментарі), спритне використання недокументованих можливостей компілятора (припустимо, округлення під час приведення типів), прозорість для інших програмістів. Це «академічна» точка зору.

На практиці ж потрібно зовсім інше - максимальна ефективність (ті самі кадросекунди) і безпроблемна робота на різних конфігураціях (щоб не латати дірки патчами після релізу).

Гонка за fps при тій якості і кількості графіки, які пропонують гри сьогодні, стала б вкрай складною справою, якби не допомога з боку виробників операційних систем, в першу чергу Microsoft. Саме гри допомогли просуванню Windows по всьому світу. Спочатку Windows була офісної системою, ігри же робили під DOS, оскільки з графікою вона вміла звертатися куди спритніше. І перший DOOM, і System Shook працювали саме під DOS. Спроби подружити гри з Windows не увінчалися успіхом, і вона уславилася «неігровий», зупинитися системою. А програмування в середовищі Windows стали вважати занадто складним для розуміння.

Microsoft перейнялася цією проблемою і випустила Game SDK, що складається з чотирьох компонентів - DirectDraw (набір функцій для прискореної обробки графіки), DirectSound (набір для роботи зі звуковими картами), DirectInput (набір для обробки сигналів з джойстика, миші і клавіатури) і DirectPlay ( підтримка мережевої гри). Це і був прообраз того, що сьогодні ми називаємо DirectX.

Завдяки DirectX Windows перемогла, а DOS канула в лету. Але, зробивши перший крок, Microsoft довелося і далі слідувати цим шляхом - відстежувати зміни на ігровому ринку, додавати в DirectX найостанніші технології. Тому сьогодні ми маємо на комп'ютерах дев'яту версію бібліотеки DirectX, хоча сама операційна система за цей час оновлювалася лише тричі (Windows 95/98 / ХР - інші версії нас, гравців, не цікавлять). На сьогоднішній день DirectX фактично став стандартом в ігропрома.

Як все змінилося ... На зорі геймдева гри робили саме програмісти. У всякому разі, ті, хто вмів переводити свої дизайнерські ідеї в правильні послідовності бітів і байтів. Взяти хоча б нетлінне твір Олексія Пажитнова - тетріс або «Посадку на Місяць» для програмованих калькуляторів середини 80-х років минулого століття. Або незліченні скролери тієї ж епохи - їх задумували і створювали програмісти.

Знання хоча б основ програмування вважалося мало не обов'язковою умовою для роботи в геймдева. Майже всі засновники ігродельческіх фірм були кодерами. Саме вони сформували основні ідеї, які експлуатуються до цих пір (згадаємо хоча б Сіда Мейера).

Знамените назву Ideas from the Deep (більш відоме в скороченому варіанті id Software) якраз відображає романтику тих часів - троє талановитих програмістів (Джон Ромеро, Джон Кармак і Том Хол) збиралися вразити світ глибиною своїх нових ідей. І почасти їм це вдалося. А потім щось сталося. У керівництво ігрових компаній стали приходити менеджери, Геймдизайнер і інші не-програмісти. Останніх же повсюдно засовують на другий план (якщо тільки вони не є власниками компаній).

[Ігроманія]: Там, де розробкою все ще керують справжні програмісти (за кваліфікацією і образу думки), часто трапляється сильний перекіс в сторону технологічності. Як приклад можна навести той же DOOM 3. Картинка класна, але геймплей цілком стандартний.

Можливо, професійний інтерес вимагає від кодеров пошуку нових технологічних рішень, а завдання геймплея їм не такі цікаві? Або і те, і інше є різними сторонами одного і того ж - мистецтва програмування?

[dab]: Для мене гра - це перш за все придбання будь-якого нового досвіду. Оскільки я гравець зі стажем, той же DOOM 3 нічого нового мені не дав, ця гра для мене майже не цікава. Недосвідченим новачкам же третій DOOM може здатися одкровенням.

Вся справа в базовій підготовці. Придумати сьогодні щось абсолютно нове в комп'ютерних іграх неможливо, тому багато розробників користуються тільки перевіреними часом рішеннями - роблять те ж саме, що і раніше, запозичують вдалі ідеї. Почасти це правильно - старі гравці йдуть, на зміну їм приходять нові, а їм все це ще в дивину. Таким гравцям без різниці, клон це чи ні клон, - оригінал-то вони не бачили.

Увага новачків можна залучити простими технологічними рішеннями - навороченій графікою, просунутої анімацією, реалістичною фізикою. Вони не будуть грати в старі ігри з морально застарілою графікою, незважаючи на всю їх культовість і захоплюючий геймплей.

Проте є ще компанії, які намагаються придумати щось нове в комп'ютерних іграх. Це або такі ж божевільні, як я, або заможні розробники, яким не шкода викинути гроші на вітер, якщо експеримент закінчиться повним провалом. Але якщо гра дійсно додасть щось нове в ігрову індустрію, якщо рішення виявиться вдалим і при цьому реалізація не підкачає, успіх забезпечений. Адже такий проект цікавий як початківцям гравцям, так і ветеранам. Окупляться будь-які витрати.

Окупляться будь-які витрати

Для програміста знання основ анімації та образотворчого мистецтва необов'язково, але вкрай бажано.

Зовсім добре, якщо кодер розуміє принципи побудови тривимірних моделей.

[nek]: Розробка комп'ютерних ігор має суттєві відмінності від виробництва звичайного софта. Вірно кажуть, ігри біжать попереду технологій, як наслідок, для програміста, що працює в геймдева, продуктивність - це все. Скрізь потрібна висока швидкість, кількість fps - бог у плоті, за кожен відсоток продуктивності боротьба йде до переможного.

Дуже бажаний художній смак: ігровому програмісту іноді доводиться вирішувати завдання художника. Не менш важливим є розуміння фізики модельованих явищ. Зайва науковість часто шкодить. Взагалі, ігрова індустрія досить прагматична - розвиток йде дуже швидко, старий код живе недовго. За все відповідає керівник, і якщо він програміст за спеціалізацією, це, ймовірно, накладає певний відбиток на розробку.

Рядові програмісти можуть завалити проект, особливо якщо начальник вчасно не помітить проблему. Якщо гра глючная, програмісти винні в цьому в останню чергу. В першу чергу в цьому будуть винні бета-тестери (не знайшли баг) або продюсер (не дочекався закінчення бета-тестування).

Створення коду виглядає з боку як шаманство - програміст пише якісь загадкові знаки, які незбагненним чином перетворюються в вікна програми з кнопочками, панелями і пунктами меню. Причому все це працює за певним планом, задуманому кодером. З нічого виникає щось корисне.

Ця метаморфоза вражала уяву простих користувачів. Магія злегка зів'яла, коли з'явилася візуальне середовище розробки, така як Microsoft Visual C ++. Навіть самий неписьменний користувач може створити вікна і кнопочки за кілька секунд, користуючись тільки мишею. Природно, подібна дружелюбність інтерфейсу негайно збільшила число цікавляться програмуванням. Як тільки вони копнули глибше, з'ясувалося, що більшість найпоширеніших завдань вже вирішив за них хтось інший. Як вивести на екран найпростіше зображення, як зберігати файли на диск в текстовому форматі, як змінити розмір і колір шрифту - все це вже є, не потрібно винаходити велосипед.

Безліч готових рішень (іноді жартома званих «кодової смітником») можна знайти в інтернеті. Наприклад, Microsoft поширює величезну бібліотеку MSDN.

Вихідний код гри «Легенди про лицаря» (від творців «Космічних рейнджерів») пишеться на С ++.

Перш ніж геймдизайнер зможе приступити до створення рівнів, програмісти повинні розробити інструменти для редагування. На скріншоті - редактор гри «Легенда про лицаря».

[Ігроманія]: Часом здається, що серед достатку різноманітних початкових кодів програмісту потрібно всього лише підібрати відповідний шматок коду, злегка підправити його під своє завдання, і справа в капелюсі. Тоді про яке мистецтво може йти мова? У чому власне полягає творчість?

[dab]: Багато вміють програмувати, і багато хто вважає себе програмістами, проте в геймдева, як і в кожній справі, якість гри визначається професіоналізмом кодеров. Всім відомо, що кодери пишуть на мовах програмування, але для більшості людей це щось незрозуміле.

Знання мови, його синтаксису і правил - це лише початковий рівень програмування. І якщо вам важко зрозуміти, чим відрізняється оператор if від for, кодера з вас не вийде: мова - це саме базове поняття і найпростіша річ в програмуванні. Хороший кодер, як правило, вільно володіє кількома мовами і, якщо буде потрібно, швидко вивчить новий.

У програмуванні все засновано на трьох китах: на досвіді у використанні тієї чи іншої технології, розумінні того, як влаштовані і працюють конкретні мови, і умінні творити нове, використовуючи наявні напрацювання. Досвід - найпростіша і зрозуміла річ. Неможливо дізнатися, як працює функція, якщо нею не користуватися.

Розуміння використовуваних технологій частково пов'язане з досвідом. Але це не одне і те ж. Все в світі неідеально, особливо це стосується комп'ютера, де є маса обмежень, будь то швидкість або обсяг пам'яті. І якщо не розумієш, як це працює, то можеш застосувати технологію там, де їй зовсім не місце. В результаті отримаєш глючну і гальмівну гру, а у конкурентів все буде літати.

Простий приклад з життя. Іноді в ігровому движку потрібно виділити пам'ять в часто викликається функції для локального застосування. Якщо вирішувати завдання з ходу, програміст мови високого рівня С ++, швидше за все, викличе вбудовану функцію, припустимо, new. Але той, хто розуміє, як працює компілятор С ++, хто знайомий з низькорівневим ассемблером, напише одну коротеньку інструкцію: sub ebp, size. Ця інструкція працює в сотні, а то й тисячі разів швидше, ніж функція new! Але в переважній більшості компаній такий злісний хак не вітається, так як багато разів збільшує ймовірність помилки. Якщо в компанії працюють некваліфіковані програмісти, подібний код неприпустимий, використовуються свідомо повільні технології.

Найважче, мабуть, створювати щось нове, чого ніхто ніколи не робив. У нинішніх умовах часом немає часу на глибоке вивчення проблеми. Найчастіше фраза «не потрібно винаходити велосипед» зводиться в абсолют. Це неправильно, оскільки змушує програмістів слідувати певним шаблоном, користуватися готовими рішеннями. Не розібравшись, як подібні завдання вирішували інші, неможливо зробити щось своє.

Я вважаю, що кожен програміст в житті повинен не тільки побудувати будинок, посадити дерево і виростити сина, а й написати свій власний компілятор (програму, що переводять текстові рядки в машинні коди процесора). І не для того, щоб зробити це крутіше, ніж інші, а щоб набути безцінного досвіду. На жаль, у вітчизняному ігропрома це часто не розуміють, а просто використовують чужий движок.

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

Дуже шкода, адже отримати подібний досвід інакше просто неможливо

Спрощене скріптопісаніе засноване на функціях мов програмування.

Щоб вивести на екран підсумкову картинку, програмістам доводиться неабияк потрудитися (гра «Легенди про лицаря»).

програмування 3D програмування 3D

Код, який виводить 3D-модель на екран монітора. Взято з нової гри Олексія Дубового з робочою назвою Star Time, офіційно ще не анонсованої.

Олексій Дубовий про деякі тонкощі програмування тривимірної графіки:

Вся та графіка, якої блищать останнім часом комп'ютерні ігри, базується на обмані нашого зору. Зображення на екрані монітора насправді нереально. Картинка будується з безлічі крапок, що світяться (пікселів), завдання програмістів - пофарбувати кожну з них в потрібний колір.

Будь-яка тривимірна модель (наприклад, стілець або стіл) проектується на екран і стає плоским малюнком. У справжнього столу є чотири кути, за допомогою лінійки завжди можна виміряти його ширину, довжину і висоту. У реальності будь-який кут визначається трійкою чисел, які позначають відстані по трьох координатах. Точно так же в комп'ютері модель задається набором координат кожного кута.

Але цього недостатньо, адже простір між знайденими точками треба заповнити якийсь матерією, інакше вийде Чеширський кіт з «Аліси в Країні Чудес» - є посмішка, але немає самого кота. У комп'ютері поверхню між кутами задається площинами. Для кожного фрагмента моделі потрібно отримати послідовний набір координат всіх кутів, що належать кожній площині, з яких складається даний фрагмент. Але це тільки півсправи: потрібно ще розробити структуру поверхні, що відповідає за зовнішній вигляд матерії.

Програми для створення тривимірної графіки будь-якого 3D-об'єкту негайно додають матеріал за замовчуванням. Він несе в собі інформацію про колір. Щоб деталь виглядала точно так, як і було задумано, використовують текстури - заздалегідь намальовані картинки для кожного типу поверхні. Це набір пікселів, який встановлює колір кожної точки моделі. Маючи подібний набір, комп'ютер за допомогою алгоритмів (вершинних шейдеров) спочатку розраховує місця, де знаходяться на екрані кути, а потім послідовно малює між отриманими точками кожен піксель з прикладеною до моделі текстури.

На монітор поступово виводяться всі площини 3D-об'єкта. Але для сучасної гри однієї текстури мало. І програмісту для кожного пікселя на екрані доводиться писати особливий код (піксельний шейдер) який встановлює, як саме малювати в грі даний піксель. При цьому враховується маса різних параметрів (наприклад, то, як піксель висвітлюється сонцем).

Це базова концепція. Все інше - танці з бубном, винахід все більш витончених алгоритмів заради створення на екрані максимально ефектною і реалістичною картинки.

На початку комп'ютерної ери нові ідеї лежали на поверхні. Основна проблема була в складності реалізації цих ідей. На той момент єдиними людьми, здатними перетворити їх в кінцевий продукт, були програмісти.

Сьогодні ж місце програмістів почали займати люди, яких в першу чергу цікавить фінансовий успіх проекту (менеджери, продюсери), або ті, хто спеціалізується на організації ігрового процесу (Геймдизайнер). Але незважаючи на це, всі ідеї і концепти як і раніше реалізуються програмістами.

Чим відрізняється робота ігрового програміста від написання звичайного софта?
Яка його роль в успіх або провал гри?
D-модель бачать все, її можна оцінити відразу, а хто побачить кілобайти коду, завдяки яким ця модель відображається на екрані правильно, а не догори ногами?
А де їх взяти, якщо програмісти, які хочуть розвиватися, йдуть з команд, неуважних до питань технологій?
Можливо, професійний інтерес вимагає від кодеров пошуку нових технологічних рішень, а завдання геймплея їм не такі цікаві?
Тоді про яке мистецтво може йти мова?
У чому власне полягає творчість?