Я вас категорически приветствую (с)Гоблин,
наступил долгожданный момент увидить, всё мной нижеописанное - в
действии. Это будет заключительный урок из серии "С чего начать".
Сегодня я расскажу о том, как из обычной модели для 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. Жду ваших предложений и пожеланий.
Спасибо за внимание, до встречи.