Unity3D + Kinect, или анимации на коленке
Вступление Здравствуй, уважаемый читатель. Прежде чем начать, мне хотелось бы немного рассказать о цели и формате моей статьи. Обычно с такими заголовками статьи носят обозревательный характер, в них описываются технические стороны реализации того или иного решения или приводится инструкция по эксплуатации и т.д. Выводы же читатель делает самостоятельно. Прежде чем написать эту статью, я провел небольшую исследовательскую работу на предмет аналогов. И нашел несколько статей как на самом хабре, так и массу видео материалов на ютубе. Поэтому я решил не писать очередной обзор технологии, а поделиться впечатлениями, рассказать о граблях, на которые мы наступили, и привести немного «кухонной» аналитики. Цель этой статьи — помочь вам определиться, использовать или нет данный метод. В первую очередь она рассчитана на технических специалистов, хотя и не пестрит техническими деталями. Но так же будет полезна и всем остальным — арт-специалистам, менеджерам проектов да и просто всем, кто, так или иначе, связан с разработкой игр. Возможно, ссылка на данную статью поможет выбить бюджет у начальства и ускорить разработку/повысить качество вашей будущей игры. Итак, приступим.Предпосылки Анимация — зачастую это «проблемное место» множества 3D-проектов. Конечно, все зависит от специфики проекта, но частенько эта специфика определяется именно сложностью и дороговизной производства качественной анимации. Модели, текстуры, скетчи, эффекты и даже интерфейс найти/заказать проще, чем пакет специфических анимаций для персонажа вашей игры. Иногда геймдизайн ограничен рамками, которые устанавливает анимация. Наиболее ярко это заметно в инди-проектах и проектах небольших команд. Увы, порой мы наблюдаем проблемы с анимацией и у крупных разработчиков. Например, выходит новая игра, в которой вроде бы все хорошо: и геймплей на высоте, и модели красивые, и стилистика выдержана, и даже эффекты вроде ничего… Но игра смотрится уныло, потому что персонажи бегают как на кол посаженные или все способности в игре имеют три анимации. Неоднократно я был свидетелем смерти интересных проектов, которые так и не родились, потому что разработчики не смогли найти ресурсы именно на анимацию. В итоге среди разработчиков бытует мнение, что качественная и разнообразная анимация — это дорого по ресурсам. И по деньгам, и по времени. Особенно, если мы хотим реалистичную анимацию гуманоидных персонажей. Именно с проблемой анимации мы столкнулись в одном из наших проектов и хотим поделиться опытом ее решения, который, возможно, будет полезен и вам, уважаемые читатели.Итак, у нас было две проблемы. Во-первых, конфликт желаний и возможностей. Хотелось много, качественно и разнообразно. Бюджет и ресурсы были ограничены, а времени — в обрез. Во-вторых, экспериментальный геймплей. В процессе разработки некоторые игровые концепции менялись, соответственно, менялась и визуализация. Хотелось, чтобы можно было быстро отреагировать на возможные изменения или добавление фичей. После небольшого исследования вариантов и возможностей мы задумались об использовании технологии Motion Capture, так как она отвечала всем нашим потребностям. Качество, разнообразие, возможность менять анимации на лету и т.д. Но цена технологии оказалась слишком высока. В среднем снять студию Motion Capture в Москве стоит 800–1000 у.е. в день, чистка анимации после записи 1–2 у.е. секунда. Мы стали искать альтернативы… и нашли — использование Kinect + iPi Motion Capture Software.Впечатления и пути решения проблем Я не буду описывать процесс записи анимации и вдаваться в технические детали, так как он подробно описан на сайте разработчиков софта (iPi Motion Capture Software) и в этой статье. Впечатления от использования данной технологии более чем положительные. При минимальных затратах ресурсов мы получили качественный результат. Весь процесс — от записи движений до импорта результатов в Unity3D — занимает в среднем 1–3 часа в зависимости от длительности записи (большая часть времени — это автоматический процесс распознания и пост-обработки). На выходе вы получаете готовый fbx файл, который просто импортируете в Unity3D, при этом, даже не занимаясь чисткой, можно получить вполне приемлемый результат. И участие профессионального аниматора не требуется. Нет необходимости в специальном помещении и спецодежде. Инструментарий предоставляет возможность как автоматической «чистки» анимации, так и ручной доводки в процессе. Самым главным плюсом является то, что можно экспортировать собственный скелет и связывать его со скелетом из записи. Это позволяет «на лету» увидеть будущий результат и откорректировать его по необходимости, ну и естественно, экспортировать конечный результат, заточенный под ваши нужды. Естественно, в процессе работы мы набили шишки и сделали выводы: 1. Знание — сила — не спешите записывать и экспортировать анимацию. Внимательно ознакомитесь с примерами и мануалами, посмотрите видео на ютубе. Полное понимание процесса сэкономит вам много времени и нервов. 2. От простого к сложному — не кидайтесь сразу записывать длинные и сложные анимации. Начните с простых. Таким образом вы постепенно познакомитесь с технологией и наберетесь опыта ее использования. 3. Калибровка — при калибровке 2х Kinect-ов мы не сразу разобрались, как правильно нужно настраивать камеры, и пару дней получали плохие результаты. Очень важно, чтобы после автоматической калибровки по специальной записи камеры в редакторе софта максимально точно совпадали с тем пространственным расположением, которое вы использовали при записи калибровочного видео. Этого можно добиться, двигая камеры в редакторе после калибровки. Обычно приходится сделать несколько итераций, пока совпадение не будет точным. 4. Подготовьте место — хотя для записи и не требуется специального места, но все же стоит заранее подготовиться. Учтите, что вам нужно 4×4 метра свободного пространства. Также стоит пометить на полу положение для ног, например с помощью изоленты. Это поможет занимать правильное положение между записями движений. Поставьте вне пределов видимости камер большое зеркало, так, чтобы вы видели себя с его помощью: так вы сможете контролировать точность движений. 5. Тренировка и дубли — заранее отрепетируйте и заучите те движения, которые планируете записывать и пишите по несколько дублей каждого движения, чтобы выбрать потом лучшее. 6. Пост-обработка — софт предоставляет неплохие инструменты пост-обработки. Даже если при распознании какие-либо кости были потеряны, можно подвигать, настроить их прямо в редакторе. Также присутствуют инструменты для сглаживания мелкого дрожания и т.д. После нескольких записей мы пришли к выводу, что доработку удобнее делать в редакторе, так как после экспорта настраивать анимации в другом редакторе не очень удобно. Хотя этот пункт скорее субъективен.Итоги Использование Kinect для записи анимаций на практике показывает себя как быстрый, простой в эксплуатации и недорогой способ получить качественные анимации для ваших игр и не только. Цена вопроса в среднем получается 12–40 тысяч рублей в зависимости от выбранной лицензии на ipiSoft и количества Kinect-ов, что не является большой финансовой преградой не только для студий, но и инди-разработчиков. При этом если учесть, сколько будет сэкономлено времени и ресурсов при работе с аутсорсерами или штатными аниматорами, то этот подход получается очень выгодным. К тому же опробовать технологию можно абсолютно бесплатно. На весь необходимый софт распространяется 30-дневный триал, а достать 1–2 Kinect-а — это вообще не проблема. Конечно, Kinect — это не панацея от всех проблем. Нельзя, естественно, записать анимации негуманоидных персонажей. И сложную анимацию с резкими движениями записать не получится. Но технологии развиваются, например тот же Kinect — Демонстрация возможностей Kinect 2.0 — с таким распознанием качество анимаций будет просто великолепным. Преимущества использования Kinect для MotionCapture очевидны. Просто нужно попробовать. С удовольствием отвечу на любые вопросы связанные с темой статьи в комментариях.Ссылки Так как лень — это двигатель прогресса, привожу список полезных ссылок, кому лень гуглить самостоятельно: 1. ipiSoft Motion Capture — собственно сайт софта, где есть все необходимое. Уроки, примеры, дистрибутивы софта и т.д. 2. Экспорт MoCap данных в Unity3d — полезная статья с описанием процесса калибровки, экспорта анимации и пост-обработки. 3. Подборка роликов на YouTube — множество примеров как, что, куда и зачем. 4. Демонстрация возможностей Kinect 2.0 — демонстрация второй версии контролера. Перспективы открываются очень интересные.