Blitz GameDevСтатьи

Motion Capture – для тебя

Автор:

Статья как организовать у себя в игре Motion Capture.


Как понятно из названия это есть технология захвата движения. Реализация проста: к реальному "прототипу" в ключевых точках тела прикрепляются специальные датчики (или, как их еще называют, маркеры), расположение которых согласуется с компьютерным скелетом (что такое скелетная анимация слыхал?) оживляемой модели. Датчики передают свои пространственные координаты в компьютер, таким образом, компьютерная модель повторяет все движения человека. Соответственно все это пишется в файл.

Качество синтезированного движения напрямую зависит от количества и расположения датчиков. Датчики могут быть двух видов: механическими - они соединяются с компьютером при помощи проводов - и оптическими - информацию с них считывают специальные оптические устройства, а обработка и анализ данных производится с помощью специального программного обеспечения. Стоит эта аппаратура такие бабки, что нам с тобой ее никогда не купить, поэтому будем пользоваться готовыми каптурками и учится использовать оные в самодельных играх на Blitz. Готовые каптурки можно добыть из инета при помощи замечательной программы eMule или купить за бешеные бабки или заказать за те же немерянные бабки специально. Так что для начала полазай по интернету – простые движения там есть и бесплатно (www.help3d.com).

В данной статье я буду рассматривать только один формат mocap – BVH. Оный формат понимает Poser и MilkShape (если не понимает, скачай плагин от товарисча Keith Harrison). Итак, понадобятся следующие проги:

Poser 5.0 или какой есть

MilkShape с плагином

Exel – да да! Он самый мать его

готовый пример находится здесь


Итак, предположим, что у тебя есть некий файл с расширением BVH. Прежде всего, попробуем импортировать его в Milk. Если у тебя это получилось то я рад, но, скорее всего ничего не получится. Но все ж если получилось то ты увидишь некий скелет, а после нажатия play он начнет энергично двигаться. Но так бывает редко, потому что импортер milkа слишком простенький. Поэтому будем делать все по науке

Запускаем Poser. Выбираем фигурку (я выбираю самую низко полигонную фигуру мужика, т.к. в дальнейшем она нам не понадобиться). Должно быть нечто вроде:

Вот наш подопытный стоит, обречено разведя руки в стороны. Теперь следуй за мной FILE>IMPORT>BVH motion и открываем файл pushbroom1.bvh.


Тут тебя обязательно спросят, в какой системе координат этот файл. Обычно угадывается максимум за два раза.


Нажимай ось Х. На следующем диалоге нажимай “Scale Automaticaly” (его нажимай всегда!!)


Если все в порядке, то Poser подумает и мужик на экране станет в позу

А количество кадров волшебным образом увеличится

Нажимай коноповку play и любуйся движущимся мужиком

Бегает мужик? Ну и прекрасно. Если же он весь скрючен полимелитом и движется хрен пойми, как значит, ты не угадал с осями – попробуй проделать все сначала только при выравнивании выбери другую ось (например, Z)

Но стоп мля!! Куда ж этот паразит убежал! Ах, дерьмо! Нам подсунули каптуринг где движения персонажа сняты не на одном месте а “сложены” с передвижением оного в пространстве! А на хера мне это нужно я тебя спрашиваю? Делаем копию файла с другим названием (чтобы не испортить все) mocap1.bvh

Вот теперь берем Exel и FAR. В FAR открываем свою файлу и видим что-то вроде:

HIERARCHY

ROOT Hip

{

OFFSET 0.00 0.00 0.00

CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation

JOINT Abdomen

{

OFFSET 0.039181 5.637571 0.560720

CHANNELS 3 Xrotation Zrotation Yrotation

JOINT Chest

{

OFFSET -0.136063 7.190207 -0.124363

CHANNELS 3 Xrotation Zrotation Yrotation

JOINT Neck

И так далее. Строки, выделенные красным обозначают, по сути, позицию главного пивота (я подозреваю, что его зовут Hip). Надо отучить его бегать. Пролистывай всю текстовую херотень и ищи что то типа:

MOTION

Frames: 91

Frame Time: 0.033333

0.000000 40.686268 0.000000 18.670000 11.508200 -42.873402 25.080601 -5.416570 -9.038880 9.847430 1.558740 0.978336 0.000000 0.000000 0.000000 -22.438700 -19.457500 27.306101 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 -13.639200 -23.591801 -4.965010 79.363884 -4.707328 11.721649 99.661392 -0.553017 -0.737305 -26.850685 8.064922 -4.545406 -0.148866 4.300910 -2.889064 -0.969521 10.750637 -5.265257 -0.352224 -0.698024 0.196501 11.000000 -3.000000 0.000000 -0.703124 0.000000 0.000000 -0.351563 0.000000 0.000000 -6.328124 0.000000 0.000000 -0.175783 0.000000 0.000000 -0.878282 ....бла бла бла

Если ты не совсем идиет то ты уже понял что енто и есть те самые данные, которые задают положения костей скелета на каждый фрейм. Выдели все, что после Frame Time: 0.033333 до конца файла и скопируй в Exel. Если числа сразу ровненько встали по столбцам – хорошо. Если нет, то используй меню Exela Данные>Текст по столбцам и укажи разделитель “пробел”. Все на месте? А теперь берем первый и третий столб и забиваем их нулями нах. Чтоб сволочь не бегал. Можно еще второй столб нулями забить, чтоб по высоте не дергался. Но я ограничусь. Вот так вот

Теперича похерим в FAR все абсолютно после слова Frame Time: 0.033333 и захерачим туда из Exela измененные данные. Сохрани файл! А теперь назад в Poser. Надо сделать предыдущие шаги по загрузке BVH. Опять ответить на простые вопросы о выравнивании и масштабировании (ты еще не забыл относительно, какой оси выравнивается наш файл?) Если у тебя появилось сообщение Ran Out Channel Data значит, ты добавил где-то лишний столбец, а етого делать нельзя! Вот лишние строки можно (в конце файла) – все равно Poser считает столько сколько надо. И вот чудо – мужик делает все эволюции, стоя на одном месте! (Если у тебя не так то позырь исправленный файл здесь)

Теперь вернемся собственно к играм. Ура! Надо экспортировать отмасштабированное и отредактированное BVH из Poser и запихать его в milk. Делай EXPORT> BVH motion. Или смотри файл в примере. Запускаем Milk и импортируем в него етот файл.

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

Я импортировал модель impа.

Как говорится не в лес не в красну армию. Будем двигать, и растягивать impa подгоняя его к скелету. Должно быть так

В фотомодели беднягу, конечно, не возьмут, но я сделал все что мог. Теперь прикрепим полигоны к косточкам и ОПА! Модель для Milka есть в примере.

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

By [WC]Killer
Оригинальная статья находится здесь.

11 октября 2006