Компиляция модели человека в 3d Max

Оглавление:

1. Подготовительный этап, создание концепции и подготовка к моделированию персонажа в 3d max

2. Моделирование головы персонажа

3. Развертка головы для последующего текстурирования

4. Моделирование тела персонажа

5. Моделирование кисти руки

6. Развертка тела персонажа

7. Анимация (скелет и модификатор skin)

8. Компиляция модели

9. Лицевая анимация и финальная компиляция

VIII

Теперь у нас есть практически все для компиляции модели в формат понятный игровому движку mdl . Не хватает только лицевой анимации, ею займемся позже. Откроем папку с декомпилированной моделью, части которой мы уже использовали (скелет, зубы и текстуры к ним). Я продолжу мучить male_07. Итак, что в папке? Шесть файлов LOD с названиями lod1_male_07_reference.smd-lod6_male_07_reference.smd , они нам не интересны, так же как и сама модель male_07_reference.smd . Файл ragdoll.smd , он нам тоже не интересен, у нас уже есть свой, а вот phymodel.smd нам пригодится (это физическая модель), скопируем ее в свою папку hl2/models/имя_модели. Еще в папке остался mdldecompiler_expressions.vta, в котором содержится лицевая анимация персонажа, этот файл нам тоже ни к чему (создадим свой), и последний файл — mdldecompiler.qc, копируем его в свою папку. Это скрипт для компиляции модели, сейчас мы займемся его редактированием.

Откроем mdldecompiler.qc с помощью блокнота. Ого, черт ногу сломит J, на самом деле ничего страшного. Первые три строки у меня выглядят так:

$cd «C:Documents and SettingsAdminРабочий столmale_07″

$modelname «HumansGroup03male_07.mdl»

$model «male_07″ «male_07_reference.smd» {

Заменим путь в первой строке на полный путь к нашей папке в директории игры, во второй строке заменим имя модели на свое, в третьей заменим имя модели и имя файла reference.smd на собственное. Вот так это выглядит у меня:

$cd «f:SDKhl2modelsColonel»

$modelname «ColonelColonel.mdl»

$model «Colonel» «Colonel_reference.smd» {

Обратите внимание, modelname содержит путь к файлу mdl относительно папки models в директории hl2, если написать только имя файла, модель скомпилируется в директорию hl2/models

Ниже описывается положение глаз, лицевая анимация и лоды. Удалим все это до строчки

$cdmaterials «modelsHumansMaleGroup03″

Понятно, что здесь содержится путь к папке с текстурами (которые использует модель), внутри директории hl2/materials. Заменим этот путь на свой. У меня вот такой путь:

$cdmaterials «modelsColonel»

Ниже идет описание hitbox. Оставим все как есть. Еще ниже описаны attachment, их пока тоже трогать не будем.

Еще ниже следующее:

$includemodel «humans/male_shared.mdl»

$includemodel «humans/male_ss.mdl»

$includemodel «humans/male_gestures.mdl»

$includemodel «humans/male_postures.mdl»

Это пути к файлам анимации, которые будут доступны модели в игре. Сюда можно добавить пути к другим файлам, стандартным или собственным. Я подумал, и прикрутил своему персонажу анимацию Брина:

$includemodel «humans/male_shared.mdl»

$includemodel «humans/male_ss.mdl»

$includemodel «humans/male_gestures.mdl»

$includemodel «humans/male_postures.mdl»

$includemodel «breen_anims.mdl»

$includemodel «breen_postures.mdl»

$includemodel «breen_gestures.mdl»

Все что идет ниже, оставляем без изменений. Закрываем файл с сохранением изменений и переименовываем в имя_модели.qc. Таким образом содержимое папки hl2/models/имя_модели должно выглядеть так:

имя_модели_reference.smd

phymodel.smd

ragdoll.smd

имя_модели.qc

Займемся установкой глаз. Открываем нашу модель в 3DS MAX. Создаем сферу в области глаза и устанавливаем ее примерно вот так:

Выделяем сферу инструментом Select and Move и записываем куда-нибудь координаты центра правого глаза.

Идем на вкладку Hierarchy и выравниваем pivot point сферы по модели

Отражаем сферу по оси Х чтобы она стала в левый глаз, выравниваем ее pivot point снова по центру и записываем координаты для левого глаза. Собственно, нам нужна только координата по оси Х, по другим осям координаты идентичны, если лицо симметричное. Сохраним модель со сферой в отдельный файл, возможно придется корректировать положение глаз.

Откроем файл имя_модели.qc блокнотом и добавим в него полученные координаты после третьей строки:

eyeball righteye ValveBiped.Bip01_Head1 -1.21 -1.904 67.650 eyeball_r 1.000 4.000 grn_pupil_r 0.630

eyeball lefteye ValveBiped.Bip01_Head1 1.21 -1.904 67.650 eyeball_l 1.000 -4.000 grn_pupil_l 0.630

mouth 0 «mouth» ValveBiped.Bip01_Head1 0.000 1.000 0.000

}

Здесь grn_pupil_r 0.630 – радиус радужной оболочки

Обратите внимание, координаты в qc пишутся через точку, в отличие от координат в максе, там через запятую.

Таким образом, qc принял следующий вид:

$cd «f:SDKhl2modelsColonel»

$modelname «ColonelColonel.mdl»

$model «Colonel» «Colonel_reference.smd» {

eyeball righteye ValveBiped.Bip01_Head1 -1.21 -1.904 67.650 eyeball_r 1.000 4.000 grn_pupil_r 0.630

eyeball lefteye ValveBiped.Bip01_Head1 1.21 -1.904 67.650 eyeball_l 1.000 -4.000 grn_pupil_l 0.630

mouth 0 «mouth» ValveBiped.Bip01_Head1 0.000 1.000 0.000

}

$cdmaterials «modelsColonel»

$hboxset «default»

$hbox 1 «ValveBiped.Bip01_Head1″ -1.250 -6.500 -3.190 8.250 3.500 3.310

$hbox 4 «ValveBiped.Bip01_L_UpperArm» 0.000 -2.750 -2.750 12.510 1.750 2.250

$hbox 4 «ValveBiped.Bip01_L_Forearm» 0.000 -2.190 -2.380 13.000 1.810 1.620

$hbox 4 «ValveBiped.Bip01_L_Hand» 0.060 -2.000 -1.500 4.060 1.000 2.500

$hbox 5 «ValveBiped.Bip01_R_UpperArm» 0.000 -3.000 -2.250 12.390 2.000 2.750

$hbox 5 «ValveBiped.Bip01_R_Forearm» -0.500 -2.200 -1.550 12.500 1.800 2.450

$hbox 5 «ValveBiped.Bip01_R_Hand» 0.060 -2.000 -2.500 4.060 1.000 1.500

$hbox 6 «ValveBiped.Bip01_L_Thigh» 0.000 -3.750 -3.250 17.850 3.750 3.250

$hbox 6 «ValveBiped.Bip01_L_Calf» 0.000 -3.510 -3.280 15.640 3.490 2.720

$hbox 6 «ValveBiped.Bip01_L_Foot» -1.070 -2.000 -2.840 5.040 5.000 2.160

$hbox 6 «ValveBiped.Bip01_L_Toe0″ -0.500 -3.000 -2.190 2.500 0.000 2.460

$hbox 7 «ValveBiped.Bip01_R_Thigh» 0.000 -3.750 -3.250 17.850 3.750 3.250

$hbox 7 «ValveBiped.Bip01_R_Calf» 0.000 -3.510 -2.820 15.640 3.490 3.180

$hbox 7 «ValveBiped.Bip01_R_Foot» -1.060 -2.010 -2.280 5.050 4.990 2.720

$hbox 7 «ValveBiped.Bip01_R_Toe0″ -0.500 -3.000 -2.600 2.500 0.000 2.100

$hbox 3 «ValveBiped.Bip01_Pelvis» -7.500 -5.500 -6.000 7.500 8.500 5.000

$hbox 2 «ValveBiped.Bip01_Spine2″ -2.500 -2.500 -7.000 14.500 7.500 7.000

$attachment «eyes» «ValveBiped.Bip01_Head1″ 3.20 -3.50 0.12 rotate 0.00 -80.10 -90.00

$attachment «mouth» «ValveBiped.Bip01_Head1″ 0.60 -5.50 -0.00 rotate 0.00 -80.00 -90.00

$attachment «chest» «ValveBiped.Bip01_Spine2″ 5.00 4.00 -0.00 rotate -0.00 90.00 90.00

$attachment «forward» «ValveBiped.forward» 0.00 0.00 0.00 rotate 0.00 0.00 -0.00

$attachment «anim_attachment_RH» «ValveBiped.Anim_Attachment_RH» 0.00 0.00 -0.00 rotate -90.00 -90.00 0.00

$attachment «anim_attachment_LH» «ValveBiped.Anim_Attachment_LH» -0.00 0.00 0.00 rotate -90.00 -90.00 0.00

$attachment «anim_attachment_head» «ValveBiped.Bip01_Head1″ -0.00 0.00 0.00 rotate -90.00 -90.00 0.00

$includemodel «humans/male_shared.mdl»

$includemodel «humans/male_ss.mdl»

$includemodel «humans/male_gestures.mdl»

$includemodel «humans/male_postures.mdl»

$includemodel «breen_anims.mdl»

$includemodel «breen_postures.mdl»

$includemodel «breen_gestures.mdl»

$surfaceprop «flesh»

$eyeposition -0.000 0.000 70.000

$illumposition -1.764 0.080 36.127

$sequence ragdoll «ragdoll» ACT_DIERAGDOLL 1 fps 30.00

$ikchain rhand ValveBiped.Bip01_R_Hand knee 0.707 0.707 0.000

$ikchain lhand ValveBiped.Bip01_L_Hand knee 0.707 0.707 0.000

$ikchain rfoot ValveBiped.Bip01_R_Foot knee 0.707 -0.707 0.000

$ikchain lfoot ValveBiped.Bip01_L_Foot knee 0.707 -0.707 0.000

$collisionjoints «phymodel.smd» {

$mass 90.0

$inertia 10.00

$damping 0.01

$rotdamping 1.50

$rootbone «valvebiped.bip01_pelvis»

$jointmerge «ValveBiped.Bip01_Pelvis» «ValveBiped.Bip01_Spine1″

$jointconstrain «valvebiped.bip01_spine2″ x limit -48.00 48.00 0.00

$jointconstrain «valvebiped.bip01_spine2″ y limit -25.00 25.00 0.00

$jointconstrain «valvebiped.bip01_spine2″ z limit -25.00 50.00 0.00

$jointconstrain «valvebiped.bip01_r_upperarm» x limit -39.00 39.00 0.00

$jointconstrain «valvebiped.bip01_r_upperarm» y limit -79.00 95.00 0.00

$jointconstrain «valvebiped.bip01_r_upperarm» z limit -93.00 23.00 0.00

$jointconstrain «valvebiped.bip01_l_upperarm» x limit -30.00 30.00 0.00

$jointconstrain «valvebiped.bip01_l_upperarm» y limit -95.00 84.00 0.00

$jointconstrain «valvebiped.bip01_l_upperarm» z limit -86.00 26.00 0.00

$jointconstrain «valvebiped.bip01_l_forearm» x limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_l_forearm» y limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_l_forearm» z limit -149.00 4.00 0.00

$jointconstrain «valvebiped.bip01_l_hand» x limit -37.00 37.00 0.00

$jointconstrain «valvebiped.bip01_l_hand» y limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_l_hand» z limit -57.00 59.00 0.00

$jointconstrain «valvebiped.bip01_r_forearm» x limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_r_forearm» y limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_r_forearm» z limit -149.00 4.00 0.00

$jointconstrain «valvebiped.bip01_r_hand» x limit -60.00 60.00 0.00

$jointconstrain «valvebiped.bip01_r_hand» y limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_r_hand» z limit -57.00 70.00 0.00

$jointconstrain «valvebiped.bip01_r_thigh» x limit -12.00 12.00 0.00

$jointconstrain «valvebiped.bip01_r_thigh» y limit -8.00 75.00 0.00

$jointconstrain «valvebiped.bip01_r_thigh» z limit -97.00 32.00 0.00

$jointconstrain «valvebiped.bip01_r_calf» x limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_r_calf» y limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_r_calf» z limit -12.00 126.00 0.00

$jointconstrain «valvebiped.bip01_head1″ x limit -20.00 20.00 0.00

$jointconstrain «valvebiped.bip01_head1″ y limit -25.00 25.00 0.00

$jointconstrain «valvebiped.bip01_head1″ z limit -13.00 30.00 0.00

$jointconstrain «valvebiped.bip01_l_thigh» x limit -12.00 12.00 0.00

$jointconstrain «valvebiped.bip01_l_thigh» y limit -73.00 6.00 0.00

$jointconstrain «valvebiped.bip01_l_thigh» z limit -93.00 30.00 0.00

$jointconstrain «valvebiped.bip01_l_calf» x limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_l_calf» y limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_l_calf» z limit -8.00 126.00 0.00

$jointconstrain «valvebiped.bip01_l_foot» x limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_l_foot» y limit -19.00 19.00 0.00

$jointconstrain «valvebiped.bip01_l_foot» z limit -15.00 35.00 0.00

$jointconstrain «valvebiped.bip01_r_foot» x limit 0.00 0.00 0.00

$jointconstrain «valvebiped.bip01_r_foot» y limit -25.00 6.00 0.00

$jointconstrain «valvebiped.bip01_r_foot» z limit -15.00 35.00 0.00

$animatedfriction 1.000 400.000 0.500 0.300 0.000

}

Играют фанфары, приступаем к компиляции модели.

Запускаем программу GUI StudioMDL. Жмем File>Load QC file, показываем программе имя_модели.qc, нажимаем Compile. Если ошибок в qc нет, примерно через минуту компиляция закончится. Если компилятор выдает ошибку, открываем qc и внимательно все проверяем. Чаще всего причиной ошибки бывают неверно указанные пути к файлам или имена файлов, а так же десятичные запятые вместо точек. Где-то может потеряться фигурная скобка.

Итак, модель успешно скомпилировалась. Запускаем Model Viewer, загружаем модель, критически осматриваем, плюёмся и посыпаем голову пеплом J)))))) Конечно она еще слишком далека от совершенства, почти наверняка придется дорабатывать текстуры, устранять косоглазие и с анимацией вряд ли будет все гладко, но, как ни крути, а вставить в игру ее уже можно, правда разговаривать она пока не будет и глаза будут работать не корректно. Здесь же в Model Viewer уточняем положение аттачментов и вносим необходимые поправки в qc. Если текстуры модели отображаются в видет сиренево-черных шашечек, проверяем правильность путей в vmt файлах. Если не появились радужки глаз – еще раз проверяем правильность координат в qc. Проверяем так же правильность наложения текстур глазных яблок, текстура с именем eyeball_r должна быть именно на правом глаз, визуально это может и не заметно, но если их перепутать- глаза работать не будут. Еще одна типичная ошибка- неправильный поворот осей pivot point у модели. Когда я настраивал глаза своему первому персонажу, то убил кучу времени на поиск ошибки, в итоге придумал вот такой тупой, но рабочий метод: сферы, по которым настраивал глаза текстурировал соответствующими текстурами глазных яблок и приаттачил к модели, а полигоны головы удалил начисто. Получилась модель без головы, но с глазными яблоками парящими в воздухе (жаль скриншота не сохранилJ). После компиляции выяснилось, что глаза проецируются не прямо, а почему-то сбоку, по этому у модели их и не было видно. Разбор полетов показал, что оси pivot point модели не совпадали с пивотом скелета.

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

Далее: Лицевая анимация и финальная компиляция.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>