Перед тем как приступить к импорту модели сделайте следующую процедуру:
Это нужно для того чтобы единицы измерения макса совпадали с движком 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.
==============================================================================
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 aka автор, одно что могу вам пожелать - это терпения в изучении Autodesk 3ds Max. Жду ваших предложений и пожеланий.
Спасибо за внимание, до встречи.