Библиотека

АНИМАЦИЯ МОДЕЛЕЙ В ТРЕХМЕРНЫХ ИГРОВЫХ ПРИЛОЖЕНИЯХ

Пивненко А.В.
Донецкий Национальный Технический Университет

   Тезисы доклада на III международную научную конференцию студентов, аспирантов и молодых ученых «Компьютерный мониторниг и информационные технологии», которая проходила 22 мая 2007 года в ДонНТУ.

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

Рассмотрим 2 вида анимации: вершинная анимация (интерполяция по ключевым кадрам) и скелетная анимация.

Вершинная анимация основана на том, что положение вершин в пространстве может изменяться, но не может меняться их связь с другими вершинами. Для создании анимации неодходимо создать последовательность из ключевых кадров. Каждый ключевой кадр – это фактически информация о положении каждой вершины в пространстве. Вершины определяют вид объекта для каждого кадра анимации, и каждый из этих кадров может входить в отдельную анимационную последовательнось. Анимация осуществляется последовательным проходжением по кадрам анимации. Однако такой может сопровождаться «рывками». Для получения более плавной анимации необходимо использовать линейную интерполяцию между кадрами. Например, мы хотим провести интерполяцию с коэффициентом 0.25 от кадра i до кадра i+1. При этом будет осуществлён плавный переход координат вершин от кадра i до кадра i+1 c интерполяционными значениями 0, 0.25, 0.50, 0.75.

В основе скелетной анимации лежит скелетная структура объекта, то есть набор иерархически упорядоченных костей, к которым уже крепиться часть визуального представления объекта (наботы вершин). Одна кость, которая казывается корневой, формирует точку опоры для всей скелетной структуры. Все остальные крепятся к корневой, как потомки. Каждая кость содержит свою трехмерную преобразование (позиция, размер, ориентация), и, возможно, кость-родитель. Преобразоваия задаются матрицами размерности 4x3 или 4x4. Полное преобразование кости-потомка – произведение проеобразования родителя с её собственным преобразованием. Соответственно при изменении положения кости-родителя все её кости-потомки также изменят своё положение. Получается, что анимация достигается за счёт изменения преобразований костей во времени. Сама анимация может либо браться из готовых просчитанных заранее положений каждой кости, либо вычисляться процедурно - некоторым контроллером анимации. Если какая-то кость поменяла своё расположение в пространстве, то есть изменилась её абсолютная матрица трансформации, то требуется заново сделать пересчёт всех дочерних костей. Во время анимации просчёт скелета нужно делать в каждый момент времени.

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

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

Список литературы:

  1. Ламот, Андре «Программирование трёхмерных игр для Windows», «Вильямс», 2004. – 1424с.
  2. Advanced Animation with DirectX, Jim Adams, PREMIER PRESS, GAME DEVELOPMENT, 2003
  3. http://www.gamedev.ru/users/wat/articles/SkelAnim1 Скелетная анимация: Сказка 1. Въезд. Сергей Ваткин.
  4. http://en.wikipedia.org/wiki/Skeletal_animation - Wikipedia