Создание игр c использованием 3D’sMAX и Delphi

Автор о себе:

Я живу в далеком сибирском городке под названием Ангарск. Сейчас учусь в 11 классе (а если точнее на 3 курсе лицея). Нигде пока не работаю, только иногда выполняю с мамой заказы на дизайн интерьера (мама у меня дизайнер\архитектор, у нее прекрасные идеи, но на компьютере работать совсем не умеет).

Хотя я и отлично окончил художественную школу на отделении архитектуры (ну как не похвастаться :))), но все же поступлю и выучусь на программиста.

Искусство же для меня скорее хобби. Макс начал изучать год назад, абсолютно случайно увидел диск и заинтересовался. Со временем затянуло :) (думаю, многие поймут). Очень люблю рисовать, играть в компьютерные игры, программировать, а также играть на гитаре.


Данный урок, конечно, не научит вас делать игры вроде халфы, но, я думаю, из него можно узнать много интересных моментов, связанных с играми, а главное - о создании моделей для них.

Сделав недавно 3d-игру (это был мой курсовик в лицее) я решил-таки поделиться с народом опытом в создании игр. Вся статья основывается на моей программе (скрины из нее выставлены как одна из моих работ).

Для начала поговорим о создании моделей и текстур.

Моделирование сцены для игры описано в tutorials - Modeling Level Design, но там не написано про последующее экспортирование, а это оказалось не так-то просто!

Все моделирование происходило в 7 максе. Методом множества проб и ошибок был придуман следующий алгоритм подготовки модели, текстуры и их экспортирования:

1. Делаем low poly модель (модели, если это уровень).

2. Текстурируем ее, применяя модификатор Unwrap UVW (обязательно!)

3. Unwrap UVW -> edit ставим mapping = flattern, теперь Unwrap UVW сохраняем в файл. (file->save)

4. Выделив объект, rendering -> render to texture, там настройки:
output, path – папка, куда будет сохранена текстура.

Далее, там, где output, нужно нажать add… выбираем complete map, в file name and type выбираем имя и тип файла, size- размер текстуры (ниже 256 лучше не ставить – будет не красиво, если, конечно, объект не мизерный :-))

5. Теперь внимание! Hажимаем unwrap only, к нашему объекту добавится модификатор, выбираем его и нажимаем EDIT file->load – загружаем ранее сохраненный unwrap.

6. Теперь в render to texture жмем render. Он отрендерит текстуру в указанную ранее папку.

7. Теперь в главном окне file->export selected ставим галочку в диалоге и ОК.

Если это уровень, то, по сути, получается, что собрав уровень в максе, мы разделяем его на составные объекты, а в игре вновь составляем. Естественно, в 3ds будет записано расположение объекта относительно центра сцены, так что это надо учесть, ведь в программе в указанное место будет поставлена эта точка.

Все! Теперь у нас есть объект и текстура к нему (кстати такие текстуры удобно обрабатывать в фотошопе, например, добавлять надписи на стены). Данная последовательность, конечно не единственно верная, но она верная!

вид в максе вид в игре

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

Если весь уровень создается в одном максовом файле, то удобно поменять настройки в customize -> grid and snap settings -> home grid – grid spacing = 5.0, perspective view grid extend = xx (поставьте побольше) . А после этого можно использовать snaps toggle для точного перемещения объектов по сцене.


Теперь о программной части работы.

Программирование я решил вести в делфи потому, что я ее хорошо знаю (хотя, конечно, для реально мощных игр предпочтительнее что-то вроде С++, но это реально сложно :-)))

Первым делом, я начал поиск компонентов, упрощающих работу с 3d графикой, т.к. работа со встроенными возможностями Delphi была бы тяжело выполнима ввиду сложного доступа к этим возможностям (по крайней мере, на мой взгляд :)). И был найден ряд таких компонентов, но большинство из них было ограничено в возможностях и потому не давало нужного простора для размышлений. Поэтому была выбрана библиотека под названием GLScene, которая давала возможность доступа ко многим возможностям OpenGl. Взять эту библиотеку можно на сайте www.glscene.org (она является обсолютно бесплатной). Была придумана такая схема проекта (привожу ее просто как пример).

схема моего проекта

По этой схеме и были созданы основные формы и модули в проекте.

Важным периодом создания был период оптимизации (текстур, моделей и программы) для ускорения работы программы, но на данном этапе проявился недостаток создания приложения, которое создает объекты из файла. Все дело в том, что при создании каждого объекта программа ищет в массиве объектов пути к модели или текстуре, и на это уходит большой объем времени. Как вариант решения было бы создание всех статичных объектов как единого объекта. Но здесь возникает другая проблема – на видеокартах с памятью в 64 Мб максимальное разрешение текстуры – 2024*2024, а если создавать гигантский объект, текстуры нужны, как минимум, в 2 раза большие! Что было неприемлемо, т.к. сейчас много компьютеров, оснащенных, слабыми видеокартами (например, у меня GeForce4MX 440, на новую нет денег :-( ). Из-за этого приходится мириться с невысокой скоростью загрузки.

После создании уровня нужно было создать объекты, с которыми можно было бы взаимодействовать, а значит, создать модуль для обработки скриптов, который учитывался еще на раннем этапе. Ничего необычного здесь не применялось – просто построчное чтение переданного из параметров скрипта (*.txt) и его обработка. Так же было решено для некоторых объектов передавать некоторые параметры вместо скрипта (растения, анимированные объекты и стенки).

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

стенки

После создания программы я создал на ее основе редактор карт, редактор параметров моделей и редактор скриптов. Они были созданы для того, чтобы ускорить и упростить редактирование карт, моделей и скриптов пользователем (советую делать их всем игроделам).

редактор

Подробнее о выбранных форматах файлов.

Для простых объектов взяты модели 3DS потому, что они занимают мало места и редактируются большинством 3D редакторов. Также причиной для выбора 3DS послужило то, что в этом формате все объекты сохраняют свое положение относительно глобального центра координат, поэтому я могу создать уровень в 3D Max, и при экспортировании моделей они будут сохранять свое положение относительно друг друга, и не будет необходимости перемещать их в редакторе уровней). Данный способ неприменим к объектам со скриптом pick (скрипт, при помощи которого персонаж поднимает или использует объекты), потому что при обработке данного скрипта должно учитываться расстояние до объекта). Формат моделей MD2 был взят как единственный формат, нормально поддерживаемый в GLScene для анимированных объектов (анимацию из 3DS загрузить мне так и не удалось, хотя, насколько я знаю, это возможно, и если у кого нибудь получится – напишите:) ). Текстуры могут быть как JPG, так и TGA, они были выбраны как наиболее сжатые.

Ну, в принципе, урок я закончил. Надеюсь он вам понравился.

Я решил не напрягать урок скринами из моей игры, их можно посмотреть как мою работу the game.

Вопросы и пожелания по мылу tony89@yandex.ru или по ICQ 297-984-288, но лучше по мылу (в инет я выхожу нечасто).

Более подробно о программировании или моделировании для игр, возможно, будет рассказано в следующем уроке, если, конечно, к уроку будет проявлен интерес :-) , а пока это все.


Пашинин Антон, он же crol
2005 год
504 0 850 38
43
2006-02-09
Вау чувак, шпасибоньки! Когда выучу макс на 100% перейду на программирование. И буду делать игры. Ты меня толкнул на идею.Мне очень нравиться этот урок. А у Вас очень холодно? Почему спрашиваю, потомучто сежу в Испании и мерзну(я привык к этому климату :) +10% тепла).А в России точно холоднее чем здесь. мне бы на родину снеговика полепить :) :(
2006-02-10
Спасибо за теплый отзыв! А у нас сей час реально холодно пару дней назад -30 стабильно держалось!
2006-02-10
Хай. Хороший урок, тока для тех кто программирование знает хоть чуть...... Ну я не поэтому:-) Мы бы могли с тобой неплохо посотруюничать... Пиши...
2006-02-10
Весьма интересно!! Но я больше люблю С++ (Delphi с егоObjectPaskal плохо воспринемаю)
2006-02-11
Ну вообще в планах GLScene.org и на C++ делать плагин. Так что думаю всем может пригодится статья.
2006-02-11
Интересно было бы посмотреть твой уровень непосредственно из движка
2006-02-12
Я хотел сделать сайт и выложить там exe , но качать 80мб (как минимум) - неохота :) Но я точно знаю что не супер... просто делал не супер игруху а знакомился с тем как готовить модели и текстуры и потом загонять их под свой движок. Вообще на конкурсе в Ангарске отзывались хорошо, поиграли там неплохо :) (однако есть довольно слабое место - скрипты, замучился их делать)
2006-02-13
Супер, а я так не умею :-((((((
2006-02-14
Маленькое замечание - 5-й пункт - это делать совсем не обязательно, проще сказать - юзать существующие текстуры.
2006-02-14
... текст. координаты, я имел ввиду :)
2006-02-15
Привет я тоже из Ангарска ... хотелось бы пообщаться вот ICQ 171211020
2006-02-15
to BorisK: дело в том что на разных этапах макс по разному делает unwrap! Поэтому приходилось сохранять в файл. to Xaoc: лучше по МРА(crol@inbox.ru) или почте(tony89@yandex.ru), редко icq пользуюсь.
2006-02-16
Я занимаюсь как рас програмированием на Delphi. Мне это очень пригодится. Спасибо за материал.
2006-02-16
Анврап делается, как правило, до экспорта, а не во время :) просто в ртт нужно сказать, чтобы использовать уже существующие координаты. имеется ввиду макс 6+
2006-02-19
Точно, просто я в настройках не разобрался. спасибо.
2006-02-21
А ведь грили мне в институте - учи дельфу......
2006-02-22
Crol скачал я этот delphi не раскажеш как его запустить, я в програмирование полный чайник, а игру замутить оч оч оч ХОЧУ!!!!
2006-02-22
По всем вопросам прошу на ICQ 297-984-288.
2006-02-23
Голосование проходит горячий момент! Просьба всем кому урок понравился оказать поддержку голосами :)
2006-02-26
------ Вот так всегда(( 24 дня ты лидер, а еще три последних дня и ты уже за бортом....(закон жизни)) ------ Еще раз убедительно прошу оказать мне помощь голосами(пока еще не поздно)! Нехорошая ситуация однако сложилась((.... ------
2006-02-27
Собсно. Ничего ценного в данном уроке не вижу. Не для моделлеров, не для программистов. Все очень поверхностно.
2006-02-27
инетерестно отзыв ниже, отзыв моделлера или программиста? более глубокие изыскания имели бы другую цену и издавались бы в печатном виде)) -- Если всеже урок вам нравится прошу за него проголосовать, тем более что на это осталось 2 дня!
2006-02-27
kak tyt golosovat? ili ja ywe proletel?
2006-02-28
to infeenit голосовть тут можно только на следующий месяц после регистрации. - Уважемые пользователи рендера, остался последний день голосования, просьба не оставться равнодушными, поддержите пожалуйста голосами!!!
2006-02-28
тебе деньги больше нужней!
2006-03-01
ОГРОМНОЕ СПАСИБО ВСЕМ ТЕМ КТО ГОЛОСОВАЛ ЗА МОЙ УРОК !!!!!
2006-03-01
2 NEXON: Ты никак не можеш судить о моём финансовом положении.
2006-03-03
мнда..... это типа лучший урок? сочувствую
2006-03-03
to 111: может напишешь лучше ;) я посмотрю...
2006-03-03
Видимо, большой интерес к данному уроку объясняется тем, что есть очень много информации по различным программам трехмерного моделирования. Много и по движкам. Но, как только пытаешься соединить модели и движок, начинаются проблемы совместимости. Либо после загрузки в движок модель вообще нигде не видна, либо у нее странные дефекты. То же самое происходит с анимацией. Так что данную тему неплохо бы продолжить. Но с учетом более современных технологий. Формат .md2 неплох, но это уже далекое прошлое. Впрочем, как и создание полноценного уровня непосредственно в редакторе типа 3D Max. Если предполагать создание коммерческой игры с минимальными финансовыми затратами, я думаю был бы интересен опыт совместного использования следующих программ (не как создать что-то в данной программе, а как обеспечить совместимость и перенос созданного для получения конечного продукта): Создание моделей и анимации: Milkshape3D ($25) / Blender (freeware) / 3D Canvas Pro ($70) / Lightwave ($800) /3D Max ($3500) / Maya ($5000) - цены примерные, каждый может выбрать что-то по карману. Только большинство shareware авторов почему-то выбирают программу моделирования из первой тройки. Формат модели - directX (можно свободно использовать для коммерческих проектов, включает анимацию, поддерживает неограниченное число дорожек анимации без ограничения числа кадров, нет ограничений по числу полигонов). Создание уровней: DeleD (закрытые пространства) / FreeWorld3D (открытые пространства). Цены достаточно разумные. Все редакторы, использующие формат уровня от Quake3 не допускают коммерческого использования, поэтому и не вошли в список . Экспорт моделей, анимации и уровней в графический движок - Ogre, Irrlicht, Nebula - все freeware. Подключение к движку звуковой библиотеки - например, Bass ($100). Bass поддерживает формат .ogg - в отличии от mp3 он бесплатен для коммерческого использования. Размер файла и качество звука практически не отличаются. Подключение к движку физики - Newton (freeware). Цены я привел потому, что, как только возникает вопрос о создании коммерческого продукта, так возникает и вопрос лицензионной чистоты. Список программ тоже примерный, но не исчерпывающий. Можно сказать, что вышеназванные темы не относятся к сфере render.ru. Как и проблемы с моделями и анимацией к движкам. Возможно, поэтому и нет полного освещения данного вопроса в комплексе, а не по отдельным частям.
2006-03-09
с комментом согласен, особенно с последней его частью))
2006-05-09
crol мне нравится, если бы ты написалбы ещё как в Делфи делать тебе тогда поставилибы 1-е место 100%! Слух, а ты в Skype не сидишь?
2006-05-25
... Ни черта не понял .... Ситуация напоминает сказку про голого короля. Люди видят в этом уроке что то! Но в нем ничего ценного нет! Идея какая то есть, но абсолютно все (как уже кто то написал) поверхностно до невозможного!!! Это конечно поздний отзыв - но практических советов = 0.0
2006-06-06
to:Ventura нет не последний отзыв) твои слова лишь пустой звон, нулевый рейтинг говорит за это... если ты не вынес ничего для себя полезного - это твои проблемы. KEKC спасибо, но я же говорил: сайт посвящен 3d а не программингу... нет, в Skype не сижу.
2006-06-28
blin mne len' stoko 4itat' a kartinki klasnije ;)
2006-09-11
Очень интересно. Спасибо автору.
2006-09-12
Люблю я объединение разных программ.
2006-09-12
Когда-то пробовал программировать. Может теперь пригодиться.
2006-10-26
Ничего личного,но ничего особенного в этом уроке нет (если конечно можно назвать его уроком)
2006-10-26
Коне чно нет) он не большой и не содержательный... Обещаю, скоро появится новый, вот там я развернулся по полной! Никакой поверхностности, все будет глубоко... направление то же, тема секрет.
2007-02-11
Что ещё можно сказать, МОЛОДЕЦ! Делай ещё и побольше и повеселей.
2007-09-13
[b]Внимание![/b] для тех [b]"кто в танке"[/b] или забрел на эту страницу впервые. не пишите мне вопросов типа - напиши мне как сделать игру! не пишите - скинь свою игру(100 метров). и вообще я в создании игр [b]ушел в directX и VC++[/b], если есть по ним вопросы задавайте, лучше через аську, [b]на вопросы по glscene я не могу отвечать[/b] так как не работаю с ним уже года 2.
2013-03-13
тоже мне "урок" ... Этот псевдоурок ничему и никого не научит.
RENDER.RU