Как машинное обучение меняет анимацию
Всем привет! Меня зовут Слава Смирнов. Четыре года в геймдеве и машинном обучении (Gosu.AI, пара своих проектов), в прошлом — 8 лет в рекламе (BBDO, DDB и тп). Всю карьеру продюсера/продакта работаю с творческими людьми: креативщиками, разработчиками, копирайтерами, геймдизайнерами, дизайнерами, аниматорами. Больше всего мне нравится помогать им реализовывать крутые свежие идеи и амбиции. Мы все хотим делать круто, но реальность такова, что нашего текущего тулбокса часто недостаточно, а тот, что есть на рынке — либо находится где-то там, либо стоит столько, что проще сразу думать о чем-то другом, зачастую жертвуя качеством идеи. Сегодня я хочу поговорить про то, как технологии машинного обучения помогают делать анимацию в играх круче. Материал написан как для начинающих специалистов, так и для людей, имеющих большой опыт работы с анимацией.
Сначала определимся в терминах, и в особенности — с хайповым термином "машинное обучение". Предлагаю смотреть на "машинное обучение" как на "концентрированное" знание о той или иной предметной области, выраженное в заранее обученной специфической модели. Упрощенные примеры:
- знание у кардиолога о признаках аритмии сердца и знание модели, которая посмотрела на 10 000 сканов сердца и помогает кардиологу не ошибиться с диагнозом;
- знание водителя о параллельной парковке и знание модели автопилота, который помогает водителю парковаться по нажатию на кнопку.
Теперь, когда мы определились, что машинное обучение — это концентрированное знание о предметной области, которое помогает профессионалам, давайте поговорим о задачах. Всю анимацию в играх грубо можно разделить на две больших задачи:
- Персонажная анимация
- анимация игрового персонажа или NPC
- Синематики
- создание кат-сцен в игре
- создание контента вокруг игры (тизеры, трейлеры, мини-сериалы, контент для фанатов и все, что помогает в маркетинге игры)
До того, как что-то или кого-то анимировать — нужны анимационные данные. По большому счету, есть 3 способа их получения:
- Кифреймить руками
- Программные методы
- Технологии захвата
Поговорим про каждую из них, рассмотрим особенности, ограничения, возможности и где там машинное обучение.
Кифреймить руками
Это один из самых старых и поэтому традиционных методов получения анимации. Когда трава была зеленее, из-за сравнительной простоты (и дороговизны других методов) этот метод получил широкое распространение. По сути, представляет собой восстановление в софте руками по ключевым кадрам положения точек, определяющих ключевую геометрию скелета. Поставили точку, откатали на следующий ключевой кадр, поменяли положение точки — софт сделал все промежуточные кадры между ключевыми. Математически ключевая задача звучит так — создать промежуточные кадры между ключевыми кадрами наиболее эффективно/дешево. Традиционный метод — интерполяция.
Роль машинного обучения здесь заключается в попытке угадать, какую задачу решает пользователь и максимально эффективно оптимизировать координаты в промежуточных кадрах. В целом, метод кифрейма руками — очень гибкий и при должном усилии и хорошем и обязательном подборе референсов позволяет достичь очень высокого качества анимационных данных. К тому же, практически незаменим для 2D графики. Но вместе с гибкостью приходят и недостатки. Поскольку метод завязан на ручной работе человека, его крайне сложно масштабировать, не говоря уже про сохранение качества при масштабировании. Грубо говоря, если нужно получить 10000 минут анимации для нескольких персонажей, кифреймить руками будет стоить, как крыло самолета (если не больше) и при этом крайне сложно, а значит и дорого контролировать качество на каждом из юнитов. С другой стороны, если нужно сделать 10 секунд походки одного персонажа с налётом утренней меланхолии поздней осени или, скажем, один уникальный боевой удар для только одной кат сцены, способ кифреймить руками отлично себя зарекомендовал.
Программные методы
Программные методы получения анимационных данных — набор решений, основанных на попытке воспроизвести движения за счет описания движения туловища в коде. Тут уже разные FK/IK solver-ы, физика и ограничения, которые призываны динамически просчитать физические нагрузки и взаимодействия костей на туловище и за счет этого дать движение на следующем кадре. Математически задача звучит примерно так: при заданных уравнениях, описывающих физические взаимодействия объектов (столкновение точек скелета с пространством вокруг, самоударения, гравитация, дополнительные силы) необходимо рассчитать положение скелета в следующий момент времени.
Преимущества программных методов вытекают из природы получения данных — принципы и физика движения, описанные в жестком коде. Такую анимацию легко считать на клиенте, а также, раз это код, сравнительно легко распространять и масштабировать. Из недостатков, опять же обусловленных природой получения данных (код), стоит отметить два.
Первый — низкий контроль над артистичностью. Добиться осенней меланхолии уже крайне сложно, если вообще возможно. Если хочешь контролировать артистичность, придется сильно попотеть, находя какой-то баланс параметров в коде, не говоря уже про отсутствие удобных контролов "меланхолия" или, скажем, "агрессивность".
Второй недостаток — фундаментальная неидеальность любой физики, описанной в коде. Накодить полноценную физику — крайне сложная задача.
Соответственно, с учетом преимуществ и ограничений из применений появляется наиболее очевидное — локомоушен для передвижения персонажа. Работает почти из коробки, при желании можно тратить много времени на поиск артистичности, но при этом (если сделано хорошо) легко и быстро откликается на инпут пользователя. Таким образом, выбор внутри таких программных методов решений заключается в том, насколько гибко нужно контролировать артистичность и пластику (от очень грубых и не гибких решений до чуть более контролируемых, но все равно определяемых архитектурой кода). Из классных и относительно "свежих" решений стоит отметить локомоушен на нейронках, где есть гибкая адаптируемость к неопределенному зареее окружению. Но в целом у метода остается крайне низкий контроль над артистичностью.
Технологии захвата движений
По сути представляют собой нахождение координат объектов относительно самих себя и пространства с помощью определения расстояния от камеры до точек на теле человека. Основное преимущество перед кифреймом или программными методами заключается в сочетании артистичности и масштабируемости. Артистичность намного более гибкая, чем у программных методов, а если нужно сделать много анимации, то стоит заметно дешевле, чем кифреймить руками.
Захват движений (или мокап, от англ. motion capture) можно разделить на 3 подхода по технологиям определения координат точек в пространстве:
- Студии с камерами и маркерами
- Костюмы с инерционными датчиками
- Безмаркерные решения (на основе технологий машинного обучения)
Маркеры и камеры
Пожалуй, с маркеров с камерами и началась вся область захвата движений около 15+ лет назад (конечно, в Лос-Анджелесе). Упрощенно схема работы выглядит так: обвесим помещение высокочастотными камерами, на актера повесим датчики с лучами, в каждый момент времени (определенный характеристиками камеры) с помощью луча считаем расстояние от камеры до точки. Соединяем все лучи в каждый момент времени, получаем положение точки в пространстве в текущем кадре. Повторяем все в следующий кадр. Получаем движение маркера. Делаем тоже самое для всех маркеров на всех кадрах. Получаем движение персонажа во времени. Звучит просто, но внутри — хардкорная математика по наиболее эффективному, но точному определению положения точки по лучам в пространстве и относительно других маркеров. Этот вид захвата — камеры и маркеры — дает очень высокое качество, но при этом при масштабе стоит не как крыло самолета, а как отсек космической станции. Несколько камер за тысячи и десятки тысяч долларов + стойки + просторное помещение + работа смело выходят за 5 млн рублей. Это если не считать лицензии на софт для работы камер.
Покупать и строить такое могут позволить себе, прямо скажем, единицы студий в мире (у Ubisoft много студий захвата, у Sony — целая пачка). Поэтому лет 10 назад стали появляться студии захвата, которые уже все построили у себя и оказывают услуги пусть и редко, но для многих клиентов в течение года. В 2020 году в Москве один съемочный день в такой студии стоит около 150-200 тыс руб. Но поскольку студии захвата берут посуточную оплату, это накладывает новое ограничение. Необходимо минимизировать поиск артистичности, а значит — заранее понимать, что именно снимаем и сколько снимаем, что лишает многих команд творческого поиска в процессе и делает весь процесс очень жестким. Спланировал, приехал, оплатил, снял, увидел, надо потюнить — платишь опять. И каждый раз кост увеличивается и увеличивается. Не говоря уже про масштабирование контента после вертикального среза. Короче говоря, круто, но очень дорого, сложно масштабировать и не гибко для поиска артистичности.
Костюмы
Костюмы как продукт для геймдев рынка появились лет 5-7 назад. Костюм состоит из нескольких инерциальных сенсоров (IMU; inertial measurement unit), замеряющих относительное ускорение самих себя. После установки биологической модели человека и начальной позиции актера происходит определение координат сенсора в момент времени. В среднем, в зависимости от качества сенсоров, которое влияет на качество данных, такой подход с лицензией на софт стоит около 0.7 млн рублей на год (как неделя съемок в студии). Купил костюм, оплатил подписку, убрал помехи от металла вокруг (та еще проблема в офисах, квартирах и домах) — экспериментируй вдоволь. Костюм технологически проигрывает студиям захвата в качестве полученных данных, что приводит иногда к чуть большему количеству работы в чистке данных после съемок, но дает востребованное в современных условиях качество — гибкость в части поиска той самой артистичности. Но есть и проблемы. Первая — точность определения координат в условиях городской застройки с металлом (балки, перекрытия) и сетями (wifi, радио и др), а значит и качество данных. Вторая проблема — ограничение на свободу движений актеров в костюмах, что снижает артистичность. Третья проблема — логистика. Несколько актеров — несколько костюмов, и не забываем про российскую таможню. В сочетании со стоимостью костюма и подписки на софт костюмы уже не столь привлекательны для средних студий и небольших команд.
Безмаркерные технологии
Относительно свежий подход к получению анимационных данных. Позволяет определять трехмерные координаты точек относительно самих себя и в пространстве по пикселям из плоского видео. Для этого не требуются маркеры — используются технологии машинного обучения как концентрированного знания о многообразии движений человека. На 2020 год безмаркерные технологии, использующие машинное обучение, лишь иногда проигрывают в качестве захвата костюмам. Например, редко, но еще встречаются проблемы с очень необычными движениями (добивающий удар в прыжке с поворотом) или крайне быстрыми вращениями вокруг своей оси (сальто в воздухе). При этом система учится, становится лучше и с каждым кадром — проблем все меньше.
Безмаркерные технологии крайне удобны в двух случаях. Либо для быстрого прототипирования анимации, либо для создания множества синематиков. Встал перед камерой дома, заснял, получил, тут же посмотрел в 3d софте / движке, если надо — тут же переснял. И все это без костов на дорогущее оборудование и персонал студии захвата или проблемы с костюмами. Другими словами, когда анимации много и нет задачи в каждом дубле получить налёт утренней меланхолии поздней осени, а нужна стабильная кастомная походка персонажа — у безмаркерных технологий захвата на основе машинного обучения нет равных. Снимать актера на обычную камеру без больших костов заранее — намного проще, чем кифреймить руками анимации в сотни минут, проще и более гибко, чем раскапывать и тюнить чужой код в программных методах и уж в разы доступнее по косту, чем костюм или студия захвата.
В качестве примеров использования технологий безмаркерного захвата и утилизации машинного обучения можно привести соседнюю область — лицевую анимацию. Все приведенные примеры так или иначе используют машинное обучение для нахождения кипойнтов и координат по плоскому изображению с обычной камеры.
Попроще и бесплатно:
Приложение от UE4 (только iOS)
ААА-качество, но сильно-сильно платно:
Dynamixyz
стоимость состоит из:
- лицензия на софт — около 300 000 рублей в год (зависит от требований по качеству и риалтаймовости)
- камеры не входят в стоимость
- крепление камеры (HMC) — от 180 000 руб до 700 000 рублей (зависит от требований по проводам и требованиям по риалтаймовости)
Решение где-то посередине:
Faceware
стоимость состоит из:
- лицензия на софт— от 25 000 руб в год до 200 000 руб в год (зависит от требований по качеству и риалтаймовости)
- камеры и крепление (HMC) — от 400 000 руб до 2 000 000 руб (зависит от требований по качеству и риалтаймовости)
* * *
Таким образом, анимация остается большой проблемой для многих средних и небольших студий в силу стоимости или географии. В нашей команде мы написали софт, который позволяет осуществлять захват движений человека с обычных камер уровня GoPro или iPhone/Samsung Galaxy. Полученное с камеры видео софт процессит в риалтайме и выводит в Blender, потихоньку выводим в UE4.
Безмаркерные технологии захвата движения отлично решают задачу получения анимационных данных, когда:
- нет миллионов на анимацию
- примерно понятно, что снимаем, но хотелось бы тюнить артистичность по ходу дублей вживую
- чтобы подход масштабировался лучше, чем кипойнты руками или дорогие костюмы
Наша команда и софт заточены на помощь как раз средним или небольшим командам с минимальными бю. Самые крутые результаты случаются через коллабы, так что если вы хотите попробовать технологию — смело пишите мне в telegram. По запросам от команд и студий мы видим два сценария использования:
- Быстрое прототипирование персонажной анимации, особенно на стадии до вертикального среза. Когда нужно быстро посмотреть анимацию на персонаже в движке. Убедиться, что это работает в сцене и идти дальше.
- В части синематиков — спрямление производственного пайплайна. Чтобы избежать всех этих бесконечных итераций (импорт/экспорт, посмотрел, потюнил, импорт/экспорт, чай/кофе и так по кругу), хочется максимально спрямить этот процесс, т.е. видеть анимацию максимально быстро в движке и производить много-много креативов для маркетинга.
А еще мы работаем над тем, чтобы сделать захват рук так же в риалтайме с обычной камеры и сразу в движок без дорогущего оборудования. Но тут пока обойдемся только статичным тизером.
* * *
Резюмируя — если вам нужна анимация, сначала ответьте на такие вопросы:
- Зачем вам анимация (персонажная или синематики)
- Какой уровень требований по артистичности у вас есть в рамках вашей задачи
- Какой объем анимации будет сделан и насколько часто это будет необходимо
- Готовы ли сформировать максимально детальные требования заранее или хотите искать артистичность по ходу
- Какая будет анимация (лицо, руки, туловище или все вместе)
- Кто будет тем человеком, который выберет и соберет лучшее решение под вашу задачу и все вводные
Примеры:
Анимация боя для кат-сцены нужна разово и нам нужно лучшее из возможных качество захвата (готовы все описать подробно и поэтому переделывать потом не планируем):
- 5 дней в студии
- великолепное качество
- разово
- примерно 0.7-1 млн руб
Мы примерно знаем какая и насколько много нам нужно анимаций движения, при этом будем много экспериментировать и искать по ходу:
- Костюм
- хорошее качество
- безлимит
- примерно 1-1.5 млн руб
Анимация нужна постоянно или разово посмотреть. Качество нужно нормальное, максимально чтобы не надо было чистить:
- безмаркерные решения
- нормальное качество
- безлимит
- 10-500 тысяч рублей
Конечно, практически всегда в зависимости от уникальности задачи и ограничений используется смесь подходов.
* * *
Надеюсь, такая обзорная статья была полезна. Если хотите узнать про те или иные аспекты подробнее или пообщаться про коллаб — велкам в telegram.
Делайте круто — не круто сделают без нас с вами.