Выбираем модель которую необходимо анимировать. В данном примере я выбрал стандартную AWP из CS 1.6. Распаковал ее при помощи плагина Kratisto's Half-Life MDL Decompiler v1.2, который идет в стандартном наборе Milkshape 3D 1.7.0 (Tools -> Kratisto's Half-Life MDL Decompiler v1.2). Если вы анимируете свою собственную модель, а не переделываете анимацию уже существующей модели, то разумеется распаковывать вам ничего не нужно. Хотя вам всеравно придется где-то достать стандартные анимации для вашей модели. Короче распаковали, смотрим что внутри, внутри стандартной v_ модели awp из CS 1.6 (v_awp.mdl) мы видим 23 файла. 13 текстур, 1 скрипт компиляции (v_awp.qc), 1 модель оружия + скелеты оружия и рук (f_awm_template.smd), 2 модели рук - это нововедение в CS 1.6 модели рук находятся теперь в разных файлах и в отдельности от основной модели оружия, причем на этих моделях нет скелета, скелет находится в файле модели оружия см. выше (lhand.smd и rhand.smd) и 6 файлов анимаций, они то нам сегодня и понадобятся, а в частности для примера понадобится 1 файл, анимация перезарядки (reload.smd). Импортируем модель со скелетом в милкшейп, также импортируем модели рук (File -> Import -> Half-Life SMD..., либо File -> Open. Зависит от того в каком формате вы сохранили модель). В появившемся окне "SMD import" убираем последнюю галочку "Rename Bones", чтобы сохранить стандартные названия костей
Импортируем файл стандартной анимации к нашей модели (File -> Import -> Half-Life SMD...). В появившемся окне вам предложат дописать текущую анимацию к уже существующей анимации "Do you want to append the animation at the end of current animation?". Так как анимации до этого не было выбираем НЕТ, это удалит уже существующие 30 пустых кадров.
Далее на кифреймере нажимаем кнопку [Anim],
кифреймер включается\отключается из меню (Window -> Show Keyframer),
[center]
и приступаем собственно к анимации. Можете посмотреть стандартную анимацию, двигая ползун кифреймера или при помощи кнопки [>] (Play Forward).
Но для начала наверное следует объяснить сам принцип работы анимации в Милкшейпе и в формате SMD в частности. Анимация в милкшейпе состоит из кадров и кифреймов. Число кадров определяет длинну анимации. Для увеличения\уменьшения кадров в анимации просто пишем нужное число фреймов в окне Total Frames.
В CS за одну секунду мы видим 30 кадров, то есть анимация в 88 кадров (перезарядка AWP) длится 2,9 сек. Ну с кадрами думаю понятно. И что теперь, нужно анимировать каждый кадр перезарядки? Все 88 штук! НЕТ! И помогут нам облегчить работу - кифреймы. Кифрейм - это ключевой кадр в анимации, то есть кадр в котором находится пиковое положение, определенная поза модели. Для примера рассмотрим все ту же перезарядку AWP, в анимации которую мы сделаем будет всего 14 кифреймов. Внимание: в SMD файле все кадры являются кифреймами. При создании анимации необходимо гораздо меньше кифреймов чем содержится в SMD. Тоесть само движение скажем руки из одного положения в другое(снизу вверх), может содержать всего 2 кифрейма, 1 - рука внизу, 2 - рука вверху. Между ними будут обычные кадры которые сами заполнятся промежуточными фазами движения. Чем больше простых кадров, тем дольше будет двигаться рука. В SMD же все кадры между двумя этими кифреймами после компиляции так же станут кифреймами.
Для того чтобы создать новую анимацию нам нужно удалить все кифреймы кроме первого. Для этого ставим ползун кифреймера на второй кадр анимации. И используем следующий пункт меню Animate -> Delete Keyframe (удалить кифрейм), переходим на третий кадр и повторяем операцию, затем на четвертый и так далее до 88го. Остается только первый кифрейм. После удаления у нас получается болванка для новой анимации - руки сжимающие винтовку.
Далее нам понадобится 2 самых главных инструмента для работы - мозг и воображение. Необходимо представить движение рук во время перезарядки. После того как движение готово, начинаем его материализовывать через Милкшейп.
Если Вы следовали советам данного туториала, то кнопка [Anim] на кифреймере у Вас уже нажата. Теперь двигаем ползун кифреймера на 13 кадр, или пишем в левом окошке кифреймера (Current Frame) номер кадра - 13.0. Мы перешли на пустой кадр номер 13, тоесть первое движение будет длинной в 13 кадров.
Переходим на закладку "Model", нажимаем кнопку [Select], в опциях нажимаем кнопку [Joint].
Этим мы указываем программе на то, что мы будем производить какие то действия с суставами. Выбираем сустав (Joint), который мы будем крутить/двигать. Сустав - это основная единица скелета модели. Обозначаются на видах синими сферами, соединенными между собой желтыми пирамидами. Их можно спрятать\показать на закладке "Joints" -> "Show Skeleton". Так же на закладке "Joints" можно выбрать сустав из списка, что позволяет быстро найти определенный джоинт на модели.
Для удобства можно уменьшить размер суставов. Размер джоинтов устанавливается в меню File -> Preferences... -> Misc -> Joint Size (по умолчанию имеет значение 1.000000, в примере я использую размер 0.250000)
Но вернемся на закладку "Model". Выбираем мышью на одном из видов первый сустав правой руки (в списке джоинтов он называется Bone04). Если все сделали правильно, то выбранный сустав становится красного цвета, все суставы идущие за ним становятся зеленого цвета. Далее нажимаем кнопку [Move] и двигаем руку так чтобы кисть оказалась под магазином винтовки, создаем первую фазу движения.
Боец подвинул руку к магазину, теперь необходимо cжать ему пальцы, чтобы взять магазин. Но сначала необходимо зафиксировать эту позу. Важно!!! Перед сохранением необходимо отключить пункт меню Animate -> Operate On Selected Joints Only, для того чтобы сохранить всю позу целиком, а не только движение пальца выбранного последним. Открываем меню Animate и выбираем пункт Set Keyframe, или нажимаем Alt+K. Все первое движение готово. Можете подвигать ползуном от первого кадра до тринадцатого, чтобы посмотреть что получилось. Если не нравится, удаляем кифрейм номер 13 (Animate->Delete Keyframe) и начиаем анимировать заново. Как узнать что кифрейм поставился? Очень просто, если подвигать ползуном в режиме анимации, при прохождении кифрейма, на видах, все кости задействованые в этом кифрейме выделяются желтым цветом. Не забывайте ставить кифрейм, это очень важно, так как вы можете потерять созданную вами фазу движения, если забудите поставить кифрейм и начнете делать следующую фазу. Ок первый кифрейм есть.
Далее двигаем ползун кифреймера еще на один кадр. И продолжаем начатое движение. Суставы пальцев правой руки располагаются в списке c Bone28 по Bone45. Точно также Select'ом выбираем один сустав, Rotate'ом поворачиваем его так, чтобы палец согнулся, для этого главное точно определить оси по которым нужно гнуть пальцы ), остальные можно отключить (кнопки [X],[Y] и [Z] соответственно), затем следующий палец, и т.д. пока боец не возьмет рукой магазин. Причем чтобы получить нормальную человеческую позу, пальцы придется гнуть на всех трех видах. Будем считать что с первым серьезным заданием Вы справились и у Вас получилась нормальная поза, рука живого человека, держащая магазин винтовки (хотя с первого раза врядли у кого то получится, у меня по крайней мере не получилось, ну да ладно, практика практика и еще раз практика), а не клешня трупа замученного бесчеловечными пытками.
Ставим второй кифрейм и фиксируем тем самым вторую фазу движения.
Двигаем ползун на 17 кадр. Выбираем первый сустав левой руки (Bone01) и чуть-чуть наклоняем руку с винтовкой вниз используем для этого кнопку [Rotate]. На столько же опускаем правую руку.
Ставим кифрейм.
Переходим на 19 кадр. Поворачиваем руку с винтовкой на прежнее место, рука и магазин остаются на месте.
Ставим кифрейм. Смотрим получившуюся анимацию. Боец отсоединил магазин от винтовки, винтовка немного дрогнула от приложенного усилия.
Переходим на 38 кадр. Перемещаем правую руку вниз (Bone04). Вставляем в нее магазин (Bone48).
Ставим кифрейм. Боец вынул и выбросил пустой магазин.
Переходим на 41 кадр. Поворачиваем руку с винтовкой против часовой стрелки (Bone01) Снова вставляем магазин в руку, так как он повернулся вместе с винтовкой (Bone48).
Ставим кифрейм. Боец взял винтовку поудобнее и приготовился для вставки магазина.
Переходим на 47 кадр. Поднимаем руку вместе с магазином на уровень винтовки, но так чтобы она была немного в стороне и поворачиваем ее так чтобы кисть оказалась сверху магазина (Bone04, Bone48). Можно немного отогнуть кисть с магазином назад (Bone_Righthand).
Ставим кифрейм. Боец приготовился вставить в винтовку новый магазин.
Переходим на 64 кадр. Вставляем магазин (Bone48) в винтовку и двигаем правую руку так, чтобы она расположилась на магазине (Bone04).
Ставим кифрейм. Боец готов дослать магазин в винтовку.
Переходим на 67 кадр. Поворачиваем руку с винтовкой немного в сторону (Bone01) двигаем руку с раскрытой ладонью так чтобы она касалась магазина (Bone04).
Ставим кифрейм. Боец дослал магазин в винтовку и рука с винтовкой немного покачнулась в сторону от приложенного усилия.
Переходим на кадр 68. Немного поворачиваем обе руки в противоположную сторону (Bone01, Bone04).
Ставим кифрейм. Руки вернулись в положение покоя.
Переходим на 77 кадр. Поворачиваем руку с винтовкой по часовой стрелке, но не перпендикулярно земле, а оставляем ее всеравно немного наклоненой (Bone01). Правую руку (Bone04) отводим в правую сторону и выпрямляем кисть (Bone_Righthand).
Ставим кифрейм. Боец почти вернул руку на цевье и выпрямил винтовку.
Переходим на последний 88 кадр. Последний кифрейм делается следующим образом: Двигаем слайдер кифреймера на первый кифрейм, копируем его (Animate -> Copy Keyframes), двигаем слайдер на последний 88 фрейм, вставляем сюда скопированный первый кифрейм (Animate -> Past Keyframes) и устанавливаем в этом последнем фрейме кифрейм (Animate -> Set Keyframe).
Все боец выпрямил винтовку и положил руку на цевье. Анимация готова. Сохраняем. Либо экспортируем в SMD. (File -> Export -> Half-Life SMD...) Выбираем наш reload.smd и в появившемся окне "SMD Export" выбираем пункт "Sequence".
Тем самым говорим милкшейпу, что мы хотим сохранить анимацию, а не файл со скелетом (саму модель). После того как анимация сохранена, необходимо ее исправить вручную, из-за ошибки в программе Милкшейп 1.7.0 возникает ошибка при компиляции. На момент написания статьи никакими средствами Милкшейпа эту ошибку мне устранить не удалось, надеюсь автор исправит ее в будущих версиях программы. Открываем наш файл анимации (reload.smd) в любом тестовом редакторе. Ищем в нем строку "time 1", без кавычек и заменяем ее на time 0, далее ищем time 2 и меняем на time 1, time 3 на time 2 и так далее пока не поменяете все строки с time. Нужно чтобы первая строка была time 0, а не time 1, так что если у Вас первая найденная строка - time 0, то ничего менять не нужно. Сохраняем. Все можно компилировать.
Автор статьи: Gh0St