Кто самый важный человек в коллективе разработчиков? Вопрос провокационный. Как завещал некто умный, "все профессии важны — выбирай на вкус". Однако без специалиста только одной профессии не состоится ни одна игра. Это — программист. Теоретически, программист может сам, без чьей-либо помощи, сделать игру. Скромно умолчим о ее потенциальном качестве, но это будет именно игра, а не кипа не связанных воедино скетчей, текстов и музыкальных треков. Однако в одиночку программист мало что сможет. Поэтому художники, писатели и композиторы всегда к его услугам. Но и с ними одними каши не сваришь. Программисту нужно множество инструментов, таких как компиляторы, отладчики и вспомогательные библиотеки. Но даже с ними программист еще не всесилен. Если вы не хотите потратить на разработку своей игры долгие годы, то надо позволить программисту сделать в работе кое-какие упрощения. И первое из них — игровой движок. Игровой движок —это совокупность программных модулей для более удобных манипуляций с графикой, игровыми объектами, скриптами, звуками, музыкой и устройствами управления (клавиатура, мышь и джойстик). Это комплект абсолютно необходимых в работе утилит, таких как редакторы карт, моделей и анимации, менеджеры трехмерных ландшафтов и паковщики ресурсов. Без них любой, даже самый хороший движок — мертвый груз. Для некоторых проектов программисты создают собственные движки, но на это уходит очень много времени. Если ваш коллектив разработчиков только начинает свой путь по бурным морям игростроя, гораздо проще использовать один из уже готовых движков. В этом нет ничего зазорного, так как 70% разработчиков не пишут собственные движки, а лицензируют их у профессионалов. Наибольшим спросом сейчас пользуются движки Unreal (новых версий), Quake III и LithTech (хотя последний изрядно потерял и в авторитете, и в привлекательности). Однако начинающему разработчику, а тем более русскому, эти движки не по карману. Кроме этих столпов игростроения, в Сети вы без труда найдете несколько десятков игровых движков разной степени сложности и с разной ценой. Но цена подобных движков редко опускается ниже 500 вечнозеленых, а возможностей откровенно мало для полноценной работы. Что делать? Очертя голову бросаться писать собственный движок? Постойте, писать движок вы еще успеете. Тем более что этот весьма трудоемкий процесс наверняка потребует несколько лет вашей драгоценной игроделательской карьеры. Есть еще один вариант. Многие забывают о еще одной категории трехмерных движков. Основное их отличие в том, что они абсолютно бесплатны, причем многие с весьма удобным типом лицензии. Почему-то многие думают, что бесплатное — значит плохое, недоделанное. Оказывается, не всегда. Иногда нам делают прямо-таки королевские подарки — великолепные игровые движки, полнофункциональные, удобные и шустрые. И... бесплатные. Один из таких движков — GLScene. Это универсальный многофункциональный трехмерный игровой движок под Delphi/Kylix. Это значит, что он может работать не только в среде
Достоинство GLScene в том, что он одинаково хорошо обрабатывает и закрытые, и максимально открытые пространства. Windows, но и, например, в Linux. Не совсем корректно называть этот движок игровым. Его создатели никогда и нигде не подчеркивали, что он может употребляться только для создания игр. С его помощью можно сделать как великолепную трехмерную игру, так и пакет для создания трехмерной графики или красочную презентацию. Однако мы будем употреблять его именно для создания игр. Для этой роли он подходит идеально. Его возможности превышают возможности уже известного многим из вас Genesis 3D, который морально устарел. Но GLScene такая участь не грозит. Не успела nVidia анонсировать свои программируемые шейдеры, как создатели GLScene заявили, что их поддержка уже включена в новую версию GLScene. Так что движок идет в ногу со временем. Как создателям удается так оперативно изменять GLScene, оставляя движок бесплатным? Оказывается, в авторах продукта числится около сотни или даже тысячи человек — сообщество Open Source. Отсюда и бесплатность, и полная открытость всех исходных кодов. GLScene лицензирован общественной лицензией MPL. Это значит, что вы можете использовать движок в любых целях, не нарушая его авторскую подпись. Если вы внесете какие-то изменения в структуру движка, вы должны сделать эти изменения общедоступными. Вот и все. Вы вполне можете сделать хоть трижды коммерческий проект на основе GLScene с полной уверенностью, что с вас за него никто не потребует ни цента. Разве что, порядочности ради, не забудьте указать происхождение движка где-нибудь в титрах. Отец-основатель GLScene — немец Майк Лишке. Он развивал проект вплоть до версии 0.5. В те времена GLScene вряд ли еще можно было назвать движком. Это была просто графическая надстройка над OpenGL, ничем особо не выделяющаяся среди многих других. К сожалению, а может, и к счастью, где-то на рубеже 0.5 версии Майк бросил этот проект, и так бы мы и остались без хорошего движка, если бы не Эрик Гранж — человек, который руководит разработкой современного GLScene. Именно он довел рядовую надстройку до статуса полноценного игрового движка. Ему помогали сотни добровольцев. GLScene и по сей день ежемесячно обрастает новыми плагинами и интересными возможностями. Что в имени тебе моем? Ты оцени... объем Рассуждая о месте GLScene в современной геополитической системе, мы еще не коснулись его возможностей. Здесь GLScene нечего стыдиться — по количеству и весомости фич он превосходит даже известные бренды. Feature — в переводе с английского "особенность", "возможность", мы стараемся не использовать это слово на страницах "Мании", так как есть хорошие русские замены, но применительно к игровым движкам этот термин давно вошел в постоянный обиход программистов, и начав делать свою игру, вы не раз столкнетесь с ним, так что приучайтесь уже сейчас. GLScene для вывода на экран использует библиотеку OpenGL,
Пародия на Counter-Strike made in Russia. в отличие от многих других движков, ориентированных в первую очередь на Direct 3D. Хорошо это или плохо, вопрос cложный. С одной стороны, OpenGL более шустрый, чем Direct 3D, недаром Джон Кармак признает только OpenGL. С другой — на некоторых старых акселераторах была сырая поддержка OpenGL, и игры на его основе нередко сбоили. Но теперь эти проблемы в прошлом. Нормальная поддержка OpenGL встроена во все современные акселераторы. Делайте выводы. Как и любой порядочный движок, GLScene поддерживает целый ряд предустановленных примитивов. Это значит, что, набрав простую команду, вы можете мгновенно создать куб, сферу, линию, тетраэдр и... чайник. Это такая добрая традиция во всех современных графических библиотеках — для создания чайника выделяется специальная команда или объект. Откуда такое уважение к носиконосным мира сего, непонятно. Отдадим дань уважения традиции и перейдем к не менее значимым возможностям создания объектов. Из одних кубиков и чайников мир не создашь. Поэтому любые объекты можно комбинировать — например, сделать в одном объекте дырку по форме другого объекта. Эта функция незаменима при создании дверных и оконных проемов в играх, подобных Half-Life. Интересен подход у создателей GLScene к объектам вращения. Возьмем гребенку и раскрутим ее вокруг своей оси. Что получится? Объемная катушка с пазами. А если раскрутить форму-шаблон сложной загогулины, то в результате может получиться какой-нибудь неопознанный объект почище Enterprise. С помощью нехитрой технологии можно насоздавать много интересных объектов. Эту технологию в GLScene представляет специальный объект. Если речь идет о разработке сложной игры, одними стандартными примитивами не обойтись. Хорошо бы иметь возможность загружать в движок объекты, сделанные в популярных трехмерных редакторах. GLScene умеет загружать файлы форматов 3DS (экспортируемый хорошо известным 3D Studio MAX), OBJ/OBJF, SMD, MD2, STL, TIN и PLY. Скелетирование моделей Современные игры требуют современных технологий. К сожалению, еще в очень многих играх используется метод анимации персонажей по старинке — по трехмерным кадрам. Процесс этот медленный и неэффективный. Другое дело — скелетная анимация. Трехмерная модель насаживается на виртуальные кости, и аниматор оперирует не всей моделью, а только этими костями. Что это дает? Прежде всего, размер файлов-анимаций существенно уменьшается, так как в них хранятся изменения координат не всех вершин модели (а их, как правило, очень и очень много), а только ключевых точек, на которые как бы опираются кости. Скелетная анимация более реалистична, чем кадровая, и избавляет аниматора от головной боли, связанной с переходом между действиями. В старых играх вы наверняка наблюдали такую картину: персонаж бежит, вы давите на "прыжок", и персонаж прыгает не из своего положения, а как бы мгновенно возвратившись в состояние по стойке смирно. Из-за этого создается впечатление прерывистости анимации. При использовании скелетной анимации положение между разными кадрами интерполируется, то есть просчитываются пропущенные кадры. Результат — персонажи двигаются плавно, а переходы между движениями выглядят более естественно. GLScene поддерживает скелетную анимацию и интерполяцию кадров. Модели, которые в исходном варианте были кривыми или угловатыми, уже в процессе вывода на экран сглаживаются, становятся ровными и красивыми. Пехотинец, в котором всего 1000 полигонов, выглядит так, как будто в нем несколько десятков тысяч треугольников. И это не шутка! В последнее время в рамках GLScene активно создается физический движок. Уже работают эффекты инерции, ускорения, расчета столкновений, применения нескольких сил. Скоро будет доступна система Verlet, рассчитывающая сложные физические взаимодействия объектов, не нагружая процессор и акселератор. Простота спасет игру Даже маститые разработчики порой забывают
Неплохо для бесплатного движка, не правда ли? одну простую истину: правильно расположив текстуры и задав свойства материалов объектов, можно скрыть многие недостатки каркаса модели. Даже низкополигональный объект может привести в восторг игроков, если текстуру рисовал хороший художник, а материал задавал мастер своего дела. В этом отношении GLScene предоставляет возможность изменения любых свойств материалов и наложения текстур. Начиная с основы основ "окружение, размытие, эмиссия, отражение и блеск" и заканчивая несколькими видами поддержки прозрачности и обработки альфа-канала. Модуль работы с материалами включает в себя удобный визуальный редактор, в котором вместо того, чтобы вводить непонятные цифры, можно интуитивными движениями мышки подогнать свойства материалов под ваши модели. Модуль текстур поддерживает все известные науке графические форматы, даже тридцатидвухбитные bitmap’ы, которые пока вообще мало где поддерживаются. По себе знаю, одно из самых неприятных занятий при работе с трехмерной графикой — подбор цветов для объектов. В Windows приходится довольствоваться либо пачкой стандартных цветов радуги, либо шестнадцатиричными идентификаторами. Кто поймет, что загадочный $0001E41E — это светло-зеленый? Эту проблему в GLScene позволила избежать элегантная находка. Большая часть нужных в работе цветов представлена в виде понятных сравнительных надписей, например "мокрая пшеница", "спокойное море", "персик", "темный лимон". Так индексировано свыше 150 оттенков. По простым и понятным надписям легко сориентироваться в выборе нужного цвета. Не забыты и спецэффекты. Нужен дождь, туман, снег? Пожалуйста. А может, хотите яркие солнечные блики? И это есть. Не угодно ли извержение вулкана? Нет? Жаль, у нас имеется прекрасный выбор всевозможных огненных столбов, лавовых потоков и эксклюзивная коллекция дымовых завес от горящего леса... Не желаете ли чего-нибудь остренького? Например, первосортной молнии? Я рад, что вы сделали этот выбор. Завернуть две штучки? Как чего? Молнии, конечно. Они у нас портативные, с дистанционным управлением, выдержкой и электронным регулятором напряжения. Подлог объема К сожалению, современные акселераторы еще далеки от совершенства, равно как и процессоры, поэтому в угоду скорости приходится жертвовать качеством картинки. Одним из методов "пожертвования" является замена объектов, наблюдаемых с далекого расстояния или же не требующих к себе особого внимания геймера, на аналогичные спрайты. На простые двумерные картинки, поворачивающиеся вместе с камерой. С далекого расстояния они выглядят как настоящие объекты, а вот с близкого, увы, только удручают. Очень часто после окончания работ оказывается, что игра получилась очень требовательной к ресурсам. Программисты начинают оптимизировать код, но в конце концов приходят к суровой необходимости отказаться от некоторых красот в пользу более высоких FPS. На спрайты заменяются трава, деревья и другие малозначительные объекты. В GLScene работа с такими объектами осуществляется через спрайт-ориентированную систему. Экранные интерфейсы и меню тоже реализуются с помощью специальных HUD-спрайтов. GLScene имеет
Пример фигуры, которая создается методом вращения заготовки. поддержку трехмерного звука через A3D, EAX, FMOD и BASS. Недавно появилась поддержка расширенных устройств ввода, в том числе джойстиков с обратной связью и геймпадов. В будущем можно будет запрограммировать даже такие новые для нас устройства, как мыши с обратной связью. Что нам стоит мир построить? А теперь давайте отвлечемся от теории и поговорим о практике. Вначале не было ничего. Но великий Создатель поместил на форму GLScene и GLSceneViewer, создал камеру, и появился мир. Но вокруг была тьма. И тогда Создатель сотворил TGLLight и GLDisc (Землю). Но все было серым и блеклым, как на Луне. И натянул Создатель на диск текстуру с цветочками (GLDisc1.Material.texture.disabled:=false;GLDisc1.Material.texture.image.loadfromfile('zemlia.jpg').), и Земля расцвела. Но темно было над головой. И тогда Создатель сотворил TGLSkyDome, и поплыли облачка на голубом небе. Но не было на земле ни души. И сотворил Создатель TActor, и загрузил туда MD2-файл персонажа из Quake, и задал анимацию Run, и побежал квакер по матушке-земле. Вдруг на пути квакера возникла китайская ваза. TFreeForm позволяет загрузить файл 3D Studio MAX. Если для текстуры вы установите режим tmmodulate, то она обернет вазу и, если tmdecal, — наложится в соответствии с координатами, заданными в файле 3ds. И выстрелил квакер в вазу (огонь можно создать, добавив объекту TGLFireBehavior и ассоциировав с ним FireFXManager), и разбилась она вдребезги (столкновение определяется событием OnCollision у TCollisionManager, возвращаются указатели на столкнувшиеся объекты. У каждого объекта, участвующего в проверке столкновения, должен быть установлен TCollisionBehavior). Но не успокоился квакер. Увидел он пальму (простые объекты можно задавать спрайтами — объект TSprite). И нацелился он на пальму. Но тут Создатель разозлился на неуемного квакера, и опустился туман на землю (свойство Fog у TGLSceneViewer), и шибанул Создатель квакера молнией по темечку (TThorFX, аналогично TFireFX). Загремел реквием (TWaveOut), и запылала на мониторе надпись "Game Over" (THUDText вкупе с TBitmapFont). За линией горизонта Движок без будущего — это мертвый движок. Genesis 3D, скорее всего, уже мертв. А вот GLScene живее всех живых. Какое бы новшество ни внедрили игроразработчики в новейшие хиты, какие бы возможности ни добавили производители к своим видеокартам, команда создателей GLScene всегда готова реализовать их в программном коде и сделать общедоступными. Так случилось, например, когда IO Interactive выпустила своего знаменитого Hitman:
Пример экшена, сделанного на основе GLScene. Codename 47. Помнится, коллега из соседнего раздела восхищался тем, что трупы убитых не проваливаются сквозь столы и стены, а падают строго по законам физики. Убит негодяй около стола — значит, и рухнуть должен на стол. Убит около стены — должен не тупо провалиться в нее, а медленно сползти, оставшись в полусидячем положении с дыркой в виске и кровью, размазанной по стенке. Чудеса на этом не заканчивались. Вся физика в игре была выполнена на высочайшем уровне, поражая своей реалистичностью. В чем секрет? В уникальной технологии Verlet, которая позволяет рассчитать физические сцены, не загружая сверх меры центральный процессор. Ошибкой тех, кто пытались внедрить реалистичную физику в играх до IO Interactive, было то, что они не понимали разницу между игрой и реальностью. Они применяли к игровым сценам совершенные ньютоновские законы и получали перегрузку процессора. Слишком тяжелыми и громоздкими были вычисления. IO Interactive использовала несколько другую систему, которая применяется для симуляций в молекулярной физике. Всего несколько упрощений снизили нагрузку на центральный процессор в несколько сотен раз (!). Результат оценили геймеры всего мира, и результат их поразил. После этого команда GLScene решила использовать эту технологию для физических симуляций. Система еще не внедрена в ядро GLScene, но уже прекрасно функционирует. На диске "Игромании" вы найдете технологическую демо-версию, которая проиллюстрирует работу системы Verlet. Очень скоро в GLScene появятся полноценная система расчета теней по технологиям lightmaps и shadow maps, более удобный визуальный редактор карт, поддержка кривых Безье и NURBS, выборочных систем частиц и поверхностей земли. Когда закончатся все работы над текущей версией, создатели возьмутся за сетевой код — появятся компоненты, с помощью которых можно будет за считанные минуты организовать в своей игре мультиплеер как по локальной сети, так и через Интернет. В лице GLScene мы имеем надежный и удобный игровой движок, свободный от предрассудков, свободный в самом широком смысле этого слова. Пользуйтесь. * * * Когда кончается серия статей, посвященных какой-нибудь интересной теме, я неизменно объявляю, что в следующем номере вас ждет статья-сюрприз. Не буду отступать от доброй традиции — и вновь объявлю, что в честь окончания курса начинающего программиста-игродела я устрою вам сюрприз. Какой — не скажу. Скажу только, что он будет относиться к разработке игр и к программированию, но не будет иметь ничего общего с компьютером. Что я имею в виду, вы увидите, купив один из ближайших номеров "Мании". А пока — до встречи. Удачных вам игр! На нашем компакте На диске "Игромании" вас ждет самая последняя на момент написания статьи версия GLScene, а также технологическая демо-версия, иллюстрирующая возможности системы Verlet. Ссылки по теме GLScene.org — официальная страница GLScene. www.delphigamer.com —полезный сайт, посвященный игростроению на Delphi. www.dwscript.com — мощная скриптовая система, удачно сочетающаяся с GLScene. www.inner-smile.com — новости, статьи и ссылки по разработке игр и не только. www.lischke-online.de — домашняя страница разработчика оригинальной версии GLScene. http://turbo.gamedev.net — интересный ресурс, посвященный всем аспектам создания компьютерных игр с помощью Delphi.