Делаем модель.
Часть 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Примечание: в обоих режимах можно выделить объект кликнув на его грань. - 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).На этом урок подошел к концу, благодарю за внимание. - стоить обвести лишь грань объекта для полного выделения(извините за тавтологию xD).
|
Делаем модель. Часть 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 файла============================================================================== 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. $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>:
Далее следуют хит-боксы, определяется командой $hbox,
создает хит боксы вокруг костей, зачастую используется для коллизии,
например - попадание пуль. Если чесно я незнаю каким макаром к модели
от первого лица относится хитбоксы)), ну да ладно, если стандартные
модели их содержат, мы тоже будем их делать. Кстати делаются они
автоматом, при компиляции, об этом чуть позже.<ID#> - уникальный идентификатор, максимум 4, тоесть <0> | <1> | <2> | <3> <bone> - имя кости <X> <Y> <Z> - определяет положение события по осям XYZ относительно прикрепленной кости, например возьмём следующие координаты <0><5><5> следовательно, координаты нашей кости будут <0><0><0> и событие будет отображаться со-сдвигом по оси-x - неизменно, оси-y - на 5 юнитов, оси-z - также 5 юнитов. С анимацией немного посложнее. Работает она за следующим принципом: минимум который нужен для нормального экспорта $sequence
"[имя анимации]" "[путь к файлу без smd]" [количество fps в анимации]
см.ниже
Как видите, всё просто, мы могли применить эту схему к любой анимации
"reload", "draw", "shoot", но, есть одно НО)), мы же хотим увидеть
спрайты выстрела и услышать звуки, для этого подключим события и звуки
в нужную анимацию.$sequence "idle1" "idle1" fps 30 $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 -
постарайтесь не использовать в комментариях
кириллицу;- всегда думайте головой, если последнее не помогло пишите будем разбираться. На этом урок закончен, большое спасибо, ждите продолжения. |


-
функции 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
- Select
and Move выделить и переместить, Select and Rotate выделить и
вращать, Select and Scale выделить и масштабировать, Reference
Coordinate System - система координат "pivot'a" относительно
объекта, Use Pivot Point Center - положения опорной точки
относительно объекта.
- во-вкладке Create(создать)
находятся
практически все объекты которые можно создать в максе, мы
зачастую будем пользоваться Geometry -> Standard Primitives, если
прошуршать все примитивы, можно найти прямоугольник, сферу, цилиндр,
конус и др., ах да, - каким боком к примитивам чайник приставили я не
знаю)).
- вкладка Modify(модификаторы
объекта/объектов) это именно то, за что я лично люблю макс, о списке
модификаторов мы поговорим позже.
-
также рассмотрим панель навигации в окнах, Maximize Viewport Toggle
- переключатель увеличения/уменьшения окна(выделено желтым цветом,
работает просто, - выделяем нужное окно и жмём эту кнопку, и работаем
во весь экран). Также стоит отметить Orbit вращение
во-вьюпорте(находится слева от Maximize Viewport Toggle).














