Сообщество Империал: Туториал по анимации Medieval 2: Total War - Моддинг Medieval 2: Total War - Medieval 2: Total War - Библиотека - Сообщество Империал

  • Поиск
  • Законы
  • Сообщество
  • Репутация
  • Экономика
  • Больше

Информация об авторе

  • Автор: Arsonist

Информация по статье

  • Добавлено: 03 Мар 2014, 13:46
  • Просмотры: 430

Дополнительно

Репутация: 0
Туториал по анимации Medieval 2: Total War

Описание: Туториал по анимации Medieval 2: Total War
Туториал по анимации Medieval 2 Total War
Часть 1: Введение в Анимацию.

В первую очередь хочу пояснить базовые понятия структуры MESH / Animation (Модель/Анимация) и их объединения, так как именно этот вопрос чаще всего путает людей при начале работы с анимацией.

Что и где"

Во-первых необходимо понимать: какова структура модели и анимации и как они связанны. В игре используется скелетная структура анимации для того чтобы игровая моделька могла бегать, сражаться, умирать и т.д. Собственно файлы анимации и содержат тот самый скелет, который указывает на нужные перемещения. Файлы MESH содержат геометрию модели. Каждая вершина модели привязана к кости таким образом, чтобы при изменении положения кости соответственно двигалась и вершина. Каждая вершина может быть привязана более чем к одной косточке, с разными коэффициентами привязки (влияния кости на вертекс) Это позволяет модели двигаться значительно более естественным образом, чем это было в RTW где каждая вершина привязывалась лишь к одной кости.

Теперь важное замечание: ФАЙЛ MESH НЕ СОДЕРЖИТ СКЕЛЕТА.

Не забывайте этого. Когда вы создаёте модель в MS3D вы видите скелет и осуществляете привязку вершин к нему" Вы спросите и чтоже" Получается MESH содержит скелет" Нет! Просто это делает импортёр моделей когда осуществляется конвертация MESH в MS3D, для того чтобы вы могли осуществлять привязку к костям.
Для работы с этим важно понимать какова связь между MESH и CAS файлами анимации, чтобы итоговый результат правильно работал.

Итак, резюмируем:

  • MESH - файл геометрии, содержащий так же результаты скининга (привязки)
  • CAS - файл анимации, содержащий сам скелет и информацию о вращении/перемещении костей.

Двигайте костью в анимации и MESH будет двигаться так же. Привяжите вершину к нескольким костям и движения будут более естественными, как настоящая кожа.

Изображение различных частей MESH и CAS файлов:

Итак прослеживаем путь перемещения вершины 3 (это всего лишь индекс). Первая кость к которой она привязана - кость 6, в данном случае bone_head (другими пренебрежём). Это собственно вся инфа из MESH файла. Остальное содержится в соответствующем файле CAS. В частности тут присутствует кватерион вращения 1824 и значение позиции 7448. Данный механизм используется игрой для перемещения данной вершины. Следующая нужная информация обозначена зелёным: она необходима для постоения иерархии самого скелета и CAS файла. Вернёмся к этому после рассмотрения CAS файла преобразованного в txt.

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

Часть 2. Инструменты, необходимые для открытия анимации.

Итак, прежде всего нам необходима последняя версия комплекта KnightErrant"s GOAT toolbox. Так же необходима прога Milkshape версии 1.8". и выше, с "zero rotations" плаггином. Позже подробней разберём что и для чего.

Так же понадобятся файлы с распакованной анимой, предоставленные Caliban.

Итак, полный список:

  • 1. Последняя версия GOAT
  • 2. Python framework (до версии 3) - бесплатная закачка
  • 3. Milkshape 3D с плаггином - небесплатно, но стоит того
  • 4. Блокнот (или эквивалент)
  • 5. Набор распакованной анимации
  • 6. Этот гайд.

CAS файлы

Для того чтобы рассматривать файлы CAS сначала мы должны перевести их в приемлимый формат. Это возможно при помощи проги камрада KnightErrant . Используя GOAT вы можете преобразовать файл CAS в текстовый формат и изменять его содерживое. В файлах CAS содержится так же интересная информация, типа места привязки всадника к лошади, информация о классах ездовых животных. То есть если игра будет идентифицировать модель как слона её будут доступны свойства слона.
Смотрим содержимое файла анимации:

Первая строка выглядит примерно так:
3.210000 38 9 0 2.20000004768 1 0 104 104 104 1 0 104 104 104

Первое значение (обозначено красным) это номер версии анимации. Работая с файлами я обнаружил старые версии, но они не работают в игре корректно. Были проведены изменения в формате.

Пятое число (синее) это продолжительность анимации в секундах. В данном случае анимация бега занимает 2.2 секунды. Продолжительность одного фрейма (кадра) около 0.05 секунд (44кадра X 0.05 + начальный кадр).
Заключительная часть (зелёная) - часть заголовка, указывающего на принадлежность анимации определённому типу модели (человек, лошадь, слон"). Необходима и последующая часть заголовка но и с имеющимся можно делать некоторые интересные вещи.

Следующая линия выглядит примерно так:
30749 0

Число обозначенное красным - размер фрагмента анимации. Не уверен в том, на сколько важно это значение при редактировании. Следующее за ним значение всегда 0.

Следующая линия примерно такая:
24 0 0 1 2 3 4 2 6 7 1 9 10 11 12 9 14 9 16 1 18 19 1 21 22

Число, обозначенное красным - общее количество костей модели. Составляется с учётом Scene Root + в данном случае 23 кости. Пределом для костей модели является значение 25. При превышение данного количества будут проблемы в отображении модели. Последующие числа - древо иерархии костей. Первые 2 - всегда ноль. Дальнейшие зависят от положения и вращения костей. GOAT формирует текстовый файл при извлечении скелета, показывающий структуру.

Итак, для большей конкретики быстро сделаем пример человеческого скелета. Если пронумеровать все кости начиная с нулевого базового индекса получим следующее:
  • Bone Bone Name
  • Index Array
  • 0 Scene Root
  • 1 bone_pelvis
  • 2 bone_RThigh
  • 3 bone_Rlowerleg
  • 4 bone_Rfoot
  • 5 bone_abs
  • 6 bone_torso
  • 7 bone_head
  • 8 bone_jaw
  • 9 bone_eyebrow
  • 10 bone_Rclavical
  • 11 bone_Rupperarm
  • 12 bone_Relbow
  • 13 bone_Rhand
  • 14 bone_Lclavical
  • 15 bone_Lupperarm
  • 16 bone_Lelbow
  • 17 bone_Lhand
  • 18 bone_LThigh
  • 19 bone_Llowerleg
  • 20 bone_Lfoot

Теперь поместим древо иерархий и приведём в соответствие с последовательностью названия. Получим следующий список:
  • Bone Bone Name Hierarchy Parent Bone
  • Index Array Array Name Array
  • 0 Scene Root 0 No parent, by convention a 0 goes here
  • 1 bone_pelvis 0 Scene Root
  • 2 bone_RThigh 1 bone_pelvis
  • 3 bone_Rlowerleg 2 bone_RThigh
  • 4 bone_Rfoot 3 bone_Rlowerleg
  • 5 bone_abs 0 bone_pelvis
  • 6 bone_torso 5 bone_abs
  • 7 bone_head 6 bone_torso
  • 8 bone_jaw 7 bone_head
  • 9 bone_eyebrow 7 bone_head
  • 10 bone_Rclavical 6 bone_torso
  • 11 bone_Rupperarm 10 bone_Rclavical
  • 12 bone_Relbow 11 bone_Rupperarm
  • 13 bone_Rhand 12 bone_Relbow
  • 14 bone_Lclavical 6 bone_torso
  • 15 bone_Lupperarm 14 bone_Lclavical
  • 16 bone_Lelbow 15 bone_Lupperarm
  • 17 bone_Lhand 16 bone_Lelbow
  • 18 bone_LThigh 0 bone_pelvis
  • 19 bone_Llowerleg 18 bone_LThigh
  • 20 bone_Lfoot 19 bone_Llowerleg

Теперь мы можем наблюдать соотношение. Тоже можно проделать и со скелетом слона.

Следующая страница выглядит при мерно так. Я её урезал чтоб не вылезать за границы страницы:
45 0.00000 0.05000 0.10000 0.15000 0.20000 0.25000 0.30000 0.35000

Линия фактически показывает шаги времени в каждом кадре. То есть общее число кадров 44 (+ первый) и по 0.05 секунды каждый, начиная с 0.00000 . То есть для ускорения анимации вполне можно изменить нужные значения.

Следующий блок - это часть, определяющая скелет.
Scene Root 0 0 0 16560 0 1 0 
bone_E_platform 45 45 0 16560 0 1 0 
bone_E_back 45 45 720 17100 0 1 0 
bone_E_right back thigh 45 45 1440 17640 0 1 0 
bone_E_right back lower leg 45 45 2160 18180 0 1 0 
bone_E_right back foot 45 45 2880 18720 0 1 0 
bone_E_left back thigh 45 45 3600 19260 0 1 0 
bone_E_left back lower leg 45 45 4320 19800 0 1 0

Это только часть блока, но для понимания достаточно. Первая колонка - название кости. При добавлении/переименовании костей в MS3D тут необходимо вносить изменения. Будьте осторожны и внимательны при этом процессе иначе в случае ошибки игра не сможет правильно осуществить привязку.

Следующая колонка - число кадров для каждой кости. Если нет никаких вращений - значение равно нулю. Иначе оно равно общему числу кадров - 45 в данном случае.

Следующая колонка - позиции кадров. Опять, для Scene Root это ноль, для остальных - 45.

Следующая колонка несколько сложней. Тут указывается регистрация вращения в анимации. Высчитывается по принципу
Кадрx4x4
В нашем случае
45x4x4 - 720


И дальнейшие значения кватерионов вращения.

Четвёртая колонка - значение "погашения", связанна с преведущей и указывает на местонахождение данных позиции.
Расчёт шага по формуле:
Кадрыx4x3
45x4x3 - 540


Эти расчёты очень важны при удалении добавлении элементов и ошибка в них будет означать либо неправильное вращение либо вообще файл CAS небудет конвертироваться назад.

Фактически все последующие данные в файле CAS - это данные вращений и позиций костей. Это не значения в координатах x\y\z\ а в структуре игры, но к счастью KnightErrant так же добавил значения в x\y\z для топоров в MS3D .

Последняя часть данных в файле анимации - нижняя сноска. Она является частью заголовка определяющего анимацию. Я не уверен в значении этих чисел, потому эту часть лучше не трогать во избежание ошибок)

p.s. перевод весьма вольный и в пределах моего понимания

Эта статья впервые опубликована на Сайте Империал 29.09.09.

Copyright © «Империал». Копирование информации с этой страницы возможно только при указании прямых ссылок на эту страницу.




      Стиль:
        06 Дек 2016, 17:17
    © 2016 «Империал». Условия предоставления. Ответственность сторон. Рекрутинг на Империале. Лицензия зарегистрирована на: «Империал». Счётчики