среда, 13 апреля 2016 г.

Pixel Skeleton Editor. Первый релиз

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

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

Заинтересовавшихся прошу под кат!


Делаем скелет

Вот так выглядит главное окно программы - редактирование скелета.

Главное окно программы
Скелеты в моем случае исключительно иерархические - в скелете есть одна базовая кость (RootBone), к ней добавляются все остальные кости. Каждая кость может иметь несколько дочерних костей.

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

Каждая кость имеет свой уникальный идентификатор, который программа проставляет автоматически.

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

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

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

Для каждого скелета можно настроить его имя, а также фрейм, в рамках которого он будет существовать. Основная ориентированность данного редактора и скелетов - это двумерные пиксельные игры с персонажами размера типа 32х32, 16х32 и т.д. В настройках редактора можно указать размер рисуемого квадрата, который будет соответствовать одному пикселю в конечной игре (настройки масштаба редактора).

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

"Оно живое!"

Вот так выглядит окно анимации скелета.

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

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

При выборе конкретного кадра можно менять положение костей. Оно меняется аналогично редактору самого скелета. При щелчке на каждую кость справа будет отображаться редактор состояния выбранной кости для текущего ключевого кадра.

При воспроизведении анимации положение каждой кости интерполируется между двумя ключевыми кадрами - все прямо как во взрослых редакторах =))

Также существует возможность посмотреть анимацию в ее "реальном" размере - выбрать анимацию и нажать на кнопку Preview


Вот такая вот милая и маленькая картиночка получается.

Сохранение скелета и его анимаций

После создания скелета его, естественно, можно сохранить.
В программе есть два варианта сохранения скелета - это экспорт в JSON файл или же быстрая и компактная сериализация в бинарный файл расширения *.psbf (собственный формат).

Бинарные файлы можно использовать уже в конечной игре, а JSON файлы - как промежуточные проектные файлы. Для справедливости хочу отметить, что бинарный файл весит на порядок меньше, чем JSON (по понятным причинам) и зависимость размера здесь если не экспоненциальная, то как минимум квадратичная.

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

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

Ключевые недостатки

В данный момент, кости скелета и вся их инфраструктура используют Point и PointF, что делает эту библиотеку несовместимой, например, с MonoGame. В ближайшем времени я планирую полностью портировать ее на использование Vector2.

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

Вместо заключения

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

Но, тем не менее, сейчас этот редактор работает и может уже использоваться - ну просто так, поиграться =)

Ссылки


Спасибо за внимание, до новых встреч!

4 комментария:

  1. Денис, посмотри как хэндлят скелеты в Microsoft Kinect SDK (особенно второй версии) и различных либах к ней.
    Я думаю в рамках этого проекта очень полезно будет.

    P.S. я сам просто разрабатывал ПО, которое такой скелет анализирует с Kinect-устройства.

    ОтветитьУдалить
  2. И еще - советую все-таки проекты на github выкладывать, если хочешь больше фидбека.

    ОтветитьУдалить
    Ответы
    1. Это скорее проект не для фидбека и не для массовой аудитории, а так, для себя =)

      Удалить