Engine & platform

Гуманоиды-меканимы

ROBERTL / UNITY TECHNOLOGIESContributor
May 26, 2014|16 Мин
Гуманоиды-меканимы
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.

В этом посте рассказывается о технологии, лежащей в основе гуманоидов Mecanim. Как она работает, сильные и слабые стороны, почему были сделаны те или иные решения и, надеюсь, некоторые подсказки о том, как извлечь из нее максимум пользы. Общие сведения о настройке и инструкции см. на сайте Unity Documentation.

Гуманоидный риг и мышечное пространство
Гуманоидный риг и мышечное пространство

Mecanim Humanoid Rig и Muscle Space - это альтернативное решение стандартным иерархиям узлов скелета и геометрическим преобразованиям для представления гуманоидного тела и анимации.

Humanoid Rig - это описание поверх иерархии узлов скелета. Он определяет набор человеческих костей и создает для каждой из них мышечный референт. Мышечный референс - это, по сути, ротация до и после с диапазоном и знаком для каждой оси.

Рука и растяжка

Мускул - это нормализованное значение [-1,1], которое перемещает кость по одной оси в диапазоне [min,max]. Обратите внимание, что нормализованное значение Muscle может опускаться ниже или выше [-1,1], чтобы выйти за пределы диапазона. Диапазон не является жестким ограничением, он определяет нормальный диапазон движения мышцы. Определенный гуманоидный риг может увеличить или уменьшить диапазон действия мышечного референта, чтобы увеличить или уменьшить диапазон его движений.

Пространство мышц - это набор всех нормализованных значений мышц для гуманоида. Это нормализованная гуманоидная поза. Нулевой диапазон (min=max) для костной оси означает, что для нее не существует мышц.

Например, у локтя нет мышцы для оси Y, так как он только растягивается внутрь и наружу (ось Z) и перекатывается внутрь и наружу (ось X). В итоге мышечное пространство состоит максимум из 47 значений мышц, которые полностью описывают позу тела гуманоида.

Вытягивание руки

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

С точки зрения вычислений это также удобно, поскольку мышечное пространство можно рассматривать как вектор скаляра, который можно линейно интерполировать, в отличие от кватернионов или углов Эйлера.

Аппроксимация человеческого тела и человеческих движений

Каждый новый скелетный риг, созданный для гуманоидного персонажа или любой анимации, будет являться приближением к человеческому телу и человеческим движениям. Независимо от количества костей и качества оборудования MOCAP, результат будет приближенным к реальному.

Ригеры, игровые компании, школы или фирмы, занимающиеся разработкой программного обеспечения, предложат свою версию того, что, по их мнению, лучше всего отображает человеческое тело и движения и что лучше всего подходит для их производственных нужд.

Разработка Mecanim Humanoid Rig и Muscle Space была поставлена перед сложным выбором. Нам пришлось искать компромисс между быстротой выполнения и качеством анимации или открытостью и стандартным определением.

2 Кости позвоночника
Позвоночник

Это сложный вопрос. Почему именно 2, а не 3? Или произвольное количество костей позвоночника? Отбросим последние новости, они не касаются биомедицинских исследований. (Обратите внимание, что вы всегда можете использовать Generic Rig, если вам нужен такой уровень точности). Одна кость позвоночника явно недостаточно проработана.

Добавив вторую, вы пройдете почти весь путь. Третий или даже четвертый будут вносить лишь небольшой вклад в конечную позу человека. Почему так? Если посмотреть на то, как изгибается позвоночник человека, можно заметить, что та его часть, которая находится на грудной клетке, практически не имеет жесткости. Остается только основная точка сгибания у основания позвоночника и еще одна у основания грудной клетки. Таким образом, существует две основные точки сгибания. Взгляд на акробата даже в экстремальных позах наглядно демонстрирует это. Учитывая все это, мы решили использовать 2 кости позвоночника для Humanoid Rig.

1 Шейная кость

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

Вращение DoF

Как и большинство скелетных ригов (а для игр это еще чаще), Mecanim Humanoid Rig поддерживает только анимацию вращения. Костям не разрешается изменять свой локальный перевод относительно родительского. Некоторые 3D-пакеты вызывают определенное перемещение костей, чтобы имитировать эластичность сочленений или анимацию сминания и растяжения. В настоящее время мы рассматриваем возможность добавления трансляции DoF, поскольку это относительно дешевый с точки зрения производительности вычислений способ компенсировать качество анимации на менее детализированных скелетных ригах. Она также позволит пользователям создавать ретаргетируемую анимацию сминания и растягивания.

твист

Без костей

Кости для скручивания часто добавляют в скелетные риги, чтобы предотвратить проблемы с деформацией кожи на руках и ногах, когда они находятся в экстремальной конфигурации скручивания.

Кости для скручивания помогают распределить деформацию, вызванную скручиванием, от начала до конца конечности.

В пространстве мышц величина скручивания представлена мышцей, и она всегда связана с родительской костью конечности. Ex: Скручивание предплечья происходит в локте, а не в запястье.

твист

Гуманоидные риги не поддерживают скручивание костей, но решатель Mecanim позволяет указать процент скручивания, который будет взят из родительской конечности и помещен в дочернюю конечность. По умолчанию он равен 50% и значительно помогает предотвратить проблему деформации кожи.

Корень гуманоида и центр масс

Итак, как лучше всего представить положение и ориентацию человеческого тела в мировом пространстве?

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


backflip

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

Действительно, в анимации стояния или ходьбы центр масс находится в районе бедер, но в более динамичных движениях, таких как сальто назад, вы можете увидеть, как тело смещается от центра масс и как центр масс ощущается как наиболее стабильная точка во время анимации.

Ориентация тела

Подобно тому, как центр масс используется для определения положения в мировом пространстве Muscle Space, мы используем среднюю ориентацию тела для определения ориентации в мировом пространстве. Средний вектор ориентации тела вверх вычисляется из средних точек бедер и плеч. Передний вектор - это перекрестное произведение вектора вверх и средних векторов бедер/плеч слева/справа. Также предполагается, что эта средняя ориентация тела для гуманоидной позы одинакова для всех гуманоидных ригов. Что касается центра масс, то средняя ориентация тела, как правило, является стабильным ориентиром, поскольку ориентация нижней и верхней частей тела естественным образом компенсируется при ходьбе, беге и т.д.

Корневое движение

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

Масштаб

Одной вещи все еще не хватает в Muscle Space, чтобы стать полностью нормализованной позой гуманоида... его общего размера. И снова мы ищем способ описать размер гуманоида, который не зависит от конкретной точки, такой как положение костей головы, поскольку оно не совпадает от рига к ригу. Высота центра масс гуманоидного персонажа в T-Stance напрямую используется в качестве его масштаба. Положение центра масс в пространстве мышц делится на этот масштаб, чтобы получить окончательную нормализованную позу гуманоида. Говоря иначе, мышечное пространство нормировано для гуманоида, у которого высота центра масс равна 1, когда он находится в Т-образной стойке. Все позиции в мышечном пространстве указываются в нормализованных метрах.

Оригинальное положение рук и ног

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

IK Solver
IK-решатель

Основная цель IK Solver на руках и ногах - достичь исходного положения рук и ног и их ориентации, опционально найденной в Muscle Space. Вот что происходит под капотом для ног, когда в состоянии контроллера Mecanim включен тумблер "Foot IK".

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

Поскольку IK лишь слегка изменяет позу ретаргетированного скелета, он редко вызывает такие артефакты анимации, как выпрыгивание колена или локтя. Но даже в этом случае есть решатель Squash and Stretch, часть решателя IK, который предотвращает выскакивание, когда руки или ноги приближаются к максимальному разгибанию. По умолчанию разрешенное количество сминаний и растяжений ограничено 5% от общей длины руки или ноги. Растяжение локтя или колена более заметно (и некрасиво), чем растяжение руки или ноги на 5% или меньше. Обратите внимание, что решение сминания и растяжения можно отключить, установив значение 0%.

Более подробная статья о ригах IK будет опубликована позже. В ней вы узнаете, как работать с реквизитом, использовать несколько IK-проходов, взаимодействовать с окружающей средой или между гуманоидными персонажами и т.д.

Дополнительные кости

У Humanoid Rig есть несколько костей, которые являются необязательными. Это относится к груди, шее, левому плечу, правому плечу, пальцам левой и правой ноги. Многие существующие скелетные риги не имеют некоторых дополнительных костей, но мы все равно хотели создать полноценных гуманоидов с такими костями.

Humanoid Rig также поддерживает дополнительные кости LeftEye и RightEye. Глазные кости имеют по две мышцы, одна из которых поднимается и опускается, а другая двигается внутрь и наружу. Кости глаз также работают с решателем Humanoid Rig LookAt, который может распределять корректировки взгляда по позвоночнику, груди, шее, голове и глазам. Подробнее о решателе LookAt будет рассказано в готовящемся к выпуску документе по гуманоидным IK-ригам.

Пальцы

Наконец, Humanoid Rig поддерживает пальцы. На каждом пальце может быть от 0 до 3 цифр. Цифра 0 означает, что этот палец не определен. Для первой цифры используются две мышцы (растягивающая и раздвигающая), для второй и последней - одна мышца (раздвигающая). Обратите внимание, что если для руки не определены пальцы, то решатель не нагружается.

Требования к скелетной установке

Между костями

Во многих случаях скелетные риги будут иметь больше костей, чем те, которые определены в Humanoid Rig. Промежуточные кости - это кости, которые находятся между костями гуманоидов. Например, третья кость позвоночника в 3DSMAX Biped будет рассматриваться как промежуточная кость. Они поддерживаются Humanoid Rig, но имейте в виду, что промежуточные кости не будут анимированы. Они останутся в положении и ориентации по умолчанию относительно своего родителя, определенного в Humanoid Rig.

Стандартная иерархия

Скелетная система должна соблюдать стандартную иерархию, чтобы быть совместимой с нашей Humanoid Rig. Скелет может иметь любое количество промежуточных костей между костями гуманоида, но он должен соответствовать следующей схеме:

Бедра - Верхняя часть ноги - Нижняя часть ноги - Стопа - Пальцы

Бедра - Позвоночник - Грудь - Шея - Голова

Грудь - Плечо - Рука - Предплечье - Кисть

Рука - проксимальная - промежуточная - дистальная

T-Stance
позиция T

Т-образная стойка - самый важный этап создания гуманоидной риги, поскольку на ней базируется настройка мышц. Поза T-Stance была выбрана в качестве эталонной позы, поскольку ее легко концептуализировать и не так много возможностей для интерпретации того, какой она должна быть:

- Стоя прямо, лицом к оси z

- Голова и глаза обращены к оси z

- Ноги на земле параллельно оси z

- Руки раскрыты параллельно земле вдоль оси x

- Руки плоские, ладонью вниз, параллельно земле вдоль оси x

- Пальцы прямые параллельно земле вдоль оси x

-Пальцы прямые параллельно земле на полпути (45 градусов) между осями x и z

Когда говорят "прямой", это не значит, что кости должны быть идеально выровнены. Это зависит от того, как кожа крепится к скелету. У некоторых ригов кожа выглядит ровной, но скелет под ней не такой. Поэтому важно, чтобы T-Stance был установлен для финального скина персонажа. Если вы создаете гуманоидный риг для ретаргетинга данных MOCAP, хорошей практикой будет захватить хотя бы несколько кадров T-Stance, сделанных актером в наборе MOCAP.

Регулировка мышечного диапазона

По умолчанию диапазоны мышц устанавливаются на значения, которые наилучшим образом представляют диапазоны мышц человека. Чаще всего их не нужно изменять. Для более мультяшных персонажей вы можете уменьшить диапазон, чтобы руки не входили в тело, или увеличить его, чтобы преувеличить движения ног. Если вы создаете гуманоидную ригу для ретаргетинга данных MOCAP, не следует изменять диапазоны, так как созданный анимационный ролик не будет соответствовать умолчанию.

Ретаргетинг и анимационный клип

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

мышечный зажим

Внутри он называется "RetargetTo". Разделение ретаргетинга на два этапа имеет два больших преимущества. Первый - скорость решения. Половина процесса ретаргетинга выполняется в автономном режиме, а вторая половина - во время выполнения. Другим преимуществом является сложность сцены и потребление памяти. Поскольку Muscle Clip полностью абстрагирован от своего исходного скелета, исходный скелет не нужно включать во время выполнения, чтобы выполнить ретаргетинг.

Вторая фаза - самая простая. После того как у вас есть правильная гуманоидная рига, вы просто применяете к ней Muscle Clip с помощью решателя RetargetTo. Это происходит автоматически под капотом.

Первый этап - преобразование скелетной анимации в Muscle Clip - может оказаться немного сложнее. Клип скелетной анимации сэмплируется с фиксированной частотой. Для каждого образца поза скелета преобразуется в позу в пространстве мышц, и к клипу мышц добавляется ключ. Не все скелетные установки подойдут, ведь существует множество различных способов построения и анимации скелетных установок. Некоторые скелетные установки будут давать корректный результат, но с возможной потерей информации. Сейчас мы рассмотрим, что нужно для создания нормализованной гуманоидной анимации без потерь... Muscle Clip.

Примечание: Под словом "без потерь" мы подразумеваем, что ретаргетинг из скелетного рига в Muscle Clip, а затем ретаргетинг обратно в тот же скелетный риг сохранит анимацию в целости и сохранности. На самом деле, он будет почти нетронутым. Первоначальный поворот рук и ног будет потерян и заменен тем, что вычислит решатель Twist. Как объяснялось ранее в этом документе, в Muscle Space нет представления переразбиения твиста.

- Локальное положение костей должно быть одинаковым в ригеле гуманоида и в файле анимации. Бывает, что скелет, используемый для создания Humanoid Rig, отличается от скелета в файле анимации. Обязательно используйте точно такой же скелет. При импорте в консоль будут отправлены предупреждения, если это не так.

- Между костями не должно быть анимации. Это часто происходит в скелете 3DSMAX, где 3-я кость позвоночника имеет анимацию перевода и вращения. Это также происходит, когда Bip001 используется в качестве бедер, а таз имеет некоторую анимацию. Если это не так, то при импорте в консоль будут отправлены предупреждения.

- Локальная ориентация промежуточной кости должна быть одинаковой в риге гуманоида и в файле анимации. Это может произойти при использовании автоматической настройки гуманоида, которая полагается на Skin Bind Pose для создания T-Stance. Убедитесь, что вращение Skin Bind Pose для промежуточных костей совпадает с тем, что находится в файле анимации. Если это не так, то при импорте в консоль будут отправлены предупреждения.

- За исключением бедер, анимация перевода не поддерживается для костей. 3DSMAX Biped иногда накладывает анимацию перевода на кости позвоночника. Предупреждения будут отправлены на консоль при imp или в случае его отсутствия.

3DSMAX Biped указывается здесь как проблемная установка. Вероятно, это связано с его популярностью и тем, что нам приходилось поддерживать множество случаев его использования с Mecanim. Обратите внимание, что если вы собираетесь создавать новые анимации для использования с Mecanim Humanoid Rig, вам следует с самого начала следовать правилам, указанным выше. Если вы хотите использовать уже существующую анимацию, которая нарушает некоторые правила, то это все еще возможно, решатель ретаргета Mecanim надежен и будет выдавать корректный результат, но преобразование без потерь не гарантируется.

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