Как я анимацию из Half-Life 2 на Biped пересаживал

initial-valve-skeleton.png
Скелет персонажей в Half-Life 2
Ещё во времена школьной молодости я насобачился вытаскивать модельки из Half-Life 2. Тогда я ещё игрался с Blitz3D и использовал их в качестве тестовых сеток и анимаций. Игре уже больше одиннадцати лет, а и модели и анимации оттуда до сих пор смотрятся достойно.

И вот, когда я, наконец, пересел на Unity, мне снова понадобились тестовые ассеты. Для своей первой демки я, вспомнив бородатые годы, вытащил скелет с анимацией из Второй Халвы. Но в релиз вальвовский скелет не вставишь. Во-первых, с инверсной кинематикой там некоторые неудобства. Во-вторых, из открытых источников на него ничего не подгрузишь. В-третьих, конечно, имя каждой кости с “ValveBiped” начинается, что палевно… Нет, конечно, можно и переименовкой заняться, но первые две проблемы это не решает.

А какой нынче скелет в моде? Конечно, Бипед!

На заметку
Бипед — это заготовка структуры костей, разработанная авторами 3ds max для риггинга и анимации человекоподобных персонажей (Что и отражено в названии biped — bipedal, “двуногий”), практически стандарт де-факто. Он имеет много настроек, таких как количество сегментов в позвоночнике, шее, наличие хвоста и количество сегментов в нём, наличие или отсустствие пальцев… Короче, Бипед подходит для анимации самых разных персонажей, от человека до брахиозавра. Плюс ещё масса удобств для анимации и риггинга. А, самое главное, Бипед позволяет сохранять с него анимацию отдельно, и потом загружать его в другой Бипед. И анимация будет работать в силу возможностей даже на скелете другой конфигурации, причём, как правило, вполне пристойно и без сбоев. Отсюда — не проблема найти того, кто на заказ сделает анимацию на бипед или купить готовую, большое количество совместимых анимаций, которые можно найти бесплатно в Интернете.


Приключения при переезде на Бипед


Собственно, так я и подумал: перескиню свою модельку на Бипед, найду где-нибудь в Интернете анимацию стояния на месте и ходьбы, а потом буду по мере надобности заменять тестовые анимации на релизные. Сказано — сделано. Перескинил. А где анимации взять?

Скачал с cgpeers уже давно всем кто в теме известные паки MonsterBones и TrueBones (последний, кстати, весом без малого 8 ГБ, это даже в конце 2015 года не хрен собачий!), стал смотреть. Половина анимок там вообще была с бипедом несовместима, остальное… Ну, там я нашёл анимацию где Бипед играет в баскетбол, анимацию, где Бипед сидит в невидимой кабине грузовика, давит педали, крутит баранку и бибикает. Где Бипед , вообразив себя самураем, бешено размахивает невидимой катаной во все стороны. Но нет, чёрт возьми, того, что мне было надо: Бипед стоит ровно на месте. Бипед идёт вперёд. Короче, в этих паках есть всё, но только не то, что надо. Ну, что ж я, в конце концов от бесплатных паков-то хотел? Как это часто бывает, если хочешь хорошего результата, придётся напрячь жопу!

История одной конвертации


На заметку
У нас было: две виртуальные машины с разными версиями Виндовс ХР, девять версий Макса, четыре версии Фотошопа и целое море различных билдов юнити всех дат и хотфиксов. А также: пятьсот метров максскриптов, девять гигабайт ни на что не годных анимаций .bip и .bhv, половина из которых не работала, официальная справка и несколько выдранных из Half-Life 2 моделек. Не то чтобы это был необходимый набор для геймдева, но, раз уж начал собирать коллекцию, то к делу надо отнестись серьёзно!


bippy-interface.png
Интерфейс скрипта "Bippy"
Читайте также
bippy fixed max 2015.png Bippy script fixed for 3ds Max 2015
Bippy script fixed for 3ds Max 2015
Самое интересное, что анимация из халвы меня устраивала более чем… Вот только не на бипеде она. Как можно это совместить? Ведь этот скелет и есть почти бипед! Все кости на месте, только названия другие. А что если создать бипед, а потом максскриптом скопировать в его кости каждый ключ анимации с соответствующих костей изначального скелета?

Как это часто бывает, хорошая мысль приходит в голову нескольким хорошим людям. Оказалось, что скрипт, это делающий, уже есть и называется “Bippy”. Собственно, с его помощью указываешь, какие кости твоего скелета соответствуют каким костям бипеда, и он копирует анимацию в бипед. Но не всё так просто. Во-первых, автор забил на свой скрипт болт ещё в 2010 году, и он несовместим с версией Макса 2014, которой я пользуюсь в данный момент. Но, как ни странно, закомментив часть кода, мне удалось заставить его работать (позже я исправил эту часть кода окончательно, исправив совместимость). Бипед создался… И его раскособенило, как показано на гифке во врезке. Вроде бы, анимация есть, но ноги выгнуты в обратную сторону, голова смотрит назад, плечи повёрнуты на 90°…

Меняем кватернионы


bippy-fuckup.gif
Изначальный результат конвертации
wrong-orientation.png
Ориентации костей скелета Valve не соответствуют Biped'овским
Детальное ковыряние выявило, что, хоть скелет Вальв — это “почти бипед”, но большинство костей имеют совершенно иную ориентацию.Тогда я попытался через Hierarchy -> Affect Pivot Only повернуть пайвоты костей. И после этого Bippy стал создавать бипед нормально! Но при этом анимация раскособенилась уже на самом скелете. Уже не коленями назад, но совершенно не так, как надо.

dummy-with-correct-orientations.png
Dummy с корректными ориентациями, созданные моим скриптом
Решение я придумал такое: сделать Dummy для каждой кости, припарентить его к ней, и сделать ему pivot в ориентации такой же, как ориентация соответствующей кости бипеда. После тестов на костях ног выяснилось, что это работает! Дело оставалось за малым: сделать такие Dummy для каждой кости скелета. А потом для каждого файла с анимацией, которую предполагалось конвертировать. Да, работы тут на часы и дни…

valve-walk-forward-fixed.gif
Пофикшенный бипед с анимациею
Но на помощь пришёл MaxScript. На нём я написал программу, которая по заранее заданному соответствию “Название кости” — “Кватернион” создаёт необходимые Dummy, правильно привязанные и ориентированные. Пришлось повозиться несколько часов, ведь кватернионы пришлось подбирать вручную для каждой кости. К счастью, они отличались от изначальных с кратностью в 90 Эйлеровских ° (в случае с конечными костями ног — на 45°). После создания и привязки Dummy программа в пространстве парента меняет Dummy поворот на корректный.

Запускаем Bippy и… работает!

bip-load-fucked-up.gif
При загрузке анимации в другой бипед его всё равно раскорячило
Но радоваться было ещё рано. Как я уже говорил, для меня основным преимуществом бипеда было то, что для него можно сохранять и загружать анимацию, совместимую с другими Бипедами. А что же будет, если сохранить нашу анимацию в *.bip, а потом загрузить на свежесозданный бипед? Результат неутешителен. Руки-ноги на месте, но нижняя кость спины почему-то оказалась в бедре.

Долго смотрел и так и сяк, не мог понять, чем же бипед, созданный скриптом, отличается от “нормального”, и что же провоцирует баг? Потом оказалось, что слона-то я и не приметил! У Biped Root и Biped Pelvis ориентации тоже разные! А я для тестов указывал в Bippy в качестве рута пелвис, поскольку, во-первых, они двигаются вместе, во-вторых, у вальвовского скелета рута не было вовсе. Тогда я в своём скрипте создал второй Dummy, привязанный к Pelvis, но ориентированный как Root “нормального” бипеда. После конвертации анимация была рабочая и выглядела точно так же. Но что там с сохранением/загрузкой? Работает!

К этому результату я шёл с перерывами на зарабатывание денег и другие неотложные дела несколько недель. Но всё же теперь конвертация анимаций из Half-Life 2 в так нужный мне Бипед налажена! Я подебил! Парад, пиво, салют!

correct-loaded.gif
Корректно сконвертированная и загруженная на бипед другой конфигурации анимация

You can leave a comment with "Facebook":
Не забывайте оставлять комментарии при помощи "ВКонтакте":
Яндекс.Метрика