|
| |||
|
| |||
| |
Здравствуйте. Вы находитесь на сайте Unreal Level. Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War. Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология. |
|
Animation Nodes
автор: FACH | 26 Марта 2011 | Просмотров: 4904
Автор: Лаурент Делайен Перевод: LS Оригинал: Animatoin Nodes
Введение
Данный документ содержит описание основных анимационных узлов, которые присутствуют в Unreal Engine 3 и того, как их использовать в AnimTree. Cначала прочтите документ AnimationOverview, так как он дает хорошее представление о системе.
Основные типы узлов смешивания
AnimNodeBlend
Это простой узел смешивания, который объединяет два дочерних ответвления вместе. Вы можете указать желаемое влияние второго ответвления и желаемое время перехода, через функцию SetBlendTarget.
AnimNodeBlenList
Этот узел объединяет некоторое число ответвлений. Вы можете указать, какое ответвление будет иметь полную силу (то есть влияние 1.0) и время перехода, через функцию SetActiveChild.
AnimNodeBlendPerBone
Данный узел похож на AnimNodeBlend, только дает Вам контроль над тем, как два ответвления смешиваются вместе, используя кости. Этот узел действует, как маска или фильтр. Например, первое ответвление контролирует кости ног и второе соответственно верхнюю часть тела. BranchStartBoneName массив содержит в себе названия костей, дочерние от которых Вы хотите скрыть от первого ответвления и применить к ним второе ответвление. Т.е. для приведенного выше примера в массив необходимо внести кость Spine1 и к верхней части тела будет применено второе ответвление.
AnimNodeAdditiveBlending
Этот узел объединяет аддитивные данные, поступающие из аддитивной анимации, или смешивает аддитивные анимации в единый источник ввода. Этот узел является довольно простым.
- bPassThroughWhenNotRendered – если аддитивная анимация не является критической, то она может быть пропущена, если мешь не отображается для оптимизации.
Аддитивные анимации также могут проигрываться с помощью AnimNodeSlot узла.
AnimNodeBlendDirectional
Данный узел объединяет четыре дочерних узла, представляющие из себя анимации движения вперед, назад, вправо и влево. Данный узел смешивает анимации вместе на основе скорости и направления движения актера.
AnimNodeBlendByProperty
Данный узел по умолчанию смешивает два узла, но может и больше, если необходимо. Он ищет по имени переменную актера владельца следующих типов: bool, float, int, byte, и устанавливает значение узла в зависимости от значения этой переменной. Bool и float ограничены двумя ответвлениями (float будет выступать в качестве AnimNodeBlend в заданном диапазоне). Int и Byte будут запускать ответвление соответствующего индекса. Данный узел очень полезен для быстрого прототипирования.
Синхронизация (AnimNodeSynch)
Примечание(2.21.2007): узел AnimNodeSynch является устаревшим и заменен системой AnimGroup в корневом узле AnimTree. AnimNodeSynch продолжает быть функциональным, но его поддержка будет прекращена, так что рекомендуем перейти к новой системе.
Aiming Nodes
В UE3 также присутствует несколько узлов для решения проблемы прицеливания персонажа. Этот метод может быть также применен к другим ситуациям, например для контролирования поворота головы или поворота на месте.
Обзор
В игре Вам может понадобиться, чтобы оружие, которое держит персонаж, было направлено туда, куда целиться персонаж. Актер пешки определяется цилиндром коллизии, который вращается только вправо и лево, но не вверх и вниз. Вы, возможно, также захотите, чтобы ноги персонажа оставались на месте, при небольшом повороте корпуса тела во время прицеливания. Изображение внизу разъяснит проблему.
Красная стрелка показывает вращение актера, представленного красным боксом коллизии. Зеленная стрелка показывает, куда целиться игрок. Мы можем определить прицельное направление, как относительное вращение от базового вращения актера. Для этого предназначен узел “AimOffset”.
AnimNodeAimOffset
В качестве входа данный узел берет нейтральную анимацию. Под «нейтральной» иметься в виду, анимация без прицельного смещения: «оружие направлено вперед». Этот узел может изменить положение нескольких костей. Добавляя комбинацию вращательного и переместительного смещения. Данные смещения определяются для 9 поз (Center, Up, Down, RightCenter, RightUp, RightDown, LeftCenter, LeftUp and LeftDown) и смешиваются, использую билинейную интерполяцию. Это позволяет формировать мешь для любого направления, которое будет использоваться для таких вещей, вроде прицеливания или поворота головы. Локальное вращение кости не воздействует на результат прицеливания. Поэтому, если у Вашего персонажа иметься анимация бега, с движением рук, прицеливание все равно будет работать.
Обзор
![]()
Выше Вы можете видеть очень простые настройки данного узла. В области #1 показан сам узел. Двойной щелчок мыши по этой области откроет AnimOffset редактор (область #3), который используется для настройки 9 поз. В области #2 имеется ползунок для просмотра результата смещения в реальном времени в области просмотра.
![]()
На изображении выше Вы можете увидеть 9 определенных направлений. Узел использует нормированную относительную цель смещения, для определения какую позу использовать. Диапазон по X,Y: от [-1,-1] до [1,1]. Так значение [0,0] будет означать CenterCenter, [1,0] – RightCenter, и [0.5,0] – будет промежуточным между CenterCenter и RightCenter.
Использование AnimOffset редактора
При использовании редактора, первое, что нужно сделать, это создать новый профиль. В разделе профиль нажмите кнопку “New” и введите названия для нового профиля. Вы можете добавить несколько профилей для каждого узла, а также удалять их. На панели инструментов обратите внимание на иконки «Открыть» и «Сохранить», это позволяет импортировать и сохранять профили.
Следующий шаг, это выбор, на какие кости будет распространяться влияние узла. Это можно сделать с помощью кнопки “Add Bone”. Выбранные кости отображаются в порядке возрастания с индексом и названием.
После того, как кости были выбраны, для каждой из них Вы можете редактировать смещение для всех 9 позиций. Кости выбираются путем нажатия на их имена в графе Bones. Поза (или Направление прицеливания) выбираются нажатием на соответствующую кнопку в группе Aim Direction.
В верхней части редактора присутствует панель инструментов, позволяющая выбрать между перемещением кости или ее вращением. Переключение между ними отображается появлением соответствующего виджета в окне просмотра в реальном времени для интерактивного редактирования. Флажок “World Space Widget” осуществляет переключение между локальным и мировым пространствами для редактирования.
Запекание смещения из анимации
Вместо изменения смещения вручную, Вы также можете извлечь смещение из анимации. Для этого перейдите к свойствам узла, раскройте вкладку “Profile”, выберите номер профиля, который Вы хотите изменить и найдете несколько переменных имен Anim Name_XX, где XX соответствует всем 9 направлениям. Вставьте в поля имена анимации, которые хотите использовать и включите свойство bBakeFromAnimations. Вам не нужно назначать анимации для всех девяти поз, но необходимо, по крайней мере, AnimName_CC (CenterCenter), так как это ключевая поза, использующаяся для извлечения смещений. Когда bBakeFromAnimation включена, узел начнет извлекать смещения на основе разницы между XX позой и ключевой позой CC.
AnimNodeAimOffset параметры
- Aim – нормирование прицельного смещения. - HorizontalRange – размер горизонтальных границ. - VerticalRange – размер вертикальных границ. - bForceAimDir - если принимает истинное значение, то узел использует принудительную позу. - ForcedAimDir – принудительная поза.
Использование узла в игре
В использовании этого узла потребуется помощь программиста. Вам также нужно иметь ссылки на каждый узел в коде, и иметь модификатор параметра направления цели Пешки, или сделать свой подкласс узла. Первое решение не является гибким, так как придется иметь дело с кодом каждый раз при добавлении узлов. Также узлы, на которые ссылается код, необходимо будет чистить, иначе они будут накапливать мусор. Наиболее практичным решением является расширение узла. Переопределите GetAim() функцию, чтобы прочитать нормализованное значение направления цели из пользовательского класса Пешки и все вышеуказанные проблемы будут решены.
Кроме того, узел будет сохранен вместе с последним редактируемым профилем. Переключение между профилями во время игры реализуется с помощью следующей функции из скрипта: SetActiveProfileByName() или SetActiveProfileByIndex() из C++ кода.
Вопрос выравнивания оружия (FK vs. IK)
Анимационное дерево смешивает анимации используя Forward Kinematics (FK) и это вызывает проблемы с интерполяцией, где расположение костей имеет важное значение. И, к сожалению, случай с прицеливанием оружия именно тот случай. Ниже на рисунке показана разница между интерполяцией прямой и обратной кинематики, это необходимо, чтобы понять суть проблемы.
При смешивании двух анимаций используя FK, вращение костей интерполируется. В случае с прицеливанием оружия в результате мы имеем разрегулированные обе руки. Есть несколько способов обойти эту проблему, но большинство из них не эффективны и не дают необходимого эффекта. Таким образом, лучше всего использовать обратную кинематику (IK).
Для повышения производительности узел не поддерживает встроенные IK опции, так как это довольно «дороговато» для каждого отдельного узла. Однако можно решить данную проблему с помощью специфической скелетной иерархии. Может быть создана IK-кость (прямым потомком корневой кости) и перемещаться она будет только вместе с корнем, тем самым удерживать позиции рук рядом кадр за кадром. Теперь, когда разные анимации будут смешиваться, руки по умолчанию будут использовать FK смешивание (при использовании вращения), а IK-кость – IK смешивание (при использовании перемещения). При использовании SkelControlLimb и запуская его по вызову, можно переключаться между FK и IK по своему желанию. Контролер кости использует что-то вроде эффекта пост обработки, обрабатываясь только один раз, а не для каждого Aim узла в дереве.
AnimNodeBlendbyAim
На 7 ноября 2006 года (список изменений #149232) этот узел является устаревшим. Пожалуйста, используйте вместо него AnimNodeSequenceBlendByAim. Он обладает точно той же функциональностью и использует всего один узел, вместо пяти.
AnimNodeSequenceBlendByAim
(Требуется как минимум изменения #14232)
Данный узел работает по той же идеи, что AnimNodeAimOffset, но вместо того, чтобы брать одну анимацию и изменять ее для девяти поз, он принимает непосредственно девять различных анимаций и смешивает их вместе. Остальное в основном то же самое.
- Aim – нормализованная цель смещения. - HorizontalRange – размер горизонтальных границ. - VerticalRange – размер вертикальных границ. - AnimName_** - анимация, используемая для позы.
AnimNodeSequenceBlendByAim VS AnimNodeAimOffset
Узел AnimNodeAimOffset основан на изменении входных анимаций за счет смещений. Эти смещения могут быть запечены в анимации или делаться вручную (или сочетанием того и другого). AnimNodeSequenceBlendByAim - просто смесь девяти анимаций. AnimNodeSequenceBlendbyAim занимает меньше процессорного времени, так как это просто выполнение смешивания, AnimNodeAimOffset устроен немного сложнее. Но AnimNodeAimOffset может работать на удивление хорошо с разными входными анимациями. Так, например, вместо двух AnimNodeSequenceBlendByAim узлов, один из которых будет использоваться для idle-анимации, а другой для анимации стрельбы, Вы можете использовать только один AnimNodeAimOffset и две анимации входа: idle и firing. Это сокращает количество анимаций с 18 до 2!! Это простой пример и есть еще немного больше нюансов, но этого вполне достаточно, чтобы осознать преимущества и недостатки обоих узлов. Воспроизведение анимации по запросу
Воспроизведение анимации по запросу из кода означает, что дерево может быть уменьшено, так как нет необходимости иметь для каждой отдельно взятой анимации собственного узла. Их можно распределить по функциональному назначению. Например, создать узел анимации для всего тела (для таких анимаций, как прыжок) или только для верхней его части (для таких анимаций, как перезарядка оружия).
AnimNodeSlot
Данный узел рассматривается также здесь: MateneeAnimControlTrack для использования в Matinee.
В основном этот узел создает «слот», который позволяет Matinee или коду переопределить вход с одной или несколькими анимациями. Этим узлом также можно управлять с помощью кода скриптов и/или С++. Для получения списка функций просмотрите скриптовый код узла.
Цель данного узла – проигрывать анимацию по запросу, которая не обязательно должна быть в анимационном дереве. Лучшим примером являются одиночные анимации, запускаемые кодом (idle break, специальные движения, melee атаки, смерти). Это позволяет сохранить дерево в разумных размерах и использовать любое количество одиночных уникальных анимаций.
AnimNodeSlot может обрабатывать аддитивные анимации. По умолчанию узел добавляет аддитивную анимацию во входной источник. Но он также может обрабатывать аддитивную анимацию, как обычные анимационные данные и выполнять переключение (если у Вас все подветви узла в дереве имеют дело только с аддитивными анимациями). Для данного поведения установите значение true для свойства bAdditiveAnimationsOverrideSource. #1 написал: Artmancarver 30 Марта 2011 18:21 | ICQ: Не Указано |
Информация
Посетители, находящиеся в группе Гости, не могут оставлять Комментарии в данной новости...
|
|
|
При копировании материалов, активная ссылка на UNREAL-LEVEL.RU обязательна! © 2008—2012, UNREAL-LEVEL.RU. Все права защищены. |