Главная | Регистрация | ВходПриветствую Вас Гость | RSS
Меню сайта

Реклама на сайте


   

Делаем модель. Часть 1 - Инструментарий.

   Многие из нас, в своё время задумывались как же всё таки сделать самому модель для игры? Именно об этом пойдёт речь в моём блоге. Вы узнаете о том, как моделировать, текстурить, скинить(привязывать кости к объекту), делать развертку под текстурированию и многое другое.

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

   Пользоваться мы с вами будем следующими "инструментами":
1. Первый и основной - Autodesk 3ds Max 2009 - скачать триал версию на 30-ть дней, абсолютно работоспособную можно на официальном сайте, но правда там уже Autodesk 3ds Max 2010 заполните форму и качайте (но всё же попробуйте найти 2009 версию, так как я к ней привык, и потом в 2010 версии макса не так уж много нововведений, и потом из-за разности версий могут, у нас возникать разногласия по некоторым моментам).
2. Плагины экспорта и импорта формата smd в 3ds Max.
3. Декомпилятор "*.mdl" файлов Kratisto's Mdl Decompiler 1.2.
4. Компилятор "*.qc" файлов GUI StudioMDL 1.0.
5. И конечно голова и руки из плеч растущие.

 О каждом инструменте в подробностях вы узнаете в следущих статьях.  

Делаем модель. Часть 2 - Интерфейс 3ds Max 2009.

   Ну что же, приветствую вас на втором уроке, а точнее продолжение первой части Делаем модель. Часть 1 - Инструментарий. В прошлом уроке, мы рассматривали софт - при помощи которого будем создавать модель оружия для cs 1.6, так сказать с нуля отмоделим и экспортируем в движок half-life и сможем побегать в cs, со своим собственно-отмоделеным оружием. И в этом нам с вами поможет Autodesk 3ds Max 2009.

Интерфейс:


Подробней про интерфейс:



Main Toolbar - главная панель инструментов, выделено синим цветом.

- функции Undo и Redo, то есть вернуть действие назад или перематать в перёд.

- Select and Link выделить и прилинковать(присоединить), Unlink Selection розлинковать выделенное, Bind to Space Warp прилинковать к динамическим утилитам (физические природные силы - гравитация, ветер и т.п.)

- селектор фильтра, в данный момент поставлен на "All" - то есть, при выделении будут выделяться абсолютно все объекты, если же мы поставим например "Lights" - соответственно выделятся лишь источники освещения(очень полезный фильтр когда с сцене много объектов), далее следует Select Object - выделить объект, Select by Name - выделить из вписка(по имени, типу объекта, цвету, количеству триугльников), Selection Region - способ выделения(прямоугольный, в виде окружности, произвольный и т.п.), для выбора способа - зажмите на соответствующую иконку левой кнопкой и в меню выбирайте, также существует "горячая" клавиша "Q" - для быстрого выбора, и последняя Window/Crossing - переключатель, также относится к способам выделения объекта, в режиме Window - чтобы выделить объект он должен полностью попасть под область выделения, Crossing - стоить обвести лишь грань объекта для полного выделения(извините за тавтологию xD).
   Примечание:
в обоих режимах можно выделить объект кликнув на его грань.

- Select and Move выделить и переместить, Select and Rotate выделить и вращать, Select and Scale выделить и масштабировать, Reference Coordinate System - система координат "pivot'a" относительно объекта, Use Pivot Point Center - положения опорной точки относительно объекта.

   О самых важных функциях главной панели инструментов - я рассказал, поехали дальше...

Command Panel - командная панель, выделено красным цветом.

- во-вкладке Create(создать) находятся практически все объекты которые можно создать в максе, мы зачастую будем пользоваться Geometry -> Standard Primitives, если прошуршать все примитивы, можно найти прямоугольник, сферу, цилиндр, конус и др., ах да, - каким боком к примитивам чайник приставили я не знаю)).

- вкладка Modify(модификаторы объекта/объектов) это именно то, за что я лично люблю макс, о списке модификаторов мы поговорим позже.

И под конец урока рассмотрим рабочее окно Viewpor, оно выделено зелёным цветом.

По-дефолту(по-умолчанию, - буду использовать в последующих уроках это название, так что не пугайтесь) макс нам предлагает 4 окна, в левом верхнем углу всех окон, можно увидить вид, проекцию(top - сверху, font - спереди, left - слева, perspective - 3d режим, также существуют back, right, bottom и user). На свое усмотрение, можно поменять их местами в конфигурации окон.

- также рассмотрим панель навигации в окнах, Maximize Viewport Toggle - переключатель увеличения/уменьшения окна(выделено желтым цветом, работает просто, - выделяем нужное окно и жмём эту кнопку, и работаем во весь экран). Также стоит отметить Orbit вращение во-вьюпорте(находится слева от Maximize Viewport Toggle).

   На этом урок подошел к концу, благодарю за внимание.
   

Делаем модель. Часть 3 - Импорт и экспорт smd в 3ds Max 2009.

   Вот вы меня наверное спросите: "А при чём здесь smd, когда в папке с контрой одни mdl файлы?"
- Ответ прост: smd - составляющая mdl файла, то есть mdl это контейнер для smd файлов и текстур, думаю не запутал :D. Я надеюсь вы уже скачали плагины(см. Делаем модель. Часть 1 - Инструментарий (СМ), и ждёте следующих инструкций.

   Установка плагинов:
Итак, перед нами должно быть 2 архива в которых находятся плагины под разные версии макса, в нашем случае берём под "2009" и в зависимости от ос(у меня winхр 32-bit) берём 2 файла, примерно называются SMDImporter.dli - плагин импорта и соответственно SMDExporter.dle - экспорта, и копируем в папку(у вас может быть другая) D:\Program Files\3ds Max 2009\plugins.

   Доступ к плагинам из макса:
[Импорт] File -> Import -> из списка "Тип файлов" выбираем Valve SMD (*.SMD)
[Экспорт] File -> Export -> из списка "Тип файлов" выбираем Source SMD (*.SMD)

   Как видите ничего сложного, делайте по инструкции, изучите и двигаем дальше...

   

Делаем модель. Часть 4 - компиляция, декомпиляция mdl, qc-скрипт.

   Сегодня я расскажу о чисто-технических моментах, которые не относятся к моделированию. Мы поговорим о компиляции, декомпиляции mdl файлов, а также о скрипте QC под движок Half-Life для мода Counter-Strike 1.6. Эта информация очень важна, т.к. данных в особенности о скрипте - в сети очень мало, на самом деле, я и сам до конца не знаю весь QC-скрипт, но о самых важных командах - без которых не возможен экспорт, а также про маленькие нюансы - пойдёт речь в этой статье.

   В первую очередь поговорим о декомпиляторе, зачастую это самый первый шаг с которого, нужно начинать создавать модель. Я надеюсь вы уже скачали и распаковали Kratisto's Mdl Decompiler 1.2. Что же собой представляет эта маленькая, но очень толковая программка? Запускается она с команданой строки и нужна для распаковки mdl файлов, работает очень просто, - берём например из папки "...\Counter-Strike 1.6\cstrike\models" файл "v_ak47.mdl"(это стандартная модель ак, вид от первого лица) и копируем в папку с декомпилятором, затем запускаем "decompile_all.bat" и программа автоматом распакует все mdl файлы находящиеся в данной папке и рассортирует их по подпапкам создав при этом один лог для всех файлов, в нашем случае мы видим папку "v_ak47" и лог.

   Изучаем папку "v_ak47":
- файлы текстур в формате "bmp";
- "f_ak47_template.smd" собственно модель автомата с привязанными костями;
- "lhand.smd" и "rhand.smd" модель левой и правой руки, также с привязанными костями;
- файлы анимации, внутри их - нет абсолютно никаких моделей: "draw.smd", "idle1.smd", "reload.smd", "shoot1.smd", "shoot2.smd", "shoot3.smd", описывать не буду, - т.к. файлы говорят сами за себя.
-  скрипт "v_ak47.qc"(открыть можна любым текстовым редактором, например блокнот) о нём пойдёт речь дальше.

   QC-скрипт
Файлы *.qc - можно считать неким паспортом к модели, в нём идёт описание всего что будет находится в конченой модели. Основная задча .qc-файла - говорить компилятору, где искать текстуры и .SMD-файлы. Также скрипт определяет информацию которая относится к игровому движку, как анимаци, звуки и др.

Разберём скрипт на отдельном примере "v_ak47.qc":
/*
==============================================================================

QC script generated by Half-Life MDL Decompiler 1.2
2003, Kratisto. Based on code from Valve's HL SDK.

v_ak47.mdl

Original internal name:
"v_ak47.mdl"

==============================================================================
*/

$modelname "v_ak47.mdl"
$cd ".\"
$cdtexture ".\"
$scale 1.0
$cliptotextures


$bbox 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$cbox 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$eyeposition 0.000000 0.000000 0.000000


//reference mesh(es)
$body "rhand" "rhand"

$body "lhand" "lhand"

$body "weapon" "f_ak47_template"


// 2 attachment(s)
$attachment 0 "Bone 04" 2.750000 -22.500000 2.900000
$attachment 1 "Bone52" 0.000000 -3.000000 0.000000

// 4 hit box(es)
$hbox 0 "Bone04" -1.980000 -8.880000 -1.020000 1.730000 0.030000 1.090000
$hbox 0 "Bone_Righthand" -1.340000 -2.980000 -0.410000 1.430000 0.000000 0.630000
$hbox 0 "Bone01" -1.720000 -8.900000 -1.020000 1.990000 0.020000 1.090000
$hbox 0 "Bone_Lefthand" -1.520000 -3.073735 -0.410000 1.250000 0.000000 0.630000

// 6 animation sequence(s)
$sequence "idle1" "idle1" fps 30
$sequence "reload" "reload" fps 37 { event 5004 13 "weapons/ak47_clipout.wav" } { event 5004 57 "weapons/ak47_clipin.wav" }
$sequence "draw" "draw" fps 30 { event 5004 11 "weapons/ak47_boltpull.wav" }
$sequence "shoot1" "shoot1" fps 20 { event 5001 0 "22" }
$sequence "shoot2" "shoot2" fps 20 { event 5001 0 "22" }
$sequence "shoot3" "shoot3" fps 20 { event 5001 0 "22" }

// End of QC script.
Описание команд QC файла
$modelname "v_ak47.mdl" - имя исходного файла который создаст компилятор
$cd ".\" - папка где находятся файлы моделей и анимации
$cdtexture ".\" - папка с текстурами
$scale 1.0 - коэффициент масштабирования модели
$cliptotextures - при наличии в скрипте, будет говорить компилятору не обрезать неиспользуемые участки текстур, при отсутствии - компилятор автоматом обрежет неиспользуемые участки текстур
$externaltextures - дополнительная команда, создаст файл ak47T.mdl и запишет в него текстуры
$body "rhand" "rhand" - модель правой руки, в первых скобках название, во-вторых имя исходного файла без smd
$body "lhand" "lhand" - см. выше
$body "weapon" "f_ak47_template" см. выше
Примечание: командой $body нужно перечислить все отдельные файлы моделей smd.
$attachment 0 "Bone 04" 2.750000 -22.500000 2.900000 - определяет место возникновения событий(появление моделей, спрайтов), далее расшифровка:
$attachment <ID#> <bone> <X> <Y> <Z>:
<ID#> - уникальный идентификатор, максимум 4, тоесть <0> | <1> | <2> | <3>
<bone> - имя кости
<X> <Y> <Z> - определяет положение события по осям XYZ относительно прикрепленной кости, например возьмём следующие координаты <0><5><5> следовательно, координаты нашей кости будут <0><0><0> и событие будет отображаться со-сдвигом по оси-x - неизменно, оси-y - на 5 юнитов, оси-z - также 5 юнитов.
   Далее следуют хит-боксы, определяется командой $hbox, создает хит боксы вокруг костей, зачастую используется для коллизии, например - попадание пуль. Если чесно я незнаю каким макаром к модели от первого лица относится хитбоксы)), ну да ладно, если стандартные модели их содержат, мы тоже будем их делать. Кстати делаются они автоматом, при компиляции, об этом чуть позже.

   С анимацией немного посложнее.
Работает она за следующим принципом: минимум который нужен для нормального экспорта
$sequence "[имя анимации]" "[путь к файлу без smd]" [количество fps в анимации] см.ниже
$sequence "idle1" "idle1" fps 30
   Как видите, всё просто, мы могли применить эту схему к любой анимации "reload", "draw", "shoot", но, есть одно НО)), мы же хотим увидеть спрайты выстрела и услышать звуки, для этого подключим события и звуки в нужную анимацию.
$sequence "reload" "reload" fps 37 { event 5004 13 "weapons/ak47_clipout.wav" } { event 5004 57 "weapons/ak47_clipin.wav" }
Расшифровка: "имя: reload" "имя файла: reload" {событие 5004 на 13 кадре возпроизвести звук из файла "weapons/ak47_clipout.wav"} {событие 5004 на 57 кадре возпроизвести звук из файла "weapons/ak47_clipin.wav"}
Примечание: событие 5004 отвечает за воспроизведение звука из файла
   Дальше больше. Выстрелы:
Дефолтная модель предлагает нам следующее решение:
$sequence "shoot1" "shoot1" fps 20 { event 5001 0 "22" }
Как видите абсолютно никакой логики)) - это на заметку программерам "Вентиля"
   Как сказал однажды Петросян (с) "Мы пойдём своим путём!", и сделаем читабельное и понятное описание событий, поехали:
$sequence "shoot1" "shoot1" fps 20 { event 5004 0 "weapons/ak47-1.wav" } { event 5001 0 "muzzleflash3.spr" }
Примечание: событие 5001 отвечает за появление спрайта на точке $attachment 0(см. выше)
Примечание: можете использовать способ который вам по душе, я же описал оба, работают как часы.

   Ну наконец, - скрипт закончился. Далее компиляция:
Итак вы уже запаслись софтом GUI StudioMDL 1.0 и открыли его. Интерфейс простейший - проблем возникнуть не должно. Идём в File -> Load QC File открываем уже созданый нами скрипт "v_ak47.qc", если видите следующий меседж
[Opening QC file - C:\Documents and Settings\Admin\Рабочий стол\decompiler\v_ak47\v_ak47.qc] [QC loaded O.K!]

значит всё прошло гладко - здесь всё как на мед-комиссии годен, негоден третьего - нету)), ставим галку на "Dump Hitboxes"(автоматом пропишутся хитбоксы $hbox) и в заключении жмём кнопку "Compile", проверяем исходную папку и находим новосозданный "v_ak47.mdl", бросаем в папку с cs и играем.

   Советы:
- во-избежание любых проблем с правильным экспортом - используйте такую же разметку как и в дефолтных скриптах;
- используйте комментарии для описания тех или иных действий в скрипте:
Многострочный
/*
here is your comment
here is your comment
here is your comment
*/
Однострочный
// here is your comment
- постарайтесь не использовать в комментариях кириллицу;
- всегда думайте головой, если последнее не помогло пишите будем разбираться.
   На этом урок закончен, большое спасибо, ждите продолжения.

   

Делаем модель. Часть 5 - Редактирование модели.

   Я вас категорически приветствую (с)Гоблин, наступил долгожданный момент увидить, всё мной нижеописанное - в действии. Это будет заключительный урок из серии "С чего начать". Сегодня я расскажу о том, как из обычной модели для cs 1.6 сделать нечто другое, - то что нравится вам, ну в данном случае это понравилось мне. В статье пойдёт речь не совсем о редактировании, больше это похоже будет на дополнение, некий апгрейд. Стартовая модель ак-47 - поехали.

   Перед тем как приступить к импорту модели сделайте следующую процедуру:

   Это нужно для того чтобы единицы измерения  макса совпадали с движком half-life.

   Далее всё за планом, декомпилим v_ak47.mdl, импортим файл f_ak47_template.smd:



1. Парсер настроек SMD файла.
- Skip Mesh - не импортить геометрию(меш);
- Skip Animation - не импортить анимацию, следственно не будет костей и привязки.
В нашем случае нужно оставить пустыми оба чекбокса т.к. нужно всё.

2.Настройки SMD импортёра.
SMD Statistics(информация о файле):
- 42 кости;
- 258 вертекса;
- 454 фейса;
- 1  кадр анимации;
- 8 текстур.
Mesh Options(опции геометрии):
- Import mesh - импортить геометрию;
- Rebuild smoothing normals - сохранить группы сглаживания при импорте;
- Import materials - тут всё ясно.
Bone/Animation Options(настройки костей/анимации):
- Import bones - импортить кости;
- Use dummy for orphan bones - использовать dummy как первичную кость;
- Use dummy for end bones - использовать dummy как конечную  кость;
- Skin mesh to bones - привязать геометрию к костям;
- Import first frame (reference) only - импортировать лишь первый кадр, используется для reference моделей, здесь также можно ставить галку;
- Reverse animation - обратная анимация;
Misc. Options(другие опции):
- Convert from left handed coordinate space - ставьте галку если импортите модель с левой руки(понять правильно);
Примечание: dummy - вспомогательный объект в максе, может использоваться в роли кости.
Важно: reference-модель - не содержит абсолютно никакой анимации, в движке half-life используется для передачи в анимацию - геометрии, текстур и привязки костей(в нашем случае это f_ak47_template.smd).

   Зачастую, помимо основной модели для удобства, я импортирую и модели рук, они находятся в файлах lhand.smd(левая) и rhand.smd(правая). Импорт рук происходит по тому же принципу - что и основная модель, на запрос Import Name Conflict введите имя объекта(любое, желательно чтобы описывало его, в моём случае "left_hand" - для левой руки)

Важно: импорт рук не обязательно делать в референсную модель, я делаю это исключительно для удобства, чтоб видить как проходят руки через основную модель, не затрагивает ли её части. Повторюсь это лишь для удобства, делать не обязательно. Перед экспортом основной модели f_ak47_template.smd модели рук(кости не трогать) нужно будет удалить.

   А сейчас давайте временно скроем кости которые мешают осмотреть модель:

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

   Подключаем текстуры в сцену:
   1. Идём в File -> Asset Tracking или Shift+T.
   Asset Tracking - служит для отображения абсолютно всех текстур в сцене, а также подключаемых ies-светильников и шейдеров. Если в друг текстуры не отображаются, - нужно нажать кнопку Refresh(обновить) в левом верхнем углу.
   Выделяем все текстуры при помощи Shift+LB(левая кнопка мыши), затем RB - выбираем пункт Set Path(выбрать путь) и находим нужную нам папку.

2. На втором скрине я уже выбрал путь к текстурам(у вас может быть другой путь), но ещё не нажал кнопку OK, видно как все текстуры находятся в статусе File Missing, то есть - не найдены.

3. Жмём OK, видим что все текстуры перешли в статус Ok - это именно то, что нам нужно. Закрываем Asset, но текстур как небыло так и нету)), - это излишки макса. Мы могли бы пройтись по каждому материалу отдельно и проставить отображение во-вьюпорте,  ну это довольно неприятная процедура, , а я насчитал там аж 8 материалов, поэтому убиваем 2-х зайцев - сохраним файл и отобразим текстуры.

4. File -> Save As... - сохраняем в формате .max(желательно в той же папке).

5. Я назвал файл ak47_remake, сейвим...

6. Сбрасываем сцену File -> Reset.

7. Открываем только что сохранённую,  File -> Open... находим, открываем.

   Результат:

  Далее делаем то самое дополнение, лепим из бокса:

   Дополнением будет Red Dot так называемая - красная точка, порылся в нете и нашел неплохой скрин:

Совет: перед тем как начать что-либо моделить, текстурить - поищите в сети референсы(примеры)

  Так как смысл данного урока - короткий путь к удачному экспорту, мы пропускаем моделинг и текстурирование, о них пойдёт речь в следующих статьях. Итак, смотрим что у меня получилось, не стоит забывать о том движок Half-Life 1 очень слаб в поддержке большого количества полигонов, именно поэтому red dot не промоделен так - как вы видите выше на скриншоте:

   Затекстурил и отмапил следующим образом:


   Вкратце о тонкостях(если вы новичёк в максе - пропускайте шаг).
 Начинаем моделить из бокса(бокс хорошо подошел в данном случае, зачастую начинаю с плейна), поскольку материалы экспортируются через Multi/Sub Object(честно признаться я этому очень рад, не каждый движок даже в наше время может позволить себе такую роскошь, многое также зависит и от экспортёра) назначаем Mat ID нашей модели, так как в модели планируется стёклышко делим модель(Red Dot) на 2 разных ID(почему - узнаете позже) - то есть:
- основная часть ID = 9 текстура red_dot.bmp;
- стёклышко ID = 10 текстура red_dot_a.bmp.
Мапим, текстурим. Присоединяем через Attach к основной модели(ак47), далее Skin - Red Dot привязываем к основной кости Bone_AK47.

   Осталось дело за малым - экспорт и QC скрипт:
Перезаписываем f_ak47_template.smd, при экспорте обязательно укажите что экспортим для Half-Life 1 SMD:

Пример скрипта под даную модель:
/*
==============================================================================

QC script generated by Half-Life MDL Decompiler 1.2
2003, Kratisto. Based on code from Valve's HL SDK.

v_ak47.mdl

Original internal name:
"v_ak47.mdl"

==============================================================================
*/

$modelname "v_ak47.mdl"
$cd ".\"
$cdtexture ".\"
$scale 1.0
$cliptotextures


$bbox 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$cbox 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$eyeposition 0.000000 0.000000 0.000000


//reference mesh(es)
$body "rhand" "rhand"

$body "lhand" "lhand"

$body "weapon" "f_ak47_template"

// 2 attachment(s)
$attachment 0 "Bone 04" 2.750000 -22.500000 2.900000
$attachment 1 "Bone52" 0.000000 -3.000000 0.000000

$texrendermode "red_dot_a.bmp" "additive"

// 4 hit box(es)
$hbox 0 "Bone04" -1.980000 -8.880000 -1.020000 1.730000 0.030000 1.090000
$hbox 0 "Bone_Righthand" -1.340000 -2.980000 -0.410000 1.430000 0.000000 0.630000
$hbox 0 "Bone01" -1.720000 -8.900000 -1.020000 1.990000 0.020000 1.090000
$hbox 0 "Bone_Lefthand" -1.520000 -3.073735 -0.410000 1.250000 0.000000 0.630000

// 6 animation sequence(s)
$sequence "idle1" "idle1" fps 30
$sequence "reload" "reload" fps 37 { event 5004 13 "weapons/ak47_clipout.wav" } { event 5004 57 "weapons/ak47_clipin.wav" }
$sequence "draw" "draw" fps 30 { event 5004 11 "weapons/ak47_boltpull.wav" }
$sequence "shoot1" "shoot1" fps 20 { event 5001 0 "22" }
$sequence "shoot2" "shoot2" fps 20 { event 5001 0 "22" }
$sequence "shoot3" "shoot3" fps 20 { event 5001 0 "22" }

// End of QC script.

   А теперь, почему мы делили на 2 разных ID наш Red Dot?
   Ответ прост: к сожалению через материал, в т.ч. альфа канал, мы не можем добиться эффекта прозрачности, но можно это сделать через скрипт QC, нужная строка выделена жирным - сдесь думаю всё ясно.
   Далее всё за планом: компилим, получаем v_ak47.mdl, копируем в папку cstrike/models. Эта модель не претендует на какие либо аварды, это всего лишь рабочий пример.

   Ну вот, очередной урок подходит до логического завершения, с вами был Joker автор, одно что могу вам пожелать - это терпения в изучении Autodesk 3ds Max. Жду ваших предложений и пожеланий.
Спасибо за внимание, до встречи.



Профиль
 Привет: Гость

Информация:

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!
Форма входа
Друзья сайта
Статистика
Статистика :
 
Он-лайн :
 
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Пользователи :