воскресенье, 26 февраля 2012 г.

История импорта анимации из Эверквеста.

Ураааа!!!! После десятка попыток на протяжении нескольких месяцев ковыряний, наконец-то удалось победить скелетную анимацию, импортированную из Эверквеста.


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

Не вдаваясь в подробности, там оказалось несколько наборов данных, в частности:
Индексы костей в меше
Список костей меша
Скелет со своим набором костей и своей иерархией
Обратные матрицы костей скелета
Трэки анимации (имена треков соответствуют именам анимированных костей)

Все "скелеты" имели разное количество костей и разный порядок их следования, фактически конечный результат пришлось собирать по кускам - по индексу кости меша получить имя кости скелета, по имени кости скелета получить индекс кости в скелете, по индексу этой кости получить родителя кости скелета, зная родителя - получить абсолютную матрицу трансформации кости и вычислить для нее обратную матрицу и поместить ее в массив костей меша. Аналогичную процедуру повторить для треков анимации - по имени кости найти номер трека, по номеру трека получить трансформацию кости, сформировать на основе этой информации новый скелет, вычислить абсолютные матрицы костей, используя иерархию скелета, потом сформировать новый список костей меша для текущего кадра анимации, импортируя кости из скелета по именам костей из основного меша...

Вообщем жуть, все данные динамичные, все связи только через имена костей, по которым нужно искать индексы по которым получать нужную информацию из других массивов... Теперь то я могу этот процесс оптимизировать, но дойти до него было очень сложно, привыкнув что вершины привязаны к скелету в bind-pose.
Но результат стоил потраченного времени, открыв мне доступ к "неограниченному" репозиторию объектов и анимаций :)

7 комментариев:

  1. Молодец! Продолжай в том же духе!

    ОтветитьУдалить
  2. Продолжаю, уже оптимизировал работу со всеми матрицами, пи софтварном рендеринге (для отладки) получаю 900фпс на модельке из 1366 полигонов, по две кости на вершину :) До этого, в режиме поиска соответствий костей, фпс был всего 254 кадра.
    Теперь осталось переписать всю анимацию на кватернионы и загнать в шейдер.

    Сейчас попутно начал писать вьювер для эверквестовских файлов, проблема в том, что там все данные раскиданы по куче папок - глаза лесного эльфа, шкура вампира, анимация человека, скелет темного эльфа и т.д. С материалами там полный писец.... там шейдер (не код шейдера а привязка материалов, настройки смешивания и прочее) формируется из кучи инклюдов, так же разбросанных по всем папкам. До этого я модельки собирал "вручную", выискивая где какой файл хранится и выдирая его из пакета, задачка скажем не из простых, учитывая что архив ресурсов занимает 8Гб и состоит из 400 тысяч файлов... Теперь вот хочу этот процесс автоматизировать, чтоб по одному клику выдирались все зависимые файлы и правились все пути.

    Собственно для Вас от этого будет мало толку, так как врядли кто-то захочет ради этого выкачивать 8Гб архивов, но зато я смогу наконец-то оформить красивую демку :)

    ОтветитьУдалить
  3. Ну теперь можешь за *.nif, *.kf приниматься=) Формат движка Gamebryo\NetImmerse. Там тоже скучать не придется.

    ОтветитьУдалить
  4. Для меня ковыряние в форматах это не хобби а необходимость, так как мне катастрофически не хватает нормальных моделек для демок.
    Что касается nif - для него есть плагины импорта/экспорта, да и исходники движка есть потому тут ничего выдумывать не нужно.

    Выбор на Эверквесте остановил из-за того, что эта игра мне очень хорошо знакома, из-за того что там десятки тысяч видов брони и оружия (и сотни тысяч скинов к ним), из-за того что там огромное количество объектов интерьера и экстерьера, из-за того что там огромная база существ с очень качественной анимацией. Если сравнивать с тем же Скайримом - база объектов в Эверквесте больше раз в 100 и эта база постоянно пополняется.

    Для остальных форматов анимации я в конце-концов напишу загрузчик Collada.

    ОтветитьУдалить
  5. Такс, закончил черновой вариант экстрактора ресурсов, теперь хоть можно быстро вытащить из 8Гб архива нужные файлы.

    Ради интереса посчитал сколько там всякого... 28 тысяч игровых объектов и 17 тысяч разных анимаций... Одних скелетов там 1700 штук...

    Беглый просмотр анимации показал что в Эверквесте сейчас и половины из этих анимаций не используются... Видно еще в 2004 году наснимали через moCap на десять лет вперед :)

    Собственно благодаря этим ресурсам уже намечается первая доработка в модуле - система лодов. На кубиках и шариках это как-то не очень интересно было делать, а тут уже есть модельки с 3-мя лодами геометрии, двумя текстурными лодами и тремя шейдерными. Есть с чем работать :)

    Вообще из разбора ресурсов Эвера многому можно научиться, так как это структура данных реально существующей ММОРПГ. Есть много очень интересных решений, которых не увидишь в обычных шутерах или РПГ. Взять ту же анимацию - не смотря на всю сложность для понимания, это позволяет делать подгонку анимации под разных персонажей, это позволяет уменьшить количество передаваемых в шейдер костей. Сама анимация, представленная в виде трэков, позволяет существенно снизить объем занимаемый анимацией и обновлять только меняющиеся кости (к примеру нет надобности при ходьбе обновлять 60 лицевых костей). Сам скелет тоже очень интересный, туда кроме самих костей объекта включены кости крепления доспехов, оружия, направления взгляда и прочее, что позволяет управлять всеми параметрами модели через скелет, не изобретая какие-то дополнительные структуры и классы.

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

    Вообщем есть чему поучиться, чего нельзя было сказать о написании загрузчика SMD/MD5/BVH...

    ОтветитьУдалить
  6. Какого именно движка есть исходники? Ссылки?
    Надо хоть глянуть что за игра. Это же mmorpg? От них обычно очень дурно пахнет, сделаны под копирку за редким исключением. Неужели что-то приличное сделали?

    ОтветитьУдалить
  7. >>Какого именно движка есть исходники? Ссылки?
    http://rutracker.org/forum/viewtopic.php?t=3592016

    "Надо хоть глянуть что за игра. Это же mmorpg? От них обычно очень дурно пахнет, сделаны под копирку за редким исключением."

    Вообще-то это игра 2004 года (до этого был первый Эверквест выпущенный в 1999 году), все современные игры, включая ВоВ это копирка с Эверквеста а не наоборот. По качеству графика она на десяток лет превосходит тот же Рифт вместе с ВоВом, разве что пост-эффектов нет, и это при том, что рендер не менялся с 2004 года...

    Увы, игра уже пережила пик своей популярности и потихоньку загибается, сейчас она уже Free2Play... Но в ближайшее время должен выйти Эверквест 3, на новом графическом движке, куда переброшены все ресурсы со второго Эверквеста.

    ОтветитьУдалить