Render.ru
Поддержать
Сохранить
crol
ПОДПИСАТЬСЯ
  • ПРЕДЛОЖИТЬ ПРОЕКТ
  • ДОБАВИТЬ В КОНТАКТЫ
3Записей
0Следят
0Читает
87.3 KЗаходов

Создание игр 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
Комментарии:43
по поступлениюВсе языкиТолько русский
5
0
Jack3DM
09.02.2006 19:49
Вау чувак, шпасибоньки! Когда выучу макс на 100% перейду на программирование. И буду делать игры. Ты меня толкнул на идею.Мне очень нравиться этот урок. А у Вас очень холодно? Почему спрашиваю, потомучто сежу в Испании и мерзну(я привык к этому климату :) +10% тепла).А в России точно холоднее чем здесь. мне бы на родину снеговика полепить :) :(
66
0
crol
10.02.2006 6:09
Спасибо за теплый отзыв! А у нас сей час реально холодно пару дней назад -30 стабильно держалось!
52
0
Dmitriy3D
10.02.2006 10:10
Хай. Хороший урок, тока для тех кто программирование знает хоть чуть...... Ну я не поэтому:-) Мы бы могли с тобой неплохо посотруюничать... Пиши...
7
0
Veldrin
10.02.2006 20:22
Весьма интересно!! Но я больше люблю С++ (Delphi с егоObjectPaskal плохо воспринемаю)
66
0
crol
11.02.2006 1:05
Ну вообще в планах GLScene.org и на C++ делать плагин. Так что думаю всем может пригодится статья.
10
0
Tazar
11.02.2006 18:36
Интересно было бы посмотреть твой уровень непосредственно из движка
66
0
crol
12.02.2006 1:59
Я хотел сделать сайт и выложить там exe , но качать 80мб (как минимум) - неохота :) Но я точно знаю что не супер... просто делал не супер игруху а знакомился с тем как готовить модели и текстуры и потом загонять их под свой движок. Вообще на конкурсе в Ангарске отзывались хорошо, поиграли там неплохо :) (однако есть довольно слабое место - скрипты, замучился их делать)
5
0
Bruce333
13.02.2006 9:13
Супер, а я так не умею :-((((((
37
0
BorisK
14.02.2006 16:33
Маленькое замечание - 5-й пункт - это делать совсем не обязательно, проще сказать - юзать существующие текстуры.
37
0
BorisK
14.02.2006 16:34
... текст. координаты, я имел ввиду :)
2
0
Xaoc
15.02.2006 5:03
Привет я тоже из Ангарска ... хотелось бы пообщаться вот ICQ 171211020
66
0
crol
15.02.2006 8:05
to BorisK: дело в том что на разных этапах макс по разному делает unwrap! Поэтому приходилось сохранять в файл. to Xaoc: лучше по МРА(crol@inbox.ru) или почте(tony89@yandex.ru), редко icq пользуюсь.
2
0
Rom-em
15.02.2006 21:05
Я занимаюсь как рас програмированием на Delphi. Мне это очень пригодится. Спасибо за материал.
37
0
BorisK
16.02.2006 11:32
Анврап делается, как правило, до экспорта, а не во время :) просто в ртт нужно сказать, чтобы использовать уже существующие координаты. имеется ввиду макс 6+
66
0
crol
19.02.2006 3:01
Точно, просто я в настройках не разобрался. спасибо.
22
0
CrazyDigger
21.02.2006 9:01
А ведь грили мне в институте - учи дельфу......
94
0
ChamFEARewq
22.02.2006 2:24
Crol скачал я этот delphi не раскажеш как его запустить, я в програмирование полный чайник, а игру замутить оч оч оч ХОЧУ!!!!
66
0
crol
22.02.2006 6:34
По всем вопросам прошу на ICQ 297-984-288.
66
0
crol
23.02.2006 2:51
Голосование проходит горячий момент! Просьба всем кому урок понравился оказать поддержку голосами :)
66
0
crol
26.02.2006 1:37
------ Вот так всегда(( 24 дня ты лидер, а еще три последних дня и ты уже за бортом....(закон жизни)) ------ Еще раз убедительно прошу оказать мне помощь голосами(пока еще не поздно)! Нехорошая ситуация однако сложилась((.... ------
26
0
Собсно. Ничего ценного в данном уроке не вижу. Не для моделлеров, не для программистов. Все очень поверхностно.
66
0
crol
27.02.2006 10:41
инетерестно отзыв ниже, отзыв моделлера или программиста? более глубокие изыскания имели бы другую цену и издавались бы в печатном виде)) -- Если всеже урок вам нравится прошу за него проголосовать, тем более что на это осталось 2 дня!
2
0
infeenit
27.02.2006 20:28
kak tyt golosovat? ili ja ywe proletel?
66
0
crol
28.02.2006 0:29
to infeenit голосовть тут можно только на следующий месяц после регистрации. - Уважемые пользователи рендера, остался последний день голосования, просьба не оставться равнодушными, поддержите пожалуйста голосами!!!
99
0
x_Personaj_x
28.02.2006 19:09
тебе деньги больше нужней!
66
0
crol
01.03.2006 9:45
ОГРОМНОЕ СПАСИБО ВСЕМ ТЕМ КТО ГОЛОСОВАЛ ЗА МОЙ УРОК !!!!!
45
0
2 NEXON: Ты никак не можеш судить о моём финансовом положении.
844
0
мнда..... это типа лучший урок? сочувствую
66
0
crol
03.03.2006 8:20
to 111: может напишешь лучше ;) я посмотрю...
2
0
Ed
03.03.2006 11:02
Видимо, большой интерес к данному уроку объясняется тем, что есть очень много информации по различным программам трехмерного моделирования. Много и по движкам. Но, как только пытаешься соединить модели и движок, начинаются проблемы совместимости. Либо после загрузки в движок модель вообще нигде не видна, либо у нее странные дефекты. То же самое происходит с анимацией. Так что данную тему неплохо бы продолжить. Но с учетом более современных технологий. Формат .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. Как и проблемы с моделями и анимацией к движкам. Возможно, поэтому и нет полного освещения данного вопроса в комплексе, а не по отдельным частям.
66
0
crol
09.03.2006 11:47
с комментом согласен, особенно с последней его частью))
2
0
KEKC
09.05.2006 13:03
crol мне нравится, если бы ты написалбы ещё как в Делфи делать тебе тогда поставилибы 1-е место 100%! Слух, а ты в Skype не сидишь?
2
0
Ventura
25.05.2006 11:41
... Ни черта не понял .... Ситуация напоминает сказку про голого короля. Люди видят в этом уроке что то! Но в нем ничего ценного нет! Идея какая то есть, но абсолютно все (как уже кто то написал) поверхностно до невозможного!!! Это конечно поздний отзыв - но практических советов = 0.0
66
0
crol
06.06.2006 9:04
to:Ventura нет не последний отзыв) твои слова лишь пустой звон, нулевый рейтинг говорит за это... если ты не вынес ничего для себя полезного - это твои проблемы. KEKC спасибо, но я же говорил: сайт посвящен 3d а не программингу... нет, в Skype не сижу.
2
0
eIGHT
28.06.2006 19:06
blin mne len' stoko 4itat' a kartinki klasnije ;)
12
0
crest
11.09.2006 10:32
Очень интересно. Спасибо автору.
16
0
scripterBB
12.09.2006 7:28
Люблю я объединение разных программ.
12
0
maxer
12.09.2006 11:51
Когда-то пробовал программировать. Может теперь пригодиться.
2
0
_FROZZY_
26.10.2006 14:15
Ничего личного,но ничего особенного в этом уроке нет (если конечно можно назвать его уроком)
66
0
crol
26.10.2006 15:34
Коне чно нет) он не большой и не содержательный... Обещаю, скоро появится новый, вот там я развернулся по полной! Никакой поверхностности, все будет глубоко... направление то же, тема секрет.
2
0
prosvon
10.02.2007 21:54
Что ещё можно сказать, МОЛОДЕЦ! Делай ещё и побольше и повеселей.
66
0
crol
13.09.2007 12:03
[b]Внимание![/b] для тех [b]"кто в танке"[/b] или забрел на эту страницу впервые. не пишите мне вопросов типа - напиши мне как сделать игру! не пишите - скинь свою игру(100 метров). и вообще я в создании игр [b]ушел в directX и VC++[/b], если есть по ним вопросы задавайте, лучше через аську, [b]на вопросы по glscene я не могу отвечать[/b] так как не работаю с ним уже года 2.
7
0
Dionys
13.03.2013 14:36
тоже мне "урок" ... Этот псевдоурок ничему и никого не научит.