четверг, декабря 04, 2008

Построение анимаций в Spore

Я как-то уже давала ссылку на рассказ Криса Хекера про анимации в Споре. Но это было давно и с тех пор Крис Хекер успел выступить на SIGGRAPH'е. Выступление это было в августе этого года и этот его рассказ значительно подробнее, вот он: Real-time Motion Retargeting to Highly Varied User-Created Morphologies, [.pdf] Я сделала небольшой перессказ этого труда.

Итак, какие именно задачи стояли перед разработчиками при работе с существами, сгенеренными пользователем.


  • Надо построить существо из отдельных деталей
  • Текстурировать его
  • Построить анимации


Крис Хекер рассказывает только о построении анимаций.

Терминология Споры
Каждый персонаж Споры состоит из тел.
Тела - анатомически части, позвоночник, конечности. Обычно персонаж состоит из 20-80 тел.
Каждое тело содержит позицию, вращения, BB, информацию по положению в иерархии отец-ребенок. Также тела содержат теги-возможности. Которые говорят что это тело может. Например, тело-рука имеет тег-возможность "хватать".
Тела имеют деформации, которые контролируют низкоуровневую анимацию тела. Деформации стандартны для различных типов тел, например все тела-рты реагируют на деформацию открыть-закрыть.
Тела формируют направленный ациклический граф. В ранних прототипах графы были довольно сложные, даже циклы содержали, но потом их упростили. Потому что пользователю они только мешали.

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

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

Аниматор может редактировать анимационные данные на некотором загруженном персонаже и тут же смотреть как от этого меняются другие персонажи.


Когда анимация играет на персонаже в первый раз, проходят всякие разные проверки. Например проверка предикатов: HasGraspers, HasFeets. И тут есть варианты - бранчи. Если у персонажа есть чем хватать, руки там, то хватательная анимация будет задействовать руки. Если рук нет, то будет ртом хватать.

Проверяется также сколько есть вариантов проиграть одну и ту же анимацию на персонаже. Например, персонажу надо сорвать фрукт. Для этого нужна только одна рука. Какая именно не понятно, потому что надо знать позицию фрукта относительно персонажа, а количество и положение рук заранее низвестно. Поэтому есть опция, что данная анимация может затрагивать только одно из подходящих тел. В случае фрукта - это тело, которое находится ближе к фрукту и которое больше ничем не занято. Если у персонажа пять рук, то будет сгенерировано пять анимаций хватания фрукта.

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

Фактор порядка - это промежуток времени в течение цикла шага когда нога находится на земле.

Триггер шага - это сдвиг по циклу шага, когда данная конкретная нога начинает свой подцикл.

Бедра сдвигаются и поворачиваются, чтобы во время шагания торс двигался соответственно.

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

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

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

Несколько слов об их инверсной кинематике
По ней у них было несколько требований: высокая производительносить, натурально выглядящая поза, то, что они назвали "graceful failure", т.е. если уж ошиблись, то это должно более-менее нормально выглядеть, независимость от пути вычисления (результат, полученный в данный момент времени не должен зависеть от результатов, полученных ранее).
Всё это им вполне удалось, перессказывать не буду, ибо бессмысленно, лучше почитать оригинал.

Тестирование
Тупо проверяли на самых разных существах какие именно анимации не работают. Выясняли почему и правили.


Чего не хватает
Система не умеет работать с объемами и границами. Что означает, что существа не могут, к примеру, друг друга обнять. Также нет работы с коллизиями персонажа относительно самого себя.

Вообще занимательное чтиво. Необычно и увлекательно :-).

6 коммент.:

Илья Разинков комментирует...

Спасибо, Интересно!!!
А что еще хорошего в сигграфовских записях найти можно?

Алёна комментирует...

Спасибо, Интересно!!!

Пожалуйста :-)

А что еще хорошего в сигграфовских записях найти можно?

Я остальные не читала. Эту статью я увидела, когда заглянула на страничку Криса.

Alex комментирует...

Спасибо за пост Алёна! Шпилил в спору месяц назад - игрушка меня приятно удивила своей оригинальнстью. Наконец то представилась возможность о зайюзаных технологиях по больше узнать:)

lyalikov комментирует...

Спасибо. Нужно.

coba комментирует...

сиграфавские записи можно читать тут)

http://kesen.huang.googlepages.com/sig2008.html

там много интереснаго))

beldmit комментирует...

Спасибо. Только, как я понимаю, не приделываются псевдоноги, а часть тела рассматривается как псевдо-нога, и рассчитывается червеобразное движение.