Spine – программа для создания 2d анимаций, заточенная под игры. Основными фичами программы являются продвинутая костная анимация и анимация мешей.
На этой неделе сразу 4 человека спрашивали меня о работе с этой программой. Потому я решил написать о своих впечатлениях в блог.
Для полноты картины, я попросил аниматора, с которым работаю (Вячеслав Боровик), рассказать о своем опыте использования Spine. С него и начнем.
За время работы со Spine, у меня сформировалось положительное впечатление. Это замечательная тулза по работе с 2д анимацией для игр.
У программы много отличных возможностей, о которых вы можете узнать на офф. сайте, я же расскажу про свой опыт.
Основные плюсы, которые я отметил:
- Очень удобный 2д риг. Быстро и просто вы можете создавать систему костей и пэрентить к ней ваши текстуры, создавая полноценный скелет.
- Меши (meshes and FFD transform). Вы можете нарисовать любой меш, анимировать его или привязать к костям, при этом weights тоже можно настраивать вручную, и это радует.
- Программа очень простая, и что бы полностью ее выучить необходимо совсем не много времени. При этом тех туториалов от разработчиков, что есть на ютубе, будет вполне достаточно.
Теперь немного про ограничения в программе ( чего, так сказать, не хватает):
- первое, что бросается в глаза – это отсутствие пространственной интерполяции ключевых кадров, т.е. она везде линейная, и криволинейную траекторию движения какого-либо объекта приходится делать почти покадрово.
- с временной интерполяцией дела так же обстоят не очень. В распоряжении есть очень простенький граф эдитор, позволяющий редактировать лишь относительное изменение свойства от 0 до 100% и лишь между двумя ключевыми кадрами. Конечно, хотелось бы видеть полноценный граф эдитор в виде кривых Безье, с возможностью работать именно с реальными цифровыми значениями параметров и для любого количества ключевых кадров, с возможностью редактировать график скорости.
- в программе напрочь отсутствуют инструменты рисования. В принципе, они там незачем, но рисовать гайд слои все же бывает нужно
- из логических недостатков можно заметить, что нельзя копировать ключи одних объектов и вставлять в другие. К примеру, нельзя скопировать позицию от одной кости к другой.
- отсутствует вложенность композиций (аналог символ во Flash и прекомпоз в After Effects), что иногда ограничивает в возможностях.
- было бы здорово иметь возможность держать открытыми сразу несколько проектов и копировать что-либо из одного в другой при необходимости, как это можно делать в продуктах Adobe.
- возможно, для Spine это из области фантастики, но, как правило, в любых серьезных редакторах можно кодить, как например в Adobe After Effects с его экспрешенами. Зачастую, это очень существенно ускоряет работ, Взять хотя бы распространенный скрипт для создания затухающих колебаний и т.п.
О критических ошибках, которые возникают:
- если сделать reset меша, на котором есть weights (лечится тем, что вы сначала удаляете все кости из панели Bind, и потом делаете reset меша и заново настраиваете weights)
- если удалить кость привязанную к IK (лечится предварительным удалением IK)
Еще хочется добавить, что если в анимации используется меш, тогда размер текстуры по длине и ширине должен строго соответствовать размеру меша. Не должно быть никакого лишнего и пустого пространства, иначе при экспорте в unity возникнут проблемы, меш не ляжет на текстуру правильно. Об этом можно прочитать в FAQ, чего мы изначально не сделали и потратили время.
Расскажу немного о своем опыте и впечатлениях, как человек, который встраивает анимации непосредственно в игру.
У Spine очень много рантаймов, только официальный список содержит 14 различных технологий, а неофициальный просто огромный. Подробнее можно прочитать тут.
Мы сейчас работаем на Unity и используем официальный runtime для этих целей. Интеграция с Unity достаточно хорошая. Анимации отображаются по средствам Mesh Rendrer и Skeleton Renderer. Производительность меня полностью устраивает. На первом айпад мини, я выводил около 150 анимаций с мешами, без значительной просадки фпс и в 1-2 DrawCalls.
В один клик, можно создать стандартный unity animator и настроить работу анимаций привычным способом. Честно говоря, я этим не пользовался, т.к. unity animator мне кажется достаточно тяжеловесным (особенно инициализация, по крайней мере в unity 4.6.*). Поэтому анимациями управляю кодом и это мне чертовски нравится.
Вот небольшой пример:
skeleton.state.SetAnimation (0, "idle", true);// играем анимацию idle в нулевой дорожке, loop = true skeleton.state.SetAnimation (1, "blink", true);// играем анимацию blink в первой дорожке, loop = true skeleton.state.AddAnimation(0, "run", true, 5f);// играем анимацию run, через 5 секунд в нулеой дорожке, loop = true
Если анимация blink настроена правильно, то не зависимо от того, что происходит в анимации idle (положение головы, положение глаз) моргание отыграется без проблем. Через 5 секунд запуститься run вместо idle, а blink будет дальше работать как ни в чем не бывало (так же можно смешивать атаку во время бега и во время ходьбы и т.д.).
Так же есть mix, который избавляет от необходимости возиться со стыковкой анимаций. Например, можно настроить mix между run и walk анимациями в течении 0.5 секунд. И в это время при переходе с одной анимации на другую кости будут плавно перемещаться из текущего положения в следующее. Этакий скелетный твин.
Spine анимации поддерживают скины. В стандартных примерах есть пример с гоблином и гоблиншей – можете взглянуть.
Есть событие Complete анимации, а так же в самом редакторе, аниматор может расставить свои события, подобно тому, как это делается в unity.
То что уменьшается размер билда и кол-во потребляемой памяти и так понятно – это очень приятный бонус.
Из минусов, которые я отметил:
- повторю за Славой – очень не хватает вложенной структуры анимаций (аналог MovieClip во Flash). Есть возможность приаттачить скелет одной анимации к кости в другой, но это не покрывает всех потребностей.
- аниматор не может просмотреть в редакторе миксы, запуск анимаций в разных трэках (пример с морганием) и аттач скелета к кости другой анимации. Эти вещи доступны только в runtime и аниматору приходится просить программиста проверить/показать или нужно задумываться о написании каких-то своих кастомных вьюверов для этих целей.
Несмотря на то, что мы привели огромный список минусов, утилита нам очень нравится. Эти минусы мы описали скорее для того, чтобы вы понимали, что это не “серебряная пуля”, которая умеет все и сразу избавить вас от проблем. Но разработчики стараются и не останавливаются на достигнутом.
Почти все ответы на свои вопросы я нахожу у них на форуме, да и вопросов возникает не так уж и много. А если у Вас возникли вопросы ко мне или к Славе, спрашивайте в комментариях, постараемся ответить.