Как я анимацию из Half-Life 2 на Biped пересаживал
Скелет персонажей в Half-Life 2
Ещё во времена школьной молодости я насобачился вытаскивать модельки из Half-Life 2. Тогда я ещё игрался с Blitz3D и использовал их в качестве тестовых сеток и анимаций. Игре уже больше одиннадцати лет, а и модели и анимации оттуда до сих пор смотрятся достойно.
И вот, когда я, наконец, пересел на Unity, мне снова понадобились тестовые ассеты. Для своей первой демки я, вспомнив бородатые годы, вытащил скелет с анимацией из Второй Халвы. Но в релиз вальвовский скелет не вставишь. Во-первых, с инверсной кинематикой там некоторые неудобства. Во-вторых, из открытых источников на него ничего не подгрузишь. В-третьих, конечно, имя каждой кости с “ValveBiped” начинается, что палевно… Нет, конечно, можно и переименовкой заняться, но первые две проблемы это не решает.
А какой нынче скелет в моде? Конечно, Бипед!
Бипед — это заготовка структуры костей, разработанная авторами 3ds max для риггинга и анимации человекоподобных персонажей (Что и отражено в названии biped — bipedal, “двуногий”), практически стандарт де-факто. Он имеет много настроек, таких как количество сегментов в позвоночнике, шее, наличие хвоста и количество сегментов в нём, наличие или отсустствие пальцев… Короче, Бипед подходит для анимации самых разных персонажей, от человека до брахиозавра. Плюс ещё масса удобств для анимации и риггинга. А, самое главное, Бипед позволяет сохранять с него анимацию отдельно, и потом загружать его в другой Бипед. И анимация будет работать в силу возможностей даже на скелете другой конфигурации, причём, как правило, вполне пристойно и без сбоев. Отсюда — не проблема найти того, кто на заказ сделает анимацию на бипед или купить готовую, большое количество совместимых анимаций, которые можно найти бесплатно в Интернете.
Приключения при переезде на Бипед
Собственно, так я и подумал: перескиню свою модельку на Бипед, найду где-нибудь в Интернете анимацию стояния на месте и ходьбы, а потом буду по мере надобности заменять тестовые анимации на релизные. Сказано — сделано. Перескинил. А где анимации взять?
Скачал с cgpeers уже давно всем кто в теме известные паки MonsterBones и TrueBones (последний, кстати, весом без малого 8 ГБ, это даже в конце 2015 года не хрен собачий!), стал смотреть. Половина анимок там вообще была с бипедом несовместима, остальное… Ну, там я нашёл анимацию где Бипед играет в баскетбол, анимацию, где Бипед сидит в невидимой кабине грузовика, давит педали, крутит баранку и бибикает. Где Бипед , вообразив себя самураем, бешено размахивает невидимой катаной во все стороны. Но нет, чёрт возьми, того, что мне было надо: Бипед стоит ровно на месте. Бипед идёт вперёд. Короче, в этих паках есть всё, но только не то, что надо. Ну, что ж я, в конце концов от бесплатных паков-то хотел? Как это часто бывает, если хочешь хорошего результата, придётся напрячь жопу!
История одной конвертации
У нас было: две виртуальные машины с разными версиями Виндовс ХР, девять версий Макса, четыре версии Фотошопа и целое море различных билдов юнити всех дат и хотфиксов. А также: пятьсот метров максскриптов, девять гигабайт ни на что не годных анимаций .bip и .bhv, половина из которых не работала, официальная справка и несколько выдранных из Half-Life 2 моделек. Не то чтобы это был необходимый набор для геймдева, но, раз уж начал собирать коллекцию, то к делу надо отнестись серьёзно!
Интерфейс скрипта "Bippy"
Самое интересное, что анимация из халвы меня устраивала более чем… Вот только не на бипеде она. Как можно это совместить? Ведь этот скелет и есть почти бипед! Все кости на месте, только названия другие. А что если создать бипед, а потом максскриптом скопировать в его кости каждый ключ анимации с соответствующих костей изначального скелета?
Как это часто бывает, хорошая мысль приходит в голову нескольким хорошим людям. Оказалось, что скрипт, это делающий, уже есть и называется “Bippy”. Собственно, с его помощью указываешь, какие кости твоего скелета соответствуют каким костям бипеда, и он копирует анимацию в бипед. Но не всё так просто. Во-первых, автор забил на свой скрипт болт ещё в 2010 году, и он несовместим с версией Макса 2014, которой я пользуюсь в данный момент. Но, как ни странно, закомментив часть кода, мне удалось заставить его работать (позже я исправил эту часть кода окончательно, исправив совместимость). Бипед создался… И его раскособенило, как показано на гифке во врезке. Вроде бы, анимация есть, но ноги выгнуты в обратную сторону, голова смотрит назад, плечи повёрнуты на 90°…
Меняем кватернионы
Изначальный результат конвертации
Ориентации костей скелета Valve не соответствуют Biped'овским
Детальное ковыряние выявило, что, хоть скелет Вальв — это “почти бипед”, но большинство костей имеют совершенно иную ориентацию.Тогда я попытался через Hierarchy -> Affect Pivot Only повернуть пайвоты костей. И после этого Bippy стал создавать бипед нормально! Но при этом анимация раскособенилась уже на самом скелете. Уже не коленями назад, но совершенно не так, как надо.
Dummy с корректными ориентациями, созданные моим скриптом
Решение я придумал такое: сделать Dummy для каждой кости, припарентить его к ней, и сделать ему pivot в ориентации такой же, как ориентация соответствующей кости бипеда. После тестов на костях ног выяснилось, что это работает! Дело оставалось за малым: сделать такие Dummy для каждой кости скелета. А потом для каждого файла с анимацией, которую предполагалось конвертировать. Да, работы тут на часы и дни…
Пофикшенный бипед с анимациею
Но на помощь пришёл MaxScript. На нём я написал программу, которая по заранее заданному соответствию “Название кости” — “Кватернион” создаёт необходимые Dummy, правильно привязанные и ориентированные. Пришлось повозиться несколько часов, ведь кватернионы пришлось подбирать вручную для каждой кости. К счастью, они отличались от изначальных с кратностью в 90 Эйлеровских ° (в случае с конечными костями ног — на 45°). После создания и привязки Dummy программа в пространстве парента меняет Dummy поворот на корректный.
Запускаем Bippy и… работает!
При загрузке анимации в другой бипед его всё равно раскорячило
Но радоваться было ещё рано. Как я уже говорил, для меня основным преимуществом бипеда было то, что для него можно сохранять и загружать анимацию, совместимую с другими Бипедами. А что же будет, если сохранить нашу анимацию в *.bip, а потом загрузить на свежесозданный бипед? Результат неутешителен. Руки-ноги на месте, но нижняя кость спины почему-то оказалась в бедре.
Долго смотрел и так и сяк, не мог понять, чем же бипед, созданный скриптом, отличается от “нормального”, и что же провоцирует баг? Потом оказалось, что слона-то я и не приметил! У Biped Root и Biped Pelvis ориентации тоже разные! А я для тестов указывал в Bippy в качестве рута пелвис, поскольку, во-первых, они двигаются вместе, во-вторых, у вальвовского скелета рута не было вовсе. Тогда я в своём скрипте создал второй Dummy, привязанный к Pelvis, но ориентированный как Root “нормального” бипеда. После конвертации анимация была рабочая и выглядела точно так же. Но что там с сохранением/загрузкой? Работает!
К этому результату я шёл с перерывами на зарабатывание денег и другие неотложные дела несколько недель. Но всё же теперь конвертация анимаций из Half-Life 2 в так нужный мне Бипед налажена! Я подебил! Парад, пиво, салют!
Корректно сконвертированная и загруженная на бипед другой конфигурации анимация
You can leave a comment with "Facebook":
Не забывайте оставлять комментарии при помощи "ВКонтакте":