Вход в систему

Логин:
Пароль:
Вход Зарегистрироваться Вспомнить   пароль
Информация на данной странице предоставлена нашим информационным партнером Игромания.ру

Авторы: Алексей "Старпом" Макаренков, Владимир Болвин, Светлана Померанцева

Принято считать, что наибольший вклад в разработку игры вносят геймдизайнеры, художники и программисты. От компетентности и таланта этих чудо-богатырей во многом зависит успех тайтла. Меньше всего известно о программистах: они редко появляются на публике, их трудно оторвать от компьютера и поговорить на нормальном, человеческом языке — они предпочитают язык программирования. Тем не менее речь сегодня пойдет именно о программистах. И по этому случаю с нами беседуют:

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-модель на экран монитора. Взят из новой игры Алексея Дубового с рабочим названием Star Time, официально еще не анонсированной.

Алексей Дубовой о некоторых тонкостях программирования трехмерной графики:

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

Любая трехмерная модель (например, стул или стол) проецируется на экран и становится плоским рисунком. У настоящего стола есть четыре угла, с помощью линейки всегда можно измерить его ширину, длину и высоту. В реальности любой угол определяется тройкой чисел, которые обозначают расстояния по трем координатам. Точно так же в компьютере модель задается набором координат каждого угла.

Но этого недостаточно, ведь пространство между найденными точками надо заполнить какой-то материей, иначе получится Чеширский кот из «Алисы в Стране Чудес» — есть улыбка, но нет самого кота. В компьютере поверхность между углами задается плоскостями. Для каждого фрагмента модели нужно получить последовательный набор координат всех углов, принадлежащих каждой плоскости, из которых состоит данный фрагмент. Но это только полдела: требуется еще разработать структуру поверхности, отвечающую за внешний вид материи.

Программы для создания трехмерной графики любому 3D-объекту немедленно добавляют материал по умолчанию. Он несет в себе информацию о цвете. Чтобы деталь выглядела точно так, как задумывалось, используют текстуры — заранее нарисованные картинки для каждого типа поверхности. Это набор пикселей, который устанавливает цвет каждой точки модели. Имея подобный набор, компьютер при помощи алгоритмов (вершинных шейдеров) сначала рассчитывает места, где находятся на экране углы, а затем последовательно рисует между полученными точками каждый пиксель из приложенной к модели текстуры.

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

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

* * *

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

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

Двери тут