Сегодня: Среда, 24.04.2024, 17:26 (МСК)| Здравствуйте, Гость| Мой профиль | Регистрация | Вход | RSS

Работаем с VirtualDub

Роботы и экзоскелеты

Устройства с беспроводным питанием

Наушники. Как выбирать?

Плагины Sonnox Oxford
Главная » РАЗРАБОТКА КОМПЬЮТЕРНЫХ ИГР

Разработка компьютерных игр. Общая информация-1

26.07.2010
Зрителям всегда интересно, когда помимо полюбившегося фильма показывают сам процесс его съемки, специалисты демонстрируют применяемые технологии, актеры рассказывают о разнообразных трудностях. Это уже тенденция, например, на фирменных DVD вы всегда найдете так называемые «доп. материалы» и они по праву являются украшением.

В индустрии компьютерных и видео игр только начинается подобное движение. Причем мы уже можем говорить об огромных тиражах, фирменных боксах с бонусами, разработчики выпускают специальные add-on’ы. Но обычно непосредственно о самой разработке рассказывают мало, за исключением рекламных интервью, где руководитель водит журналиста по офису и говорит: «Здесь отдел 3D-анимации, здесь делается физика… а здесь мы спим, если сильно задерживаемся на работе».
Мы же в данной небольшой серии начнем публикации по основным технологиям, алгоритмам и стандартам, используемым в разработке компьютерных игр. При этом не будем привязываться к конкретному языку программирования, а опишем саму суть происходящего.


Начало


Первые игры писались учеными и для ученых. То есть, уже в 50-х прошлого века на экранах осциллографов, с помощью ламп и различных рукояток и кнопок умудрялись создавать крестики-нолики, теннис. В 1951-м Алан Тьюринг написал один из первых шахматных алгоритмов, правда, машины не были тогда развиты до должного уровня, и Тьюринг сам выполнял их роль. Так появилось понятие «бумажная машина Тьюринга». По своим алгоритмам автор тратил около получаса для расчета одного хода. Непосвященные могут подумать, что Тьюринг не умел играть в шахматы. Напротив. Он просто написал математический алгоритм, который впоследствии можно применять и в рамках машин. В том же 1951 году, автор Теории Информации, Клод Шеннон написал первую статью в истории по программированию шахмат, где выделил две основные стратегии для поиска лучшего хода, чем пользуются и поныне. Даже более того, первая шахматная программа появилась в 1952 году. Это было сделано в ядерной лаборатории Лос-Аламоса на компьютере с жестким названием MANIAC1. Этот «маньяк» имел тактовую частоту 11 КГц и память на 600 слов. Сама программа предусматривала шахматную доску 6х6, а на расчет четырех полуходов тратилось 12 минут. Далее это начало развиваться как отдельное направление, которое затронуло и такую перспективную нишу как искусственный интеллект (ИИ). Было даже некое подобие соревновательности между СССР и США, хотя в то время кибернетика у нас считалась лженаукой и находилась в опале. 
В 60-х появилась возможность подключения к компьютеру телевизора. Это придумал Ральф Бэр, что предопределило начало эры чисто игровых компьютеров, что потом выросло в целое направление, которое мы сейчас имеем в виде множества различных приставок и игровых консолей. 
В 70-80-х компьютерные игры стали неотъемлемой частью индустрии развлечений. Изначально очень большой интерес к ним был проявлен со стороны владельцев залов игровых автоматов. Их прибыли были баснословными. Помимо этого появилось множество различных вариантов компьютеров для более-менее пользовательского кошелька. Их покупали процентов на 90 только из-за игр. 
Почему во всем мире доминирующей стала платформа РС (или как говорили раньше «IBM-совместимых»)? Тоже во многом благодаря играм. Руководство Microsoft это понимало всегда, и первое, что они делают, меняя ОС, — предоставляют новые возможности для разработчиков игр.  
На данный момент эта ниша является самой перспективной и бурно развивающейся. Над музыкальным сопровождением к крупным проектам работают известные голливудские композиторы, аудио и видео спецэффекты не уступают современному кино, а удачный выход какой-либо новинки можно вполне сравнивать с выпуском блокбастера. Правда, кино сейчас до сих пор приносит большие деньги, но, судя по развитию компьютерных игр, скоро все станет финансово сопоставимым. Даже более того, у разработчиков игр уже есть своя звездная дорожка славы, которая по аналогии с синематографом называется «Hall of Game». 
Будущее у данного направления видится самым радужным.


Нужно ли увлечься разработкой вам?


А как вы сами думаете? Это практически одна из немногих сфер, где прибыли могут на несколько порядков превышать стоимость разработки. Конечно, сегодня это большей частью относится к самым популярным играм, а также так называемым казуальным. Под казуальными (для тех, кто не знает) следует понимать небольшие простые логические игрушки. Представьте себе, сколько заработали на том же Тетрисе или Марио. Сейчас разработка чего-то подобного занимает от одного до трех месяцев, а с помощью сетей распространения игра может продаваться на огромную аудиторию. 
Но, следует отметить, что данный бизнес такой же как и любой другой, то есть, имеют место и неудачи, причем это случается нередко. К тому же сейчас наступил жанровый и идейный кризис. Есть множество повторяемости, и иногда она окупается больше, чем продвижение новой идеи. Хотя в современном геймдеве (GameDev от Game Development — разработка игр) многие проблемы связаны с дефицитом хороших сюжетов, их на самом деле очень мало. Причем разработчики зачастую уже не следят за таким важным моментом как основная мотивация игрока, отдавая предпочтение созданию кратковременных и, в принципе, стандартных целей.   
Но рынок очень динамичен, существует явный и большой спрос. Это сравнимо с кино, когда потребитель увидел одно, и впечатлившись, хочет чего-то другого. Индустрия заманивает. 
Так что, на современном этапе в геймдеве благодатных ниш очень много. Также уже выпущены очень хорошие учебники, практически все ключевые технологии объяснены популярным языком. 
Если вы решили заняться разработкой компьютерных игр (не казуальных), то вам придется научиться работать в команде, к авральным режимам, а также множеству интересного обновляющегося, что потребуется изучать постоянно. Профессий, связанных с геймдевом достаточно много, порядка 20-30. 
Так что, стартуйте, а мы пока начнем «технологические раскопки». 


Алгоритмы, алгоритмы…


Не так давно мне принесли игру в жанре RTS (real-time strategy — стратегия реального времени). Операций она выполняла на порядок меньше, чем Warcraft III, хотя графический движок (что это такое, рассмотрим позже) был похожим, но… компьютер, на котором третий Warcraft шел как по маслу, в данном случае просто трещал по швам, ресурсов периодически не хватало. Были вылеты. Юниты вели себя неадекватно. То есть, понятно, что были проблемы и с искусственным интеллектом, компьютерный соперник играл однообразно. Кстати, недостатки в ИИ виртуального соперника, были якобы залакированы под надписью: «… больше предназначена для игры по сети между людьми». Очевидно, что тут мы сталкиваемся с полностью неоптимизированной разработкой, сделанной по некоим шаблонным принципам на высоком уровне (имеется в виду, есть низкоуровневое программирование, это большей частью C и ассемблер, а есть и высокоуровневое — все современные языки и скрипты). Видна быстрая скорость написания без вникания в саму суть. А ведь все можно делать по-разному.


Поворот башни танка

Простейший и классический пример. Возьмем такой юнит как танк из RTS строго типа, вид сверху. Данный юнит ездит, вертит башней с пушкой и стреляет. Для того, чтобы показать поворот башни, можно предусмотреть несколько вариантов. Самый тривиальный и ресурсоемкий — нарисовать анимацию, состоящую из множества рисунков танка с поворотом башни либо применив tweening (автоматизированное построение промежуточных отображений), а можно поступить и по-другому. Например, сделать два слоя, первый — статический корпус машины, а второй — это башня, поворот которой мы делаем математическим способом.  
Другой пример применения нескольких подходов. В каждой игре (и в обычном ПО тоже) есть такие элементы как ListBox’ы. Простыми словами, это выводимый список со скроллингом. В стандартном ПО обычно применим только один подход, а именно, создается панель, на которую на которую помещаются Item’ы, увеличивая ее размер строку за строкой, все прячется за маскирующим (Mask) элементом, ну, и прокрутка делается стандартно.
Но есть и другой вариант, который часто можно встретить именно в играх, а именно, в качестве интерфейса используется определенное количество стандартных элементов — текстовых полей, а сами строки текста (Item’ы) запоминаются в массив. И в данном случае мы «крутим» не панель с текстом под маскирующим элементом, а массив по текстовым полям. То есть, мы имеем только эмуляцию прокрутки. Внешней разницы для обоих вариантов, если это делал хороший программист, вы и не увидите.


Вот как два варианта ListBox’ов могут выглядеть внешне. Скриншот с пояснениями
 
Впрочем, можете попробовать эту "флэшку" в деле:) (см. ниже), правда, в ней отключено чтение XML с курсами валют (внимание(!), по нажатии на эту кнопку (XML) калькулятор перестает дальше работать, чуть что, перезагрузите страницу). В остальном программа работоспособна. 
Списки загружаются числами после нажатия кнопки "=". Обратите внимание, что нижний левый список функционирует за счет часто встречающегося "игрового" способа, то есть числовые данные из массива "прокручиваются" в текстовых полях. В правом нижнем списке используется стандартный метод с прокруткой панели. И на самом деле, во Flash очень легко написать текстовый редактор, который будет работать как Блокнот или WordPad (Windows).


А это сама программа, щелкайте себе в удовольствие. Как вы понимаете, она написана на Flash (точнее, ActionScript 2.0). © Кристофер

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


Карты миров


Представьте себе 90-е и компьютеры, которые тогда были. Если сохранить карту, размером в четыре или больше экранов, в формат BMP, то она смело займет весь объем HDD тех лет. 
Поэтому изначально было придумано использовать двухмерную сетку, состоящую из квадратов. Расположена она строго вертикально-горизонтально. В каждый квадрат, именуемый блоком, загружается отдельная картинка с изображением того, что именно находится в данном месте. 
То есть, если песок, то песок, участок дороги — дорога, построенное здание — строение. Соответственно, все можно хранить в двухмерном массиве, а если вы что-то изменили на карте, то это легко сохранить. В принципе, разницы между тем, что мы сейчас будем говорить о массивах или же скажем словосочетание «база данных», совершенно нет.



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


Изомектрические карты 

Но, хотелось трехмерности, а на нее ресурсов никак не хватало. Решение нашли весьма интересное. То есть, просто повернули нашу двухмерную сетку на 45 градусов по двум осям. В результате, образно говоря, квадраты-блоки стали ромбами, а сама сетка получила название изометрической. 
Что это дало в итоге? Кто проходил предмет черчения, знает, что такое вид сверху и проекция в объеме, хотя в обоих случая все выводится на 2D. Точно такой же эффект восприятия мы получили в изометрических картах. В результате по восприятию они стали более объемными. Мало того, они уже определенно и бесповоротно стали многослойными. То есть, игрок может указать уровень высоты ландшафта и увидеть это наглядно (представьте, как бы это выглядело на «квадратной» двухмерной карте), на ландшафте можно размещать деревья, различные элементы и так далее. 
Технологически, это наслоение одного изображения на другое, для реализации, как известно, используются альфа-каналы (прозрачность) и так далее. Причем, если объект помещается в блок, но превышает его по размерам (например, дерево или здание), то на определенном слое он (этот блок) просто меняется по размерам. Это очень удобно. У многослойности есть ряд преимуществ, потому как структуры можно быстро менять, например, песок на траву и так далее, не зависимо от того, что находится на других уровнях-слоях. 
С изометрией в одно время начали делать ряд экспериментов-усовершенствований. Например, в большинстве игр, связанных с экономическими стратегиями, предусмотрели поворот на 90 градусов, то есть карту стало возможно просматривать с четырех сторон. 
В других вариантах предусмотрели изменение угла наклона просмотра. 
Как вы понимаете, это был переходной этап к полноценным трехмерным картам, которые мы сейчас можем увидеть во всем многообразии. А это полноценное вращение карты, ее динамическое отображение, регулировка глубины просмотра, освещение и т.п.


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

В завершение

На этом мы сегодня остановимся. Вводная часть, можно сказать, пройдена. Далее обратимся к более конкретным вещам, причем современным, то есть, 3D, рассмотрим основные движки и технологии. 

Кристофер

Перепечатка материалов или их фрагментов возможна только с согласия автора.



| Комментарии: 1


Всего комментариев: 1
1 Creator  
0
Спасибо! smile
Сам занимаюсь этим и вот просматривал на досуге.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ассоциация боевых роботов
Рекомендуем...
Новости

Разделы

Опросы

Какой язык программирования вы считаете наиболее актуальным сегодня?
Всего ответов: 329

Друзья

3D-кино






Найти на сайте:








Об авторе       Контакты      Вопрос-ответ        Хостинг от uCoz