Форум

Уведомления
Очистить все

[3d] Скелетная анимация и с чем ее едят [Tutorial + FAQ] [3ds Max]

 
Джеки Чан
Известный участник Модератор Гильдия переводчиков

Скелетная анимация и с чем ее едят...

Добавляю новую анимацию в свой мод. Решил выложить в народ небольшой туториал.
Для создания анимации нам понадобиться:
1. OpenBRF
2. 3ds Max (я использую версию 2010)
3. Плагин для 3ds Max, позволяющий импортировать/экспортировать файлы формата .smd
Для добавления анимации в игру:
1. OpenBRF
2. Warband Module System (я использую, последнюю на данный момент версию, 1.134)


Для начала мы должны вытащить скелет из игры. Заходим в openBRF и открываем файл skeletons.brf, находящийся в папке CommonRes, корневой папки игры.

В архиве находиться скелет и анимация. Нажимаем правой кнопкой мыши на скелет --> Export (nude) Skeleton. Сохраняем в удобное место. Заходим в 3ds Max и импортируем наш скелет. Кнопка с логотипом Autodesk --> Import

Теперь можно приступать к созданию анимации. Я не стал утруждаться и решил для туторила создать простенькую анимацию подъема рук. В конце туториала выложу небольшое FAQ про конкретные действия создания анимации.
Для начала нужно выбрать количество кадров и времени на анимацию. Я решил взять стандартное fps и 30 кадров для анимации. Нажимаем на кнопку с часиками внизу экрана (обратите внимание на настройки).

Начнем создавать анимацию. Принцип создания скелетной анимации довольно прост. Нужно назначить ключи или ключевые положения для скелета. Программа автоматически создаст плавный переход между ключами. Есть два режима работы с анимацией: Auto Key и Set Key.

Auto Key автоматически выставляет ключи при изменение положения скелета. Set Key будет ждать, пока вы не нажмете на кнопку с ключом (слева от кнопок с режимами), в противном случае при передвижении шкалы кадров скелет вернется в привычное положение.
Так как нам нужна точная и качественная анимация, мы будет работать в режиме Set Key.
Для начала нужно поставить скелет в первоначальную позицию. Для этого просто нужно покрутить кости. Так как кости связанны друг с другом, движение одной кости повлечет движение других. Выделяем нужную кость, нажимаем правую кнопку мыши --> Rotate.

Добиваемся нужного положения костей.

Теперь переходим в режим редактирования Set Key, жмем кнопку.

Теперь выделяем все кости и жмем на кнопку с ключом. У нас есть первая позиция. Далее переводим шкалу кадров на следующую позицию, я выбрал 10 кадров.

Далее передвигаем кости в следующую позицию. И опять выделяем все кости и нажимаем кнопку с ключом.

Так же выставляем следующие ключевые позиции. Если анимация будет повторяющейся, например ходьба, то первый и последний кадр должны совпадать.
В итоге получаем плавную анимацию. Мне понадобилось четыре ключевые позиции. При нажатии на кнопку Play Animation анимация должна воспроизводится правильно.

Можно сохранять и импортировать в игру. Кнопка с логотипом Autodesk --> Export. Сохраняем в формате .smd в удобном для вас месте. В настройках нужно указать Export Sequence SMD.

Открываем openBRF и экспортируем туда новую анимацию Import --> Skeletal animation.

Сохраняем новый .brf архив в папке Resource, корневой папки нашего мода. Теперь прописываем .brf архив в module.ini

load_mod_resource = имя_архива

Сейчас нужно проверить нашу анимацию в игре. Для этого нужно создать тестовый вариант для отладки. Сперва-наперво нужно прописать анимацию в module_animations.py. Открываем файл и заменяем строки:

["unused_human_anim_14", 0, 0, [1.0, "anim_human", 0, 1, 0]],

...на следующие(пример для отладки, скопировал и изменил анимацию jump):

["имя_анимации", acf_enforce_lowerbody, amf_priority_jump|amf_play|amf_client_prediction, [1.0, "Имя_анимации_в_архиве", 22, 46, arf_blend_in_1],],
 ],

Теперь нужно присвоить проигрыш анимации какой-либо кнопке. В этом нам поможет module_mission_templates.py.
Редактируем файл. Перед строчками

tournament_triggers = [

Вставляем следующие

some_anim = (0, 0, 0, [(key_is_down, key_z)],
[
   (get_player_agent_no,":agent_no"),
   (agent_set_animation, ":agent_no", "имя_анимации_в_module_animations.py"),

])

Скрипт при нажатии кнопки "z" (как я уже говорил вариант для отладки) проигрывает нашу новую анимацию. Теперь нужно добавить скрипт в конец каждой миссии, но уже без строчек some_anim = . Список миссий можно найти в файле ID_mission_templates.py. Я добавил в конец миссии (вариант для отладки) mst_town_center. Каждая миссия отвечает за место обработки скрипта, в моем случае скрипт будет проверяться в центре города, то есть в другом месте анимация проигрываться не будет.
Теперь можно собирать модульную систему. Итак, вот что вышло у меня:

FAQ по азам создания анимации.

КАК записать отдельный ключ?

Выделите весь скелет! В режиме autokey 30 кадре я не трогаю кости, а нажму setkey, (НЕ кнопку с такой надписью, а большую квадратную кнопку с иконкой ключа), ключ запишется, а я передвину бегунок в 0. Фигурка вернулась в исходное положение руки в стороны.

Меня это не устраивает. Я опущу ей руки. Ключ перепишется. (мы все еще в режиме autokey, так что аккуратнее) Выходим из режима autokey. Передвигаем бегунок в 30 кадр. Тело принимает последнюю заданную позу.

КАК скопировать позу из другого ключа?

Выделяем все кости. Щелкаем правой кнопкой по бегунку. Вы помните, что у нас был шаг вперед? Снимаем галочку position, оставляем только rotate и scale. В строчке source пишем номер кадра, откуда хотим взять позу, в данном случае 0, и жмем Enter. Тело принимает позу из нулевого кадра. Если вы забудете о галочке position, вас сдернет в те координаты! Аккуратно выбирайте, какой ключ хотите копировать.

КАК добиться правильной анимации?

Анимация начинается сразу, плавно и завершается тоже. Это результат того, что программа генерирует "реалистичный" приход фигуры в позу. Получается, что не успев толком закончить одно движение, она начнет второе. Вот почему вам понадобится вовсе не два ключа, чтобы тело подняло поочередно обе ноги. Вам придется написать промежуточные ключи. Но, записав вначале ключевые позы, вы спокойно проделаете эту работу, аккуратно двигая бегунок, включая и выключая запись, и определяя, на каких этапах вам понадобится ключ. Совершенно очевидно, что скорость анимации слишком высока.

КАК сменить скорость?

Добавим времени. Идем в самую первую иконку с часиками и ставим end time 60. Выделяем ключи двойным кликом и переразмещаем на линейке. 30 на 60, 20 на 40 а 10 на 20. Вы помните, что мы уже несколько абзацев НЕ находимся в режиме autokey?

КАК работать с исправлениями?

Теперь покрутите бегунок. Совсем не то, что вы ожидали. В 30 кадре человек принимает позу, которую физически принять невозможно. Перейдем в 30 кадр, нажмем autokey и и нажмем setkey. Создался ключ. Выходим из режима autokey. Выделяем все кости и как описано выше, копируем позу из 0 кадра.

Вот теперь ноги она поднимает и опускает по очереди и руками машет, как надо. Но вот в начале анимации происходит форменный кавардак! На самом деле, мах ногой начинается одновременно с движением вперед, и шага нет... Исправим это. Переведем бегунок в 15 кадр. Включим автокей и нажмем setkey. И создадим ключик. Выйдем из режима автокей. Выделим весь скелетон. Копируем позу из 20 кадра, ТОЛЬКО position. А потом из нулевого - КРОМЕ position. Тренировка прежде всего!
Проиграем. Смешно, она подплывает туда, как лич. Стоит убрать это перемещение. Зря мы писали 15 кадр...

КАК убрать лишнее движение?

Для этого копируйте в ключи значение position из 0, НЕ переписывая rotation и scale. Теперь дама только машет ногами, но зато возникла пауза в начале. Если движения больше нет, удалите ключ из кадра 15.

КАК удалить ненужный ключ?

Для этого два раза щелкните по нему левой кнопкой и затем правой кнопой и выберите Delete Selected Keys . Ну а теперь, просто расставьте оставшиеся ключи равномерно. Но мы хотим, чтобы она потанцевала подольше, или вовсе не прекращала этого делать, пока мы не скажем.

КАК записать повторяющуюся анимацию?

Чтобы зациклить анимацию, выделим все косточки, и перейдем в curve editor.

Да, а кто говорил, что будет легко? Это вот такая страшноватая, но волшебная вещь.

Находим там Patameter Curve и выставляем: маленькую левую кнопочку под Constant, а правую маленькую кнопочку под Loop - петлю. Анимация зациклена. Попробуйте и другие версии, не стесняйтесь.

ЕСЛИ вы хотите создавать ПОХОДКУ или анимацию с перемещением, выберите правую кнопку под Относительным Повторением (Relative Repeat). Почему? Да потому, что походка перемещает вас относительно начальной координаты. И если вы выберете петлю, вас швырнет в ноль после завершения анимации. А я выбрала петлю, потому, что движок игры перерасчитывает координату локально - 0-30, 0-30...

Ну вот, красотка заправски машет ногами и руками, хоть сейчас в кремлевские курсанты.

Редактор кривых позволит вам установить симметрию движения. Например, заставить правую ногу подниматься так же высоко, как левую. Это имеет смысл как раз в долгом цикле типа походки, там ошибки имеют свойство накапливаться. А вообще, человек не умеет совершать одинаковых движений, и автоматизм только кажущийся, поэтому исправлять симметрию мы в этом жесте не будем. Оставим реализм.

ОтветитьЦитата
Автор темы Размещено : 26.01.2022 11:04

Оставьте ответ

Имя автора

Электронная почта автора

Заголовок *

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять
Политика конфиденциальности