Телематика'2003

X Всероссийская
научно-методическая
конференция


 

 

МЕТОД СОЗДАНИЯ СКЕЛЕТНОЙ АНИМАЦИИ НА ОСНОВЕ АВТОМАТНОГО ПРОГРАММИРОВАНИЯ

А.А.Бабаев, Г.А.Чижова, А.А.Шалыто

Санкт-Петербургский государственный институт точной механики и оптики (технический университет), Санкт-Петербург

Тел.: (812) 325-31-31 (доп. 2521), e-mail: Alexander.Babaev@transas.com

Известны системы создания скелетной анимации. Эти системы бывают разных типов. Наиболее распространен вариант скелетной анимации (в частности, в играх), когда в готовой анимации скелета кости движутся по жестко заданным траекториям [1]. При этом доступны технологии анимации персонажей на основе уже известной скелетной анимации, в то время, как подходы к созданию анимации скелетов обычно не излагаются.
В настоящей работе описывается решение этой задачи, которая состоит из двух частей:
– создание скелета, который схематично описывает анимируемую фигуру (статика);
– обеспечение движения фигуры (динамика).
Создание скелета выполняется традиционным путем. При этом предполагается, что скелет состоит из костей, которые связаны между собой в структуру, наиболее естественным образом описывающую анимируемую фигуру. В общем случае эта структура древовидна. Это позволяет автоматически передавать перемещение костей, принадлежащих более высоким уровням иерархии, на кости более низких уровней.
Задача обеспечения движения фигуры, в свою очередь, также состоит из двух частей:
– разработка правил перемещения костей;
– исполнение правил.
В примере скелетной анимации «человека», рассматриваемом в работе, выбраны линейные правила перемещения. Правила содержат подправила, например, правило «перемещение руки» состоит из таких подправил, как «перемещение плечевой кости», «разгибание руки» и т.д.
Особенность предлагаемого подхода заключается в том, что для исполнения этих правил применяется система взаимосвязанных автоматов, которые задаются графами переходов.
Это позволяет упростить процедуру программирования скелетной анимации в целом настолько, что если бы авторы не знали автоматного подхода, то его, по их мнению, стоило бы разработать.
В рассматриваемом примере для управления «человеком» применяется три типа автоматов:
– автомат, управляющий работой «мозга»;
– автомат, управляющий перемещением отдельной кости;
– автомат синхронизации фигуры.
«Мозг» состоит из двух частей: правил, включающих подправила, и автомата, осуществляющего их выбор, обработку (проверку возможности выполнения) и передачу на выполнение костям. Автомат имеет четыре состояния («Ожидание», «Запуск действий», «Ожидание завершения» и «Окончание работы»). Переходы в автомате осуществляются на основе следующих входных переменных: переменная для хранения количества действий в списке правил; переменная для хранения количества подправил в текущем правиле; переменная, показывающая, что автомат синхронизации находится в состоянии «Выполнение правил». Автомат осуществляет следующие действия: выполняет первое правило в списке и удаляет его оттуда; убирает из текущего списка подправил первое, передавая его на выполнение кости, для которой оно написано; ожидает завершения выполнения всех подправил.
Автомат, управляющий перемещением кости, получает из «мозга» параметры движения и осуществляет его. Этот автомат имеет два состояния («Ожидание» и «Перемещение»). Переходы в автомате осуществляются на основе следующих входных переменных: переменная, показывающая необходимость перемещения; переменная, сигнализирующая об окончании перемещения. Автомат выполняет следующие действия: инициализирует перемещение; выполняет элементарное перемещение кости, вычисляемое, как произведение скорости перемещения на время, которое затрачено на данный шаг; обеспечивает завершение движения. В примере используется 15 автоматов данного типа, так как фигура содержит 15 костей.
Автомат синхронизации выделен отдельно, потому что необходимо в одном месте собирать и хранить информацию о факте перемещения костей, а также для обеспечения выполнения следующего действия только после завершения предыдущего. Автомат имеет два состояния («Ожидание выполнения правил» и «Выполнение правил»). Переходы в автомате осуществляются на основе следующих входных воздействий: событие «Уменьшить значение счетчика»; событие «Увеличить значения счетчика»; переменная, показывающая, что в счетчике осталась единица. Автомат выполняет следующие действия: увеличивает значение в счетчике; уменьшает (если это возможно) значение в счетчике.
Корректность работы столь большого количества автоматов можно контролировать не только с помощью визуализатора по перемещению фигуры, но и на основе автоматически создаваемых протоколов, которые отображают поведение всех автоматов в системе.
Проект реализован следующим образом. Структура фигуры и правила работы «мозга» задаются в XML-формате, и поэтому могут быть легко изменены без перекомпиляции. Остальная часть программы выполнена на языке Java.
При этом используется 13 классов, из которых все кроме одного, соответствующего костям, порождают по одному объекту. Автоматы в проекте реализованы, как методы класса – объект («тело») и управляющий им автомат («душа») реализованы совместно.
Программа использует несколько потоков для обеспечения возможности одновременного движения костей. При этом в одном потоке работает «мозг» и синхронизатор, а для каждой из костей создается отдельный поток.
Применение автоматного подхода упрощает внесение изменений в проект, что позволит сравнительно «безболезненно» повысить его функциональность в следующих версиях программы. Проект размещен на сайте http://is.ifmo.ru в разделе «Проекты».
Работа выполнена при поддержке Российского фонда фундаментальных исследований по гранту № 02-07-90114 «Разработка технологии автоматного программирования».
Литература
1. Ваткин С. Скелетная анимация. http://www.gamedev.ru/coding/10917.shtml.
2. Шалыто А.А., Туккель Н.И. SWITCH-технология – автоматный подход к созданию программного обеспечения "реактивных" систем //Программирование. 2001. №5. http://is.ifmo.ru.


 



Санкт-Петербург, 14-17 апреля 2003 г.
X Всероссийская научно-методическая конференция "Телематика'2003"