Анимации (Animations)
Модификация системы анимации
Экспорт анимации для Bannerlord
Настройки анимации по умолчанию
- Частота кадров: 30 кадров в секунду (оптимальная) или 60 кадров в секунду
- Скелет гуманоида или существа (Rig, прим. перевод - оснастка)
- Максимальное количество поддерживаемых костей: 64
- Кости, которые не используются, должны содержать «_notused» в конце строки. Также корневая кость (самая высокая кость в иерархии) должна содержать это только для анимации.
Настройки экспорта FBX (Autodesk Maya)
Эти настройки применяются к Maya. Программное обеспечение аналогичного типа может содержать такие же настройки. Когда мы экспортируем новую оснастку в первый раз, экспортированный файл FBX должен содержать скелет и меш.
Первоначальная настройка (Скелет + меш)
Экспорт только настроек анимации
Мы обязательно отключили параметры, связанные с мешем и скином, перед экспортом анимации. Использовать название сцены (Use scene name) очень важно проверять при экспорте как для анимации, так и для оснастки. Также убедитесь, что корневая кость содержит «_notused» в конце строки.
Мы следим за тем, чтобы не отправлять какие-либо Ограничения и определения скелетов (Constraints and Skeleton Definitions). Параметры Constraints (ограничения), Connections (соединения) and Unit (единица) должны быть установлены, как показано на рисунке ниже. Наш движок также использует букву «Z» как верхнюю ось.
Определение новых анимаций
После экспорта вашей анимации, чтобы ссылаться на нее в игре, вам необходимо добавить новые анимационные клипы из браузера ресурсов, которые ссылаются на эту анимацию. Для этого вы должны использовать кнопку «Анимационный клип» (Animation Clip) внутри родительской сборки «Создать» (Create). Наиболее важными свойствами этих клипов являются:
- id: ID (уникальное имя) анимационного клипа, который будет использоваться в других системах
- source1: начальный ключевой кадр анимационного клипа.
- source2: конечный ключевой кадр анимационного клипа.
- anim_data_name: ресурс исходной анимации, который был импортирован в движок для этого клипа.
- duration: продолжительность этого анимационного клипа в секундах.
Типичная анимация также содержит некоторые необязательные атрибуты. Самый распространенный - blend_in_period, который устанавливает продолжительность смешивания с существующей анимацией и достижения 100% веса. blend_out_period - противоположность этому смешиванию, но у него есть важное отличие. Смешивание фактически означает, что анимация заканчивается раньше, чем заданная продолжительность, а остальная часть анимации будет использоваться только для смешивания с другой анимацией. Но продолжительность смешивания устанавливается только blend_in_period. Наличие более длинного blend_out_period, чем blend_in_period следующей анимации, не увеличивает длительность смешивания. Это просто помогает смешению выглядеть более гладким, поскольку во время этого смешивания, если обе анимации воспроизводятся одновременно, это выглядит визуально более привлекательно. Анимация с 0 blend_out_period просто приостанавливается во время перехода к следующей анимации.
У анимации есть еще несколько дополнительных атрибутов:
- priority: Приоритет просто разрешает/запрещает воспроизведение анимации в качестве прерывания во время выполнения другой анимации. Анимации с более высоким приоритетом воспроизводятся с более низким или равным приоритетом как прерывания.
- param1, param2, param3: Параметры используются в случаях, когда движку требуются дополнительные данные. Они могут иметь совершенно разные значения.
- sound_code: проигрывает звук при воспроизведении анимации.
- step_points: это точки шага для звука.
- voice_code: проигрывает голос при воспроизведении анимации.
- facial_anim_id: преобразовывает лицо в это при воспроизведении анимации.
- left_hand_pose, right_hand_pose: преобразовывают руки в их значения при воспроизведении анимации.
- Combat_parameter_id: это дает дополнительный набор информации для двигателя (см. combat_parameters.xml)
- blends_with_action: этот атрибут ссылается на другое действие (предупреждение: действие, а не анимацию) для смешивания анимации. Это действительно только тогда, когда движок требует смешивания двух анимаций (например, блокировка щита вверх/вниз, колебания оружия, требующие сбалансированной и несбалансированной версии и т.д.).
- continue_to_action: этот атрибут вызывает другое действие (предупреждение: действие, а не анимацию), которое должно быть воспроизведено вскоре после завершения этой анимации. Анимация считается завершенной всегда, когда достигается длительность (blend_out_period).
- disable_agent_agent_collisions: отключает столкновения между агентами.
- ignore_all_collisions: отключает все столкновения.
- Ignore_static_body_collisions: отключает столкновения со статическими телами.
- use_last_step_point_as_dаta: точка 4-го шага считается данными, а не точкой звука.
- make_bodyfall_sound: создает звук падения, когда тело касается земли.
- client_prediction: предотвращает отправку анимации по сети.
- keep: не завершает анимацию по окончании и вместо этого сохраняет ее как приостановленную.
- restart: заставляет анимацию запускаться с самого начала, если эта же анимация уже воспроизводится этим скелетом.
- client_owner_prediction: предотвращает отправку анимации по сети только для агентов, которые контролируются этим клиентом.
- make_walk_sound: проигрывает жестко запрограммированные звуки ходьбы.
- disable_hand_ik: предотвращает применение обратной кинематики руки во время анимации.
- blends_according_to_look_slope: позволяет смешивать анимацию с другой анимацией в соответствии с наклоном взгляда, при этом эта анимация направлена вниз.
- synch_with_horse: воспроизводит анимацию без использования ее исходной продолжительности, вместо этого она соответствует прогрессу с анимацией маунта.
- use_left_hand_during_attack: позволяет боевой системе проверять левую руку как коллайдер во время атаки.
- lock_camera: запрещает игрокам управлять камерой во время этой анимации.
- lock_movement: предотвращает перемещение агентов во время этой анимации.
- synch_with_movement: воспроизводит анимацию без использования ее исходной продолжительности, вместо этого она совпадает с прогрессом с анимацией движения агента.
- enable_hand_spring_ik: позволяет применить к рукам пружинную обратную кинематику для приложения к ним сил движения нижней части тела.
- enable_hand_blend_ik: позволяет инверсной кинематике пытаться немного удерживать руки в исходном положении, когда эта анимация начинается путем смешивания исходной позиции и позиции анимации.
- synch_with_ladder_movement: воспроизводит анимацию без использования ее первоначальной продолжительности, вместо этого она соответствует прогрессу с перемещением агента по лестнице.
- do_not_keep_track_of_sound: запрещает движку удерживать ссылку на звук при его воспроизведении.
- reset_camera_height: уменьшает дополнительную высоту камеры для этой анимации.
- disable_auto_increment_progress: предотвращает воспроизведение анимации и вместо этого приостанавливает ее при текущем прогрессе. Прогресс может быть установлен вручную из кода.
- enforce_lowerbody: предотвращает воспроизведение предыдущего канала и анимации движения во время этой анимации.
- enforce_all: действительно только для канала 0. Запрещает воспроизведение анимации канала 1 и движения во время этой анимации.
- cyclic: анимация повторяется и никогда не заканчивается.
- enforce_root_rotation: вращение живота (корня) берется из этой анимации вместо предыдущего канала или анимации движения для внутренних вычислений.
- allow_head_movement: позволяет голове агента двигаться в соответствии с направлением взгляда.
- disable_foot_ik: отключает обратную кинематику стопы для этой анимации.
- effect_by_movement: позволяет добавлять анимацию суммирования движения поверх этой анимации, чтобы улучшить ощущение дрожи.
- update_bounding_volume: отключает оптимизацию ограничивающего прямоугольника, следует использовать, когда агент выходит за свои обычные границы с этой анимацией.
- align_with_ground: выравнивает фрейм агента с землей во время этой анимации.
- ignore_slope: предотвращает выравнивание четвероногих агентов по земле во время этой анимации.
- displace_position: обновляет положение агента в мире во время анимации, используя данные смещения.
- enable_left_hand_ik: заставляет левую руку оставаться на целевом кадре этой анимации даже во время смешивания с другими анимациями с использованием обратной кинематики.
- ignore_scale_on_root_position: позволяет положению живота (корня) оставаться в том же положении с исходной шкалой, что позволяет агентам лучше взаимодействовать с объектами.
- randomization_weight: рандомизирует анимацию внутри альтернативной группы с этим значением. Более высокое значение позволяет чаще выбирать анимацию.
Изменение/добавление новых действий
Анимации агента сопоставляются с наборами действий как действия. Чтобы установить новую анимацию для существующего действия, сначала вам нужно определить новый анимационный клип через браузер ресурсов. Анимационные клипы определяют время начала и окончания анимации, частоту кадров и различные свойства. Затем вам нужно отобразить его в action_sets.xml для определенного набора действий. Если необходимо создать новое действие, сначала вам нужно добавить его как новую строку в action_types.xml, а затем проделать те же шаги, что и выше.
Неагентные анимации не отображаются как действия. Для них вам просто нужно добавить клипы анимации через браузер ресурсов, а затем начать использовать их в коде.
У каждого действия есть несколько атрибутов. Эти атрибуты жестко запрограммированы, чтобы движок мог понимать определенные свойства действия. Атрибуты:
тип (по умолчанию: actt_other):
- actt_other,
- actt_defend_fist,
- actt_defend_shield,
- actt_defend_forward_2h,
- actt_defend_up_2h,
- actt_defend_right_2h,
- actt_defend_left_2h,
- actt_defend_forward_1h,
- actt_defend_up_1h,
- actt_defend_right_1h,
- actt_defend_left_1h,
- actt_defend_forward_staff,
- actt_defend_up_staff,
- actt_defend_right_staff,
- actt_defend_left_staff,
- actt_ready_ranged,
- actt_release_ranged,
- actt_release_throwing,
- actt_reload,
- actt_ready_melee,
- actt_release_melee,
- actt_parried_melee,
- actt_blocked_melee,
- actt_fall,
- actt_jump_start,
- actt_jump,
- actt_jump_end,
- actt_jump_end_hard,
- actt_kick,
- actt_weapon_bash,
- actt_passive_usage,
- actt_equip_unequip,
- actt_idle,
- actt_guard,
- actt_mount,
- actt_dismount,
- actt_dash,
- actt_mount_quick_stop,
- actt_hit_object,
- actt_sit,
- actt_sit_on_the_floor,
- actt_ladder_raise,
- actt_ladder_raise_end,
- actt_rear,
- actt_strike_light,
- actt_strike_medium,
- actt_strike_heavy,
- actt_strike_knock_back,
- actt_mount_strike
- ud_attack_up,
- ud_attack_down,
- ud_attack_left,
- ud_attack_right,
- ud_defend_up,
- ud_defend_down,
- ud_defend_left,
- ud_defend_right,
- ud_defend_any,
- ud_attack_any
- as_attack_ready,
- as_attack_quick_ready,
- as_attack_release,
- as_reload_phase_1,
- as_reload_phase_2,
- as_defend,
- as_defend_parry
Использовать измененные действия довольно просто, вам просто нужно изменить действие на отображение анимации в файле action_sets.xml, и этого, вероятно, будет достаточно. Но если вы хотите создать новое действие или создать новое поведение для существующего действия, возможные способы интеграции его в игру:
- Вызов действия из кода: класс Agent имеет для этого необходимые функции. По соображениям производительности не забудьте кэшировать индекс действия с помощью класса ActionIndexCache.
- Использование действия в motion_sets.xml: этот файл содержит два набора: motion_sets и full_movement_sets. Motion_set содержит все анимации, необходимые для движения персонажа во всех направлениях в одной стойке и состоянии. Full_movement_set содержит группу movemen_sets, чтобы удовлетворить все стойки и все состояния: ходьба, бег, ходьба на корточках и бег на корточках с левой и правой стойками. Пожалуйста, имейте в виду, что приседание не имеет левой стойки, и поэтому при использовании некоторых видов оружия во всех случаях используется только правая стойка (например, оружие дальнего боя в Native). full_movement_sets содержат свои условия как атрибуты: left_stance и motion_mode.
- Использование действия в item_usage_sets.xml: отсюда следует указывать новые боевые действия, если они не требуют изменения боевой системы. Отсюда можно настроить действия бездействия, охраны, использования оружия, использования удара для каждого элемента с определенными условиями. В дополнение к этому отсюда также ссылаются на действия, определенные в файле motion_sets.xml. Слишком много условий и атрибутов для usage_sets, чтобы объяснить их здесь, но существующие примеры должны помочь вам понять, как все работает. Одна важная и не такая простая деталь заключается в том, что все определенные здесь способы использования проходят сверху вниз, и используется первое использование, удовлетворяющее условию. Поэтому важно, чтобы в верхней части списка находились варианты использования, которые имеют больше ограничений, а в нижней части - запасные.
- Использование действия в monster_usage_sets.xml: как и item_usage_sets.xml, этот файл содержит возможные действия, которые агенты могут выполнять, в зависимости от типа элемента. Это могут быть удары, прыжки, падения и опоры. Для четвероногих агентов есть еще несколько возможностей: upper_body_movements, передвижения и motion_adders. Этот файл требует более подробного объяснения, но его структура похожа на item_usage_sets.xml, и показанные там примеры не требуют пояснений. Опять же, для всех случаев использования просматриваются сверху, и используется первое использование, которое удовлетворяет условиям. Поскольку условия сильно различаются для разных условий действий, иногда условие может использоваться вне его значения (т.е. значение is_heavy становится условием скорости для четвероногих падений и ударов). И некоторые направления могут не применяться для определенных условий (некоторые действия проверяют 4 направления, некоторые проверяют front_left и front_right вместо front, а некоторые проверяют только поперечные направления: front_left, front_right, back_left и back_right), поэтому рекомендуется поэкспериментировать немного, если вы попытаетесь выйти за рамки того, что дает вам собственный код. Чтобы увидеть все возможные body_parts, пожалуйста, проверьте bone_body_types.xml, который в основном содержит некоторые атрибуты для частей тела, связанных с проверками боевых столкновений.
Комментариев 0
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.