Cоздание скелетной анимации на основе автоматного программирования



(C) 2003 г. А.А. Бабаев, Г.А. Чижова, А.А. Шалыто

Санкт-Петербургский государственный университет информационных технологий, механики и оптики

Отсюда можно скачать полный текст документации в формате pdf (958 кб)
Отсюда можно скачать исходные тексты (18 кб)
Отсюда можно скачать скомпилированную программу (50 кб)
Отсюда можно скачать ролик в формате avi (223 кб)

Аннотация

Известны системы создания скелетной анимации. Эти системы бывают разных типов. Наиболее распространен вариант скелетной анимации (в частности, в играх), когда в готовой анимации скелета кости движутся по жестко заданным траекториям [1]. При этом доступны технологии анимации персонажей на основе уже известной скелетной анимации, в то время как подходы к созданию анимации скелетов значительно менее известны.

В настоящей работе описывается решение этой задачи, которая состоит из двух частей:

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

Задача обеспечения движения фигуры, в свою очередь, также состоит из двух частей:

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

Особенность предлагаемого подхода состоит в том, что для исполнения этих правил применяется система взаимосвязанных автоматов, которые задаются графами переходов.

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

В рассматриваемом примере для управления "человеком" применяется три типа автоматов:

"Мозг" состоит из двух частей: правил, включающих подправила, и автомата, осуществляющего их выбор, обработку (проверку возможности выполнения) и передачу на выполнение костям. Автомат имеет четыре состояния ("Ожидание", "Запуск действий", "Ожидание завершения" и "Окончание работы"). Переходы в автомате осуществляются на основе проверки значений следующих входных переменных: переменная для хранения количества действий в списке правил; переменная для хранения количества подправил в текущем правиле; переменная, показывающая, что автомат синхронизации находится в состоянии "Выполнение правил". Автомат выполняет следующие действия: удаляет из списка первое правило, выполняя его; убирает из текущего списка подправил первое, передавая его на выполнение кости, для которой оно написано; ожидает завершения выполнения всех подправил.

Автомат, управляющий перемещением кости, получает из "мозга" параметры движения и осуществляет его. Этот автомат имеет два состояния ("Ожидание" и "Перемещение"). Переходы в автомате осуществляются на основе проверки значений следующих входных переменных: переменная, показывающая необходимость перемещения; переменная, сигнализирующая об окончании перемещения. Автомат выполняет следующие действия: инициализирует перемещение; выполняет элементарное перемещение кости, вычисляемое, как произведение скорости перемещения на время, которое затрачено на данный шаг; обеспечивает завершение движения. В примере используется 15 автоматов данного типа, так как фигура содержит 15 костей.

Автомат синхронизации выделен отдельно, потому что необходимо в одном месте собирать и хранить информацию о факте перемещения костей, а также для обеспечения выполнения следующего действия только после завершения предыдущего. Автомат имеет два состояния ("Ожидание выполнения правил" и "Выполнение правил"). Переходы в автомате осуществляются на основе проверки значений следующих входных воздействий: событие "Уменьшить значение счетчика"; событие "Увеличить значения счетчика"; переменная, показывающая, что в счетчике осталась единица. Автомат выполняет следующие действия: увеличивает значение в счетчике; уменьшает (если это возможно) значение в счетчике.

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

Проект реализован следующим образом. Структура фигуры и правила работы "мозга" задаются в XML-формате, и поэтому могут быть легко изменены без перекомпиляции. Остальная часть программы выполнена на языке Java.

Эта часть программы содержит 13 классов, из которых все кроме одного, соответствующего костям, порождают по одному объекту. Автоматы в проекте реализованы, как методы класса - объект ("тело") и управляющий им автомат ("душа") реализованы совместно.

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

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

Для того, чтобы запустить программу, требуется среда исполнения Java Runtime Engine версии 1.4 или старше и библиотека Java 3D версии 1.3 или старше. Скачать их можно на сайте http://java.sun.com.

Литература

  1. Ваткин С. Скелетная анимация. http://www.gamedev.ru/coding/10917.shtml
  2. Шалыто А.А., Туккель Н.И. SWITCH-технология - автоматный подход к созданию программного обеспечения "реактивных" систем //Программирование. 2001. №5. http://is.ifmo.ru