Sunday, August 27, 2006

MotionX

За две недели полностью, то есть абсолютно с нуля переписал свою систему анимации. Очень долго выбирал как называть библиотеку. Решил не оригинальничать и назвал ее MotionX :)

Вот что есть из возможностей.
- Возможность анимировать любые структуры жестких тел(Rigid Bodies). То есть связи могут быть не обязательно в виде скелета(то есть дерева), как это обычно делается. Например, можно анимировать сложные механизмы, моделировать физические взаимодействия тел(используя Havoc в 3дмаксе или другие физические движки). Ну и вообще. При использывании только кейфреймовой анимации, связи между объектами вообще не обязательны.

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

- Есть возможность анимировать разные части скелета персонажа в разных потоках. Например на ногах у нас стоит walk, а для верхней части туловища можно переключать различные анимации(attack, shoot, walk и т.д.). Ну и вообще дает большую гибкость в анимировании объектов.

- Модульная архитектура библиотеки. Помимо покадрового контролёра, можно подлючать другие контроллёры управления положением объектов. Например всё возможные варианты инвресной кинематики. Правда я пока не реализовал ни одного IK контролёра, но добавить их можно очень просто.

- Легкость в сериализации. Описание контроллёров, списки анимаций и связи между ними(время блендинга) находятся в xml файлах. Сами кейфреймовые анимации лежат в бинарном представлении. Есть экспортёр анимации из 3дмакса. Планирую написать экспорт из коллады. Таким образом можно будет охватить и Маю и XSI и другие пакеты моделирования.

- Мультиплатформенность. Библиотека компилируется под vc7.1, vc8.0 и gcc3.4 другие компиляторы пока не тестировал. Привязка к ОС или графическому API отсутсвует. Библиотеку тестировал под линуксом всё работает как надо. Если надо будет сделать поддержку других платформ, то займусь и этим.

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


Через пару недель планирую все это дело выложить на sourceforge. Лицензию пока не выбрал, но вряд ли это будет GPL. Выберу что-нибудь по-мягче.