Разработка компьютерных игр. Часть 1
После опубликования материала "Разработка компьютерных игр. Intro" мне пришло очень много писем, и это вполне объяснимо — затронутый вопрос оказался весьма интересным. Перед тем как приступить к дальнейшему описанию, ответим на некоторые ключевые вопросы по прошлой статье, причем большинство из них повторялось.
Какие 20-30 профессий, связанные с геймдевом, вы имели в виду…
В принципе, есть ранжирование, то есть при достижении определенного профессионального уровня специалист должен возглавить определенный отдел, то есть с некоторого момента он должен иметь и навыки руководителя. А так можно выделить основные профессиональные направления:
. литературное. Написание сценариев для игры (сюжета), отдельных квестов и уровней;
. звуковое. Музыкальное и звуковое оформление игры, сюда же входят программисты, которые отвечают за звуковой движок;
. графическое. Это художники, аниматоры, 3D-моделлеры. Программирование графического движка, пользовательского интерфейса. Визуализация событий (взрывов и т.п.);
. алгоритмическое. Физика персонажей и виртуальных сред, искусственный интеллект для NPC, аниматов, компьютера при варианте оффлайн кампаний. Оптимизация алгоритмов. Программирование. Реализация и эргономика управления, многопользовательского режима. Создание или использование языков представления знаний (ЯПЗ). Расстановка целей;
. тестирующее. Тестирование игры и ее отдельных модулей;
. локализационное. Перенос игры на другие платформы (Mac, игровые приставки), перевод на другие языки;
. сервисное. Поддержка обратной связи с пользователями, сайта и т.п.;
. менеджмент, в данном случае мы его рассматриваем как управление. То есть руководство;
. HR-отдел. Поиск и набор новых работников в команду;
. коммерческий отдел. Распространение, договоры с издателями и так далее;
. технический отдел. Главным образом это касается онлайн игр, для функционирования которых нужно содержать сервер, производить
администрирование и т.п.
Как вы понимаете, здесь обрисована общая, утрированная картина, и в каждом конкретном случае команда имеет свою структуру, тем более что некоторые сегменты являются смежными, а сама разработка делится на определенные фазы. Спрос существует буквально на все профессиональные направления, и даже если вы пройдетесь по форумам и найдете там большое количество предложений от композиторов и писателей сценариев, то это не значит, что они невостребованы и рынок в этих сферах заполнен. Нет, просто есть явная конкуренция, и чем сложнее профессия, тем конкуренция меньше.
На какие книги следует обратить внимание?
Все, что есть на книжных полках по интересующей вас тематике, а также имеется на специализированных интернет-ресурсах. Буквально все! Дело в том, что в каждой книге или статье излагается теория и практика с точки зрения автора или авторов, а чтобы полно взглянуть на вопрос, нужно изучить несколько мнений. При этом стоит отметить, что очень редко бывают ситуации, когда вы конкретно найдете то, что необходимо, такие прямые попадания носят случайный характер.
Если один автор — приверженец шутеров, он их много разработал и пишет обо всем со своей точки зрения, то второй — сторонник стратегических игр, следовательно, излагает все со своих позиций. Это в глобальном смысле, а если углубиться в тему, то есть приверженцы различных технологий, вариантов реализаций и так далее. Поэтому лучше иметь наиболее полное преставление о вопросе, и, кстати, тогда у вас могут измениться приоритеты при поиске литературы.
Например, занявшись искусственным интеллектом либо чем-то подобным, вы изначально найдете что-то общее и теоретическое. Потом нужно будет искать некоторые практические выкладки, а после, когда вы станете разбираться, то дойдете до чтения литературы с описанием большого количества вариантов рекурсивных функций и уникальных алгоритмов. Естественно, все это должно быть напрямую связано с практической деятельностью, потому как теория без практики — ничто.
Хочу посвятить себя разработке компьютерных игр. С чего следует начать?
Поставить перед собой цель и достигать ее. А если не так торжественно, то начните с создания собственной казуальной игры, попробуйте ее распространить, также можете попробовать устроиться в фирму, занимающуюся разработкой. Конечно, наиболее успешные попытки будут по линиям программирования и компьютерной графики. В общем, нужно действовать. Да… и английский язык нужно знать на уровне чтения технической документации.
О самом важном
Теперь переходим непосредственно к продолжению материала. В предыдущей части, которую можно считать вступлением, мы практически бросились "из огня да в полымя", и, в принципе, так и нужно было делать. Но сейчас имеет смысл подробно рассмотреть самые начальные фазы работы над игровым проектом. Их три: разработка идеи, создание наброска и определение требований. Несмотря на кажущуюся ненужность, обсуждение этого вопроса и его практическое понимание является чуть ли не самым важным.
При разработке идеи вы должны ответить на следующие вопросы:
. К какому жанру относится проектируемая игра (шутер, квест, логическая, симулятор, RTS, TBS, RPG)?
. Каков сюжет?
. Данная игра является простой или сложной?
. Какая графика будет применяться — трехмерная или двухмерная? Какая будет проекция обзора у игрока?
. Какие цели у данной игры, а также что будет являться победой, а что считать поражением?
. Игра большей частью тактическая или стратегическая?
. На какое время рассчитано прохождение всего сюжета? Сколько предусматривается уровней, если они имеются, и какое время будет затрачено игроком на прохождение каждого из них?
. Игра рассчитана на одного игрока или является многопользовательской? Или и то и другое?
На самом деле это только первоначальные вопросы, они помогут в создании предварительного наброска, который уже более детально описывает структурные области игры. При этом на данном этапе нужно попытаться как можно более широко ответить для себя на вопросы экономической целесообразности: для кого и на какие сегменты рассчитана эта игра и каковы спрос и конкуренция в планируемой нише?
После составления предварительного наброска, который включает в себя все ключевые описания самой игры, следующим этапом идет составление списка требований для каждого отдельного пункта. Причем именно он (этот список) будет являться отправной точкой для дальнейшей разработки и использоваться в качестве основы. Поэтому описать все нужно как можно более определенно и полно.
Пример
Давайте приведем конкретный пример, возьмем его, что называется, с потолка. Сначала отвечаем на предварительные вопросы, которые приведены выше: . Стратегия реального времени (RTS).
. Война в космосе в 3020 году. Военизированным отрядам десанта необходимо зачистить место высадки на планете Х от монстров, организовать там свою базу, собрать ресурсы для формирования новых войск и выступить против космической коалиции, которая расположена в другой части планеты Х. Изначально герой является сержантом и управляет небольшим отрядом, и так далее…
. Средней сложности.
. Трехмерная графика, вид сверху.
. Цель — захватить планету Х, получить звание главнокомандующего. Победа в случае успешного выполнения всех операций (прохождения уровней), поражение — гибель героя (либо — для отдельных уровней — невозможность уложиться в указанное время).
. Игра большей частью тактическая. Движение сюжета идет "от ролика к ролику".
. Прохождение всей игры займет несколько дней, на каждый уровень будет тратиться от 20 минут до 3 часов, всего уровней — 20.
. Игра предусматривает однопользовательский режим (кампания).
Исходя из этого, делаем набросок с исходными данными:
. Основной сюжет — сражения в космосе, требуются: реалистичное воссоздание фантастического мира, тщательное моделирование событий,
предусмотренных общим сюжетом и сценариями уровней.
. Сражения — уровень отрядов космической пехоты, механизированных подразделений, воздушные войска. Игрок командует отрядами, формируя их по своему выбору. Соперники — крупные и мелкие монстры, населяющие планету (наземные и воздушные), войска коалиции (пехота, техника).
. Ресурсы — плутоний, железная руда. Для их добывания необходимы специальные юниты.
. Строения игрока — завод по производству оружия, завод по производству легкой техники, фабрики синтеза еды, казармы. Строения соперников… . Реализм — туман войны, уникальные особенности природного ландшафта, возможность составления нескольких вариантов маршрутов следования, наличие тупиковых путей.
. Игроки — человек (игрок) за звездный десант, компьютер за монстров, компьютер за коалицию.
Как видите, мы уже составили вполне понятный набросок, в рамках которого очень многое проясняется. После этого идет фаза составления требований, предъявляемых к каждому отдельному пункту. Например, описание "реалистического воссоздания фантастического мира" может занять несколько страниц с подробными требованиями того, каким этот мир должен быть, например, даже указанием гравитации… Поскольку мы подразумеваем движение "от ролика к ролику", то лучше всего сделать дополнительно наброски для каждого уровня по отдельности, а потом сформировать требования и для них. Список требований является практически главным документом. После того как он сделан, а это, в самом деле, отнимает очень много времени, все передается разработчикам, которые в свою очередь все переводят на технический язык, разбивают на технологические этапы с конкретными указаниями, то есть составляют техническое задание, — это четвертая фаза работы над проектом.
Честно говоря, несмотря на то, что первые три кажутся не очень значимыми, на самом деле это далеко не так. Причем такое поверхностное видение чаще всего свойственно начинающим командам разработчиков, которые пытаются ухватиться за все сразу. Еще более критические моменты возникают, когда начальным фазам вообще не уделяется внимания, а некоторые пункты считаются "само собой разумеющимися". Например, когда меня недавно пригласили в качестве AI программиста в один небольшой проект, ваш покорный слуга попросил ТЗ (техническое задание). Вместо него мне прислали одну страницу doc-файла с весьма абстрактными описаниями: "Ну здесь типа тетриса, только блоки имеют различные формы". И все! Какие формы у блоков, как они выбираются — осталось загадкой. На такое ТЗ можно смотреть как на показатель того, серьезно ли относятся к проекту вообще, и скорее всего, ТЗ нужно будет делать самостоятельно.
Помимо этого, первоначальные фазы планирования позволяют:
1. Избежать гигантомании и "монстеризации" проекта. Например, в фазе идей предусмотрено очень многое, но потом даже на уровне формирования наброска вы уже начинаете понимать, что реально воплотить, а что не очень.
2. Дать полное руководство для разработчиков с минимумом неопределенностей и абстракций, в результате чего они сделают хорошее ТЗ.
3. Структурировать проект.
4. Более точно сформулировать идею.
5. Сэкономить много времени на разработке в дальнейшем.
6. Сделать проект конечным!
Само создание наброска идет в плотной взаимосвязи с фазой формирования требований. И вообще, первые три фазы для серьезных проектов могут занимать много месяцев. Они не будут потрачены зря.
При этом лучше, если в рамках данного этапа участвует не один человек, а некая команда специалистов. Уже классический пример — с Gothic3: когда разработчики почти закончили игру, обнаружилось, что среди персонажей виртуального мира практически отсутствует… женский пол:). То есть целый мир населен одними мужиками. Конечно, эта история у многих вызывает улыбку, тем более что ясно — игру такого уровня без качественного планирования создать практически невозможно. Просто на первом этапе данный момент остался незамеченным, не было еще одного взгляда со стороны. Очень часто (мы уже не говорим о Gothic3 и Pluto13 Gmbh) можно встретить подход в формировании команд, которые образуются вокруг одного человека, и он тянет на себе буквально все. Это ошибка. Тут, как в футболе, выигрывает не отдельный игрок, а команда.
Промежуточное завершение
Первоначальная идея — не самое главное, хотя в некотором смысле основополагающее. Наиболее важным является ее качественная проработка на всех уровнях, от проектирования до непосредственно самой разработки. Например, ту игру, которую мы сейчас виртуально спроектировали, можно загубить в корне, сделать неинтересной, если все сведется к добыванию ресурсов и формированию армии из тысячи единиц. С другой стороны, можно сделать конфетку, предусмотрев разнообразие уровней, интересное развитие, нелинейность основного сюжета, добавление дополнительных сюжетных линий, внесение ограничений. На уровне разработки также есть место техническому творчеству. Например, сделать компьютерный ИИ более разнообразным в выборе тактик.
Не так давно мне дали проект игры, в котором предусмотрено 43 вида юнитов для формирования армии. Это также излишество, которое, во-первых, усложняет положение игрока, во-вторых, усложняет саму разработку, а о балансе сил (у соперника другие юниты:)) говорить совсем уж не приходится. То есть необходимо соблюдение оптимальности и баланса.
Все написанное выше имеет самое прямое отношение к практике, тем более что пренебрежение начальными фазами работы над проектом встречается очень и очень часто. И в конце концов разработчики, сломав копья и устав импровизировать в real-time режиме, переходят к идее качественного изначального планирования. Опыт.
Продолжение следует…
Кристофер christopher@tut.by
Какие 20-30 профессий, связанные с геймдевом, вы имели в виду…
В принципе, есть ранжирование, то есть при достижении определенного профессионального уровня специалист должен возглавить определенный отдел, то есть с некоторого момента он должен иметь и навыки руководителя. А так можно выделить основные профессиональные направления:
. литературное. Написание сценариев для игры (сюжета), отдельных квестов и уровней;
. звуковое. Музыкальное и звуковое оформление игры, сюда же входят программисты, которые отвечают за звуковой движок;
. графическое. Это художники, аниматоры, 3D-моделлеры. Программирование графического движка, пользовательского интерфейса. Визуализация событий (взрывов и т.п.);
. алгоритмическое. Физика персонажей и виртуальных сред, искусственный интеллект для NPC, аниматов, компьютера при варианте оффлайн кампаний. Оптимизация алгоритмов. Программирование. Реализация и эргономика управления, многопользовательского режима. Создание или использование языков представления знаний (ЯПЗ). Расстановка целей;
. тестирующее. Тестирование игры и ее отдельных модулей;
. локализационное. Перенос игры на другие платформы (Mac, игровые приставки), перевод на другие языки;
. сервисное. Поддержка обратной связи с пользователями, сайта и т.п.;
. менеджмент, в данном случае мы его рассматриваем как управление. То есть руководство;
. HR-отдел. Поиск и набор новых работников в команду;
. коммерческий отдел. Распространение, договоры с издателями и так далее;
. технический отдел. Главным образом это касается онлайн игр, для функционирования которых нужно содержать сервер, производить
администрирование и т.п.
Как вы понимаете, здесь обрисована общая, утрированная картина, и в каждом конкретном случае команда имеет свою структуру, тем более что некоторые сегменты являются смежными, а сама разработка делится на определенные фазы. Спрос существует буквально на все профессиональные направления, и даже если вы пройдетесь по форумам и найдете там большое количество предложений от композиторов и писателей сценариев, то это не значит, что они невостребованы и рынок в этих сферах заполнен. Нет, просто есть явная конкуренция, и чем сложнее профессия, тем конкуренция меньше.
На какие книги следует обратить внимание?
Все, что есть на книжных полках по интересующей вас тематике, а также имеется на специализированных интернет-ресурсах. Буквально все! Дело в том, что в каждой книге или статье излагается теория и практика с точки зрения автора или авторов, а чтобы полно взглянуть на вопрос, нужно изучить несколько мнений. При этом стоит отметить, что очень редко бывают ситуации, когда вы конкретно найдете то, что необходимо, такие прямые попадания носят случайный характер.
Если один автор — приверженец шутеров, он их много разработал и пишет обо всем со своей точки зрения, то второй — сторонник стратегических игр, следовательно, излагает все со своих позиций. Это в глобальном смысле, а если углубиться в тему, то есть приверженцы различных технологий, вариантов реализаций и так далее. Поэтому лучше иметь наиболее полное преставление о вопросе, и, кстати, тогда у вас могут измениться приоритеты при поиске литературы.
Например, занявшись искусственным интеллектом либо чем-то подобным, вы изначально найдете что-то общее и теоретическое. Потом нужно будет искать некоторые практические выкладки, а после, когда вы станете разбираться, то дойдете до чтения литературы с описанием большого количества вариантов рекурсивных функций и уникальных алгоритмов. Естественно, все это должно быть напрямую связано с практической деятельностью, потому как теория без практики — ничто.
Хочу посвятить себя разработке компьютерных игр. С чего следует начать?
Поставить перед собой цель и достигать ее. А если не так торжественно, то начните с создания собственной казуальной игры, попробуйте ее распространить, также можете попробовать устроиться в фирму, занимающуюся разработкой. Конечно, наиболее успешные попытки будут по линиям программирования и компьютерной графики. В общем, нужно действовать. Да… и английский язык нужно знать на уровне чтения технической документации.
О самом важном
Теперь переходим непосредственно к продолжению материала. В предыдущей части, которую можно считать вступлением, мы практически бросились "из огня да в полымя", и, в принципе, так и нужно было делать. Но сейчас имеет смысл подробно рассмотреть самые начальные фазы работы над игровым проектом. Их три: разработка идеи, создание наброска и определение требований. Несмотря на кажущуюся ненужность, обсуждение этого вопроса и его практическое понимание является чуть ли не самым важным.
При разработке идеи вы должны ответить на следующие вопросы:
. К какому жанру относится проектируемая игра (шутер, квест, логическая, симулятор, RTS, TBS, RPG)?
. Каков сюжет?
. Данная игра является простой или сложной?
. Какая графика будет применяться — трехмерная или двухмерная? Какая будет проекция обзора у игрока?
. Какие цели у данной игры, а также что будет являться победой, а что считать поражением?
. Игра большей частью тактическая или стратегическая?
. На какое время рассчитано прохождение всего сюжета? Сколько предусматривается уровней, если они имеются, и какое время будет затрачено игроком на прохождение каждого из них?
. Игра рассчитана на одного игрока или является многопользовательской? Или и то и другое?
На самом деле это только первоначальные вопросы, они помогут в создании предварительного наброска, который уже более детально описывает структурные области игры. При этом на данном этапе нужно попытаться как можно более широко ответить для себя на вопросы экономической целесообразности: для кого и на какие сегменты рассчитана эта игра и каковы спрос и конкуренция в планируемой нише?
После составления предварительного наброска, который включает в себя все ключевые описания самой игры, следующим этапом идет составление списка требований для каждого отдельного пункта. Причем именно он (этот список) будет являться отправной точкой для дальнейшей разработки и использоваться в качестве основы. Поэтому описать все нужно как можно более определенно и полно.
Пример
Давайте приведем конкретный пример, возьмем его, что называется, с потолка. Сначала отвечаем на предварительные вопросы, которые приведены выше: . Стратегия реального времени (RTS).
. Война в космосе в 3020 году. Военизированным отрядам десанта необходимо зачистить место высадки на планете Х от монстров, организовать там свою базу, собрать ресурсы для формирования новых войск и выступить против космической коалиции, которая расположена в другой части планеты Х. Изначально герой является сержантом и управляет небольшим отрядом, и так далее…
. Средней сложности.
. Трехмерная графика, вид сверху.
. Цель — захватить планету Х, получить звание главнокомандующего. Победа в случае успешного выполнения всех операций (прохождения уровней), поражение — гибель героя (либо — для отдельных уровней — невозможность уложиться в указанное время).
. Игра большей частью тактическая. Движение сюжета идет "от ролика к ролику".
. Прохождение всей игры займет несколько дней, на каждый уровень будет тратиться от 20 минут до 3 часов, всего уровней — 20.
. Игра предусматривает однопользовательский режим (кампания).
Исходя из этого, делаем набросок с исходными данными:
. Основной сюжет — сражения в космосе, требуются: реалистичное воссоздание фантастического мира, тщательное моделирование событий,
предусмотренных общим сюжетом и сценариями уровней.
. Сражения — уровень отрядов космической пехоты, механизированных подразделений, воздушные войска. Игрок командует отрядами, формируя их по своему выбору. Соперники — крупные и мелкие монстры, населяющие планету (наземные и воздушные), войска коалиции (пехота, техника).
. Ресурсы — плутоний, железная руда. Для их добывания необходимы специальные юниты.
. Строения игрока — завод по производству оружия, завод по производству легкой техники, фабрики синтеза еды, казармы. Строения соперников… . Реализм — туман войны, уникальные особенности природного ландшафта, возможность составления нескольких вариантов маршрутов следования, наличие тупиковых путей.
. Игроки — человек (игрок) за звездный десант, компьютер за монстров, компьютер за коалицию.
Как видите, мы уже составили вполне понятный набросок, в рамках которого очень многое проясняется. После этого идет фаза составления требований, предъявляемых к каждому отдельному пункту. Например, описание "реалистического воссоздания фантастического мира" может занять несколько страниц с подробными требованиями того, каким этот мир должен быть, например, даже указанием гравитации… Поскольку мы подразумеваем движение "от ролика к ролику", то лучше всего сделать дополнительно наброски для каждого уровня по отдельности, а потом сформировать требования и для них. Список требований является практически главным документом. После того как он сделан, а это, в самом деле, отнимает очень много времени, все передается разработчикам, которые в свою очередь все переводят на технический язык, разбивают на технологические этапы с конкретными указаниями, то есть составляют техническое задание, — это четвертая фаза работы над проектом.
Честно говоря, несмотря на то, что первые три кажутся не очень значимыми, на самом деле это далеко не так. Причем такое поверхностное видение чаще всего свойственно начинающим командам разработчиков, которые пытаются ухватиться за все сразу. Еще более критические моменты возникают, когда начальным фазам вообще не уделяется внимания, а некоторые пункты считаются "само собой разумеющимися". Например, когда меня недавно пригласили в качестве AI программиста в один небольшой проект, ваш покорный слуга попросил ТЗ (техническое задание). Вместо него мне прислали одну страницу doc-файла с весьма абстрактными описаниями: "Ну здесь типа тетриса, только блоки имеют различные формы". И все! Какие формы у блоков, как они выбираются — осталось загадкой. На такое ТЗ можно смотреть как на показатель того, серьезно ли относятся к проекту вообще, и скорее всего, ТЗ нужно будет делать самостоятельно.
Помимо этого, первоначальные фазы планирования позволяют:
1. Избежать гигантомании и "монстеризации" проекта. Например, в фазе идей предусмотрено очень многое, но потом даже на уровне формирования наброска вы уже начинаете понимать, что реально воплотить, а что не очень.
2. Дать полное руководство для разработчиков с минимумом неопределенностей и абстракций, в результате чего они сделают хорошее ТЗ.
3. Структурировать проект.
4. Более точно сформулировать идею.
5. Сэкономить много времени на разработке в дальнейшем.
6. Сделать проект конечным!
Само создание наброска идет в плотной взаимосвязи с фазой формирования требований. И вообще, первые три фазы для серьезных проектов могут занимать много месяцев. Они не будут потрачены зря.
При этом лучше, если в рамках данного этапа участвует не один человек, а некая команда специалистов. Уже классический пример — с Gothic3: когда разработчики почти закончили игру, обнаружилось, что среди персонажей виртуального мира практически отсутствует… женский пол:). То есть целый мир населен одними мужиками. Конечно, эта история у многих вызывает улыбку, тем более что ясно — игру такого уровня без качественного планирования создать практически невозможно. Просто на первом этапе данный момент остался незамеченным, не было еще одного взгляда со стороны. Очень часто (мы уже не говорим о Gothic3 и Pluto13 Gmbh) можно встретить подход в формировании команд, которые образуются вокруг одного человека, и он тянет на себе буквально все. Это ошибка. Тут, как в футболе, выигрывает не отдельный игрок, а команда.
Промежуточное завершение
Первоначальная идея — не самое главное, хотя в некотором смысле основополагающее. Наиболее важным является ее качественная проработка на всех уровнях, от проектирования до непосредственно самой разработки. Например, ту игру, которую мы сейчас виртуально спроектировали, можно загубить в корне, сделать неинтересной, если все сведется к добыванию ресурсов и формированию армии из тысячи единиц. С другой стороны, можно сделать конфетку, предусмотрев разнообразие уровней, интересное развитие, нелинейность основного сюжета, добавление дополнительных сюжетных линий, внесение ограничений. На уровне разработки также есть место техническому творчеству. Например, сделать компьютерный ИИ более разнообразным в выборе тактик.
Не так давно мне дали проект игры, в котором предусмотрено 43 вида юнитов для формирования армии. Это также излишество, которое, во-первых, усложняет положение игрока, во-вторых, усложняет саму разработку, а о балансе сил (у соперника другие юниты:)) говорить совсем уж не приходится. То есть необходимо соблюдение оптимальности и баланса.
Все написанное выше имеет самое прямое отношение к практике, тем более что пренебрежение начальными фазами работы над проектом встречается очень и очень часто. И в конце концов разработчики, сломав копья и устав импровизировать в real-time режиме, переходят к идее качественного изначального планирования. Опыт.
Продолжение следует…
Кристофер christopher@tut.by
Компьютерная газета. Статья была опубликована в номере 25 за 2008 год в рубрике технологии