Уроки: 3ds Max

Создание игр 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 год

114135 Автор:
Актуальность: 377
Качество: 419
Суммарный балл: 796
Выбор Публики
Голосов: 76 оценки

Отзывы посетителей:

2 3 | След.
аватар
 
Dionys 1 0
тоже мне "урок" ... Этот псевдоурок ничему и никого не научит.
аватар
 
crol 168 0
Внимание!
для тех "кто в танке" или забрел на эту страницу впервые.
не пишите мне вопросов типа - напиши мне как сделать игру!
не пишите - скинь свою игру(100 метров).
и вообще я в создании игр ушел в directX и VC++, если есть по
ним вопросы задавайте, лучше через аську, на вопросы по glscene
я не могу отвечать
так как не работаю с ним уже года 2.
аватар
 
prosvon 2 0
Что ещё можно сказать, МОЛОДЕЦ! Делай ещё и побольше и повеселей.
аватар
 
crol 168 0
Коне чно нет) он не большой и не содержательный...
Обещаю, скоро появится новый, вот там я развернулся по полной!
Никакой поверхностности, все будет глубоко... направление то же, тема секрет.
аватар
 
_FROZZY_ 2 0
Ничего личного,но ничего особенного в этом уроке нет (если конечно можно назвать его уроком)
аватар
 
maxer 7 0
Когда-то пробовал программировать. Может теперь пригодиться.
аватар
 
scripterBB 11 0
Люблю я объединение разных программ.
аватар
 
crest 7 0
Очень интересно. Спасибо автору.
аватар
 
eIGHT 2 0
blin mne len' stoko 4itat' a kartinki klasnije ;)
аватар
 
crol 168 0
to:Ventura
нет не последний отзыв)
твои слова лишь пустой звон, нулевый рейтинг говорит за это...
если ты не вынес ничего для себя полезного - это твои проблемы.

KEKC
спасибо, но я же говорил: сайт посвящен 3d а не программингу...
нет, в Skype не сижу.
аватар
 
Ventura 1 0
... Ни черта не понял .... Ситуация напоминает сказку про голого короля. Люди видят в этом уроке что то! Но в нем ничего ценного нет! Идея какая то есть, но абсолютно все (как уже кто то написал) поверхностно до невозможного!!! Это конечно поздний отзыв - но практических советов = 0.0
аватар
 
KEKC 1 0
crol мне нравится, если бы ты написалбы ещё как в Делфи делать тебе тогда поставилибы 1-е место 100%! Слух, а ты в Skype не сидишь?
аватар
 
crol 168 0
с комментом согласен, особенно с последней его частью))
аватар
 
Ed 2 0
Видимо, большой интерес к данному уроку объясняется тем, что есть очень много информации по различным программам трехмерного моделирования. Много и по движкам. Но, как только пытаешься соединить модели и движок, начинаются проблемы совместимости. Либо после загрузки в движок модель вообще нигде не видна, либо у нее странные дефекты. То же самое происходит с анимацией.
Так что данную тему неплохо бы продолжить. Но с учетом более современных технологий. Формат .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. Как и проблемы с моделями и анимацией к движкам. Возможно, поэтому и нет полного освещения данного вопроса в комплексе, а не по отдельным частям.
аватар
 
crol 168 0
to 111: может напишешь лучше ;) я посмотрю...
аватар
 
111 812 0
мнда..... это типа лучший урок?

сочувствую
аватар
 
Андрей Пидвирный 152 0
2 NEXON:
Ты никак не можеш судить о моём финансовом положении.
аватар
 
crol 168 0
ОГРОМНОЕ СПАСИБО ВСЕМ ТЕМ КТО ГОЛОСОВАЛ ЗА МОЙ УРОК !!!!!
аватар
 
x_Personaj_x 99 0
тебе деньги больше нужней!
аватар
 
crol 168 0
to infeenit голосовть тут можно только на следующий месяц после регистрации.
-
Уважемые пользователи рендера, остался последний день голосования, просьба не оставться равнодушными,
поддержите пожалуйста голосами!!!
2 3 | След.
Зарегистрируйтесь, чтобы добавить комментарий.
Эту страницу просмотрели: 525 уникальных посетителей