Sergei Shaykin
GameDev.ru / Страницы / Sergei Shaykin / Статьи / Скелетная анимация: Введение

Скелетная анимация: Введение

Страницы: 1 2 Следующая

Автор:

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


— Разве это всё может быть правдой? — изумились дети.
— Ну, это же сказка, дети!
(анекдот про сказку про девочку)

Анимация в играх.
Скелет, как иерархия трансформаций.
Скелетный расчёт.
Управление структурой объектов, при помощи скелета.
Вершинная деформация объектов.
Skinning. Деформация полигональной модели скелетом.
Анимация персонажей.
Преимущества скелетной анимации.
Эффективное использование скелетной анимации.
Заключение.

Анимация в играх.

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

Игровой движок может реализовать различные типы анимации, от простой, где происходит обычное перемещение объекта из одного места в другое, до более сложной, где реализуется анимированная деформация объектов. Конечно, некоторые деформации можно очень просто сделать, например, легко реализовать сжатие объекта по какой-нибудь оси, используя матрицу масштабирования. Однако существуют более сложные деформации, в которых методы задания нуждаются в управлении отдельно взятыми вершинами. К примеру, лицевая анимация, где мимика персонажа реализуется через изменение взаимного расположение некоторых вершин, а не всего объекта.

Скелет, как иерархия трансформаций.

Иерархией объектов, можно назвать систему объектов, в которой одни объекты своим расположением в пространстве влияют на расположение других объектов. Вводится понятие родительских и дочерних объектов и взаимосвязей между ними. Нас интересуют именно взаимодействие трансформаций этих объектов. То есть, когда мы говорим о скелете, мы говорим об иерархии трансформаций; сами объекты называют костями. Другими словами, скелет можно определить как совокупность костей. Именно поэтому скелетную анимацию также называют костевой.

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

Абсолютная трансформация родительской кости порождает некую координатную систему. Эта координатная система является локальной для дочерней кости. Дочерняя кость задаётся локальной трансформацией в этой системе. Поэтому изменение трансформации родительской кости влечёт влияние на абсолютную трансформацию дочерней.

Дочерняя кость, в свою очередь, может иметь свою дочернюю кость, причем не одну, относительно которой она уже является родительской. Ясно, что и родительская кость, тоже может иметь своего родителя. Родитель, который не имеет родителя, является корневым (root), а его локальная система координат является абсолютной. Например, условно в скелете двуногого за корневую кость выбрана тазовая кость.

Оторопев от такого поворота, многие скелеты, просто рассыпаются в тряске, потеряв всю целостность своих иерархий.

Ясно, что движение родительской кости порождает движение дочерней кости. Например, если вы даёте вращение шее, то голова тоже поворачивается. В этом примере родителем для головы является шея. В свою очередь спина является родителем для шеи, то есть если мы согнём спину, то шея и голова поменяют своё положение.

Скелетный расчёт.

Все кости в скелете задаются своими локальными трансформациями. Но для конечного использования нам необходимо вычислить все абсолютные трансформации. Это и есть просчёт скелета.

Трансформации в 3-х мерной графике принято задавать матрицами. Обычно это матрицы размерности 4x4 или 4x3.

Изображение

На примере руки, рассмотрим простейшую иерархию, состоящую из двух костей. На рисунке кость A является родителем кости B. Допустим, у нас уже вычислена абсолютная трансформация для кости A, матрицу этой трансформации обозначим через МА абс. Чтобы найти абсолютную трансформацию для кости B, необходимо подействовать на локальную матрицу трансформации MB лок кости В матрицей MA абс. Другими словами — просто умножить:

MB абс = MB лок x MA абс

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

Если какая-то кость поменяла своё расположение в пространстве, то есть изменилась её абсолютная матрица трансформации, то требуется заново сделать пересчёт всех дочерних костей. Во время анимации просчёт скелета нужно делать в каждый момент времени.

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

Управление структурой объектов, при помощи скелета.

При создании модели какого-нибудь механизма, очень часто бывает удобно использовать иерархию объектов. Такая структура объектов, собственно, является неким скелетом. То есть каждая кость представляет собой локальную трансформацию каждого объекта из этой структуры. Управляя этим скелетом, например, назначив ему анимацию, можно реализовать анимированное поведение механизма. К примеру, имеем дело с револьвером. Корпус является корневым объектом. Барабан револьвера - дочерним, может получить локальное вращение вокруг своей оси. Затвор, тоже дочерний - может иметь локальное перемещение. Пружина - масштабирование. Перемещая корпус револьвера, мы не заботимся о перемещении его отдельных частей, об этом беспокоится иерархия. Для вращения барабана - мы просто вращаем локальную матрицу трансформации для этого барабана. Абсолютная же матрица, то есть положение объекта в мировом пространстве, вычисляется иерархией.

Механизмы могут быть более сложными. Например, таким образом можно выстроить систему управления сложными роботами.

Вершинная деформация объектов.

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

Изображение

Допустим, рассматривается движение руки персонажа. У нас есть два положения - начальное и конечное. Каждая вершина имеет своё начальное и конечное положение в пространстве. Для тех вершин, которые имеют некоторое перемещение, мы задаём траекторию движения этих вершин. Часто используемым методом задания анимации персонажей является построение промежуточных отображений (tweening) между изменениями объекта. То есть, к примеру, можно для каждого кадра анимации хранить копии одного и того же объекта с небольшими изменениями, а во время проигрывания анимации интерполировать каждую вершину между этими копиями. Однако такой способ задания анимации для персонажей не является эффективным и требует больших накладных расходов.

Но в подобных случаях такую анимированную деформацию можно решить при помощи скелетной анимации.

Skinning. Деформация полигональной модели скелетом.

Анимация вершин заменяется невидимой иерархией анимированных костей, которые перемещают вершины.

После того как просчитан скелет, трансформируется геометрия, на которую влияет скелет. Здесь геометрия - это полигональная модель вашего объекта или персонажа. Модель представляется одной цельной полигональной моделью, которая деформируется под действием костей. Происходит деформация геометрии на уровне вершин под влиянием костей. Влияние может распространять как одна кость, так и несколько. Иногда ограничиваются только использованием влияния на любую вершину какой-то одной кости. Это меньше занимает расчетного времени и памяти для хранения анимации. Однако такой метод является не очень эффективным. Появляются артефакты, заметные на глаз, при неправильном «захлёсте» геометрии. С некоторыми такими артефактами удаётся бороться добавлением дополнительных промежуточных небольших костей. Однако, при использовании возможности влияния на одну вершину несколькими костями, достигается большая эффективность и реалистичность. В этом случае каждая вершина модели должна знать какие именно кости влияют на её положение и какова степень влияния каждой кости. Степень влияния задаётся коэффициентом, который называется весом (weight). Ясно, что сумма всех таких коэффициентов для одной вершины должна быть равна 1. При помощи этих коэффициентов происходит смешивание вычисленных координат вершин (vertex blending).

Анимация персонажей.

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

Страницы: 1 2 Следующая

17 сентября 2001

#анимация, #скелетная анимация


Обновление: 13 июня 2009

2001—2017 © GameDev.ru — Разработка игр