Кукольная анимация является новой причудой в современной анимации. Как следует из названия, кукольную анимацию можно представить, как если бы мы взяли какой-нибудь объект (например игровой персонаж) и бросили его, при этом бы все его части случайным образом вертелись, подобно тряпичной кукле. Представьте куклу, имеющую размеры человека, которую подбросили в воздух. Ее руки и ноги будут вращаться, а если тело столкнется с каким-нибудь твердым объектом, движения станут еще более непредсказуемыми.
Вот где кукольная анимация проявляется во всей красе, создавая абсолютно уникальные анимации при каждом моделировании. Вы можете учитывать коэффициенты столкновений, гравитации, ветра и других сил для изменения движения
Игры, подобные Unreal Tournament 2003 иллюстрирует, что такие замечательные технологии как кукольная анимация могут сделать. Нет ничего лучше, чем взорвать персонаж вашего противника из ракетницы, после чего его тело отлетит подобно кукле. Определенно вы захотите использовать эту технологию анимации для своих игр, а если продолжите читать эту главу, то узнаете о ней.
Основная идея кукольная анимации проста. Возьмем ваш игровой персонаж и рассмотрим на его примере, что происходит при кукольной анимации. Этот персонаж (представим, что он выглядит, как персонаж, изображенный на рис. 7.1) состоит из скелетного меша и последовательности костей, образующих скелетную структуру. Здесь никаких проблем - вы узнали о скелетных мешах и скелетных структурах из главы 4.
Представим, что каждую кость (и каждую вершину, принадлежащую этой кости) из рис. 7.1 окружает параллелепипед, ограничивающий параллелепипед, если быть точным. (Хотя это и кажется странным - работать с параллелепипедами вместо фактической скелетной структуры или меша; по мере чтения вы поймете, зачем это необходимо.) Видите ли, на самом деле нас интересуют эти параллелепипеды; они представляют собой части тела персонажа, которые могут крутиться, поворачиваться и болтаться в кукольной анимации.

Рис. 7.1. Вы можете разбить демонстрационный персонаж, состоящий из скелетной структуры и скелетного меша, на последовательность отдельных компонентов
На рис. 7.2 показан внешний вид демонстрационного персонажа, как если бы он состоял только из ограничивающих параллелепипедов.
Вашей задачей является обработка и отслеживание движений этих параллелепипедов (а не костей и вершин) во время их перемещений в анимации. Вы можете передвигать и вращать их, как вам захочется. Так как параллелепипеды представляют кости персонажа, каждая кость в скелетной структуре двигается в соответствии с параллелепипедом, к которому она присоединена (даже если движение вызывает разрыв соединений костей, о котором я расскажу чуть ниже).
Как же кости двигаются в соответствии с движением параллелепипедов? Они наследуют преобразования ограничивающих параллелепипедов, которые движутся по вашему трехмерному миру. Так что теоретически, при перемещении параллелепипеда кость двигается соответственно. (Получается, что кость как бы не существует, потому что вы работаете только с параллелепипедами при моделировании.)

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

Рис. 7.3. Каждый ограничивающий параллелепипед окружает вершины кости и точки соединения костей
После создания параллелепипедов и помещения их вокруг трехмерного меша вы можете начинать двигать их. Предположим, вы хотите, чтобы руки вашего персонажа крутились. Приложите небольшую силу к нескольким параллелепипедам, и они начнут двигаться. Соответствующие этим параллелепипедам кости также начнут двигаться.
С этой точки зрения параллелепипеды являются отдельными сущностями; на них не распространяются соединения костей, существующие в скелетной структуре (эти же соединения позволяют хранить скелетную структуру в распознаваемом виде). В некотором смысле это хорошо, т. к. позволяет напрямую управлять скелетной структурой персонажа, используя преобразования параллелепипедов вместо комбинированных преобразований костей. Это означает, что вам не надо комбинировать все локальные преобразования костей с родительской для их корректного ориентирования, достаточно просто скопировать преобразование параллелепипеда, и все готово!
Единственной проблемой является то, что параллелепипеды могут смещаться друг относительно друга, что приводит к расчленению персонажа. Должен быть способ усилить соединения костей, используя ограничивающие параллелепипеды, чтобы сохранить персонаж целым в сочленениях (и избавить вас от жуткой сцены летящих в разную сторону частей тела).
На самом деле есть несколько способов убедиться, что ограничивающие параллелепипеды соединяются в тех же точках, что и соответствующие им кости. Метод, который я покажу вам в этой главе, использует пружины для возвращения ограничивающего параллелепипеда при каждом его перемещении. На рис. 7.4 вы можете видеть несколько отсоединившихся ограничивающих параллелепипедов, летающих по сцене, которые расчленяют бедный персонаж на части. Между каждым параллелепипедом вы можете видеть пружину, которая используется для соединения частей тела вместе.
Рис. 7.4. Набор пружин позволяет вернуть отсоединившиеся параллелепипеды
После перемещения параллелепипедов и использования пружин для восстановления точек соединения вам необходимо скопировать ориентацию параллелепипеда в иерархию костей, обновить скелетный меш и визуализировать его. Видите, как просто!
Конечно, это просто в теории, но вот практическая реализация является трудной задачей. Все, что вы прочитали, на самом деле является большой физической проблемой - как отследить ориентацию, движение и взаимодействия параллелепипедов? Используя физику твердого тела, вот как!
Как вы только что читали, тело вашего персонажа может быть разделено на параллелепипеды, которые представляют собой разнообразные кости, образующие скелетную структуру. Вам необходимо отслеживать изменения ориентации этих параллелепипедов при их перемещении во время анимации и копировать эти ориентации в их начальные кости.
⇐Улучшение объектов скелетной анимации || Оглавление || Работа с физикой твердого тела⇒