Предисловие.
Я уже говорил о том как добавить 3D модель в Zdoom, в уроке MODELDEF — заменяем спрайты на 3D модели.
Однако, что если мы хотим сделать скелетную анимацию персонажа (как это делается во всех нормальных играх)? На помощь приходит Milkshape. Установите его, он нам понадобится.

Подготавливаем 3D модель.
Сначала, выставите Window->Show Viewport Caption (отображает сторону вьюпорта)

Создайте кубик, для этого, выберите Box, в графе Model, и нарисуйте его.

Создайте кость . Для этого, выберите Joint и кликните внутри кубика.
Вообще это не кость, это Joint, а кость образуется из 2-х Joint’ов. Но я подумал, что так проще запомнить.

Далее, выделите меш, это делается путем выделения группы. Мы выделяем, что-бы потом, привязать кость к модели.

В графе Joints, нажмите Asign. Теперь, кость привязана к модели. Рекомендую выставить те же галочки, что и у меня.

Выделите кость. Модель загорится красным.

Нажмите Anim, что-бы перейти в режим создания анимации.

Анимируем модель.
Давайте, сделаем анимацию поворота кубика.
Поверните кость, модель повернется вслед за ней.

Добавим кадр в анимацию, для этого в графе Animate->Set Keyframe установите ключевой кадр.

При наведении на поля, пишется что они значат, но для тех кто не знает английский, переведу. Идти по полям буду, слева-направо.

- начальный кадр
- текущий кадр
- последний кадр
- количество кадров анимации
Что-бы проиграть анимацию, нажмите >

Анимация будет проигрываться в последнем выделенном вьюпорте.

Далее, перемещайтесь по временной шкале, крутите кубик, и устанавливайте ключевые кадры. Для данного примера, сделайте анимацию в 10 кадров, с поворотом кубика на 360 градусов.
Теперь, добавим текстуру к нашему кубику.
Текстурирование кубика.
В графе Materials нажмите New, что-бы создать новый материал.

И задайте текстуру, данному материалу.

Материал готов, осталось его применить к модели. Выделите модель, она выделяется в режиме Group.

Вернитесь к графе Materials, и нажмите Assign.

Управляем наложением текстуры.
По желанию, вы можете указать, каким образом текстура будет накладываться на модель.
Откройте Window->Texture Coordinate Editor

И нажмите Remap

Теперь, соотносите модель с текстурой как вам вздумается. Интерфейс здесь почти такой же, как в 3D режиме.

Экспорт модели
Хорошо, модель создали, текстуру наложили, анимацию сделали, осталось экспортировать md3. Но, сначала, нужно сгенерировать файл, без него экспорт невозможен.

Теперь, экспортируйте модель в md3, в ту же папку.

Модель получили, теперь перенесем её в ZDoom.
Импорт модели в ZDoom.
Скачайте файл проекта с MEGA. Здесь используется другая модель, но суть та же.
Откройте 3dmodel.pk3 в Slade. И что мы видим.
ACTOR testObj 15000
{
Height 56
+NOGRAVITY
+NOBLOCKMAP
+SOLID
States
{
Spawn:
MDLA ABCDEFGHIJ 4
Loop
}
}
В Decorate, создан актор, в котором циклично проигрываются 10 кадров анимации (от A до J). Эти кадры мы будем соотносить с кадрами анимации md3 модели, делать это будем в MODELDEF, откройте его.
Model testObj
{
Path "models"
Model 0 "tutor.md3"
Skin 0 "test.png"
Scale 2.0 2.0 2.5
USEACTORPITCH
USEACTORROLL
Данный код я разбирал здесь MODELDEF — заменяем спрайты на 3D модели, поэтому пропустим.
FrameIndex MDLA A 0 0
FrameIndex MDLA B 0 1
FrameIndex MDLA C 0 2
FrameIndex MDLA D 0 3
FrameIndex MDLA E 0 4
FrameIndex MDLA F 0 5
FrameIndex MDLA G 0 6
FrameIndex MDLA H 0 7
FrameIndex MDLA I 0 8
FrameIndex MDLA J 0 9
FrameIndex MDLA K 0 10
Здесь идет соотношение спрайтов с кадрами 3d анимации.
Т.е. спрайт MDLAA0 заменяется на 0 кадр в 3d анимации. А MDLAK0 заменяется на 10-ый кадр md3 анимации. Подробнее про MODELDEF, вы можете прочитать на вики. Еще заметьте, что спрайты MDLA, не существуют, что удобно, т.к. не нужно создавать placeholder‘ы.
Вот так и создается 3D анимация в ZDoom.

Усложним пример, добавим вместо 1 Joint’а — 2. Привяжем их к мешу (модели), и анимируем их обоих.

Получился неплохой результат. Данный пример, реализован в 3dmodel.pk3.