ГЛАВНАЯ

      УРОКИ

 ДОСКА ОБЪЯВЛЕНИЙ

МОЙ ЛЮБИМЫЙ ФОРУМ ПО АНИМАЦИИ, ДИЗАЙНУ-САМЫЙ ЛУЧШИЙ!

НАПИШИ,ЧТО ХОЧЕШЬ!ПАУТИНА ВСЕЁ СТЕРПИТ!

 

                    ПРОДОЛЖЕНИЕ УРОКОВ ПО 3Д МАКС ( ВВЕДЕНИЕ В НУТРО СКЕЛЕТОНЧИКА)


Автор: Сергей Ваткин.

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Преимущества скелетной анимации.

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

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

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

Кроме того, к преимуществам можно отнести эффективное использование скелетной анимации, описанное ниже.

Эффективное использование скелетной анимации.

Здесь мы рассмотрим один из типов соединений между костями, также называемые связями или суставами, которые часто можно использовать в построении скелета. Называются такие связи шарнирами (revolute joint). В шарнирных соединениях конечная точка одной кости вращается вокруг какой-то статической точки, обычно конечной точки родительской кости. Приятной особенностью такой связи является то, что для перемещения каждой кости в новую позицию задаётся только вращение. Отсюда следует, что для анимации необходимо хранить только информацию о вращении.

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

По договорённости, каждая кость выровнена по оси X. Конечная точка кости находится на оси X и смещена по ней на длину кости. Относительная матрица вращения вычисляется из локального значения вращения текущей кости, а перемещение является сдвигом на длину родительской кости по X-координате в локальной системе координат родителя.

Использование шарнирных соединений ведёт к более низким затратам на хранение анимации.


Некоторые полезные ссылки вы можете найти здесь, здесь, вот здесь и еще вот здесь. УРОКИ НА ИГЛИШЕ! КУПИТЕ ПЕРЕВОДЧИК!

 

                                                                                                 ЕЩЁ ВАМ УРОКИ!

 

 

Hosted by uCoz