Разработчиками из Эдинбургского Университета представлен новый алгоритм для создания реалистичных движений персонажей в играх. Обученная на Motion Capture траекториях нейросеть пытается копировать движения реальных людей, но при этом адаптирует их под персонажей видеоигр.
Одна нейросеть способна управлять сразу несколькими действиями в игре. Открывание дверей, перенос предметов, использование мебели. При этом она динамично изменяет положения ног и рук, чтобы персонаж мог реалистично держать ящики разного размера, садиться на разные по размеру стулья, а также пролезать в проходы разной высоты.
Обычно под управлением персонажами в играх с помощью ИИ подразумевается полный контроль усилий в конечностях, основанный на каком-нибудь физическом движке, имитирующем законы физики. Этим занимается область машинного обучения под названием Reinforcement Learning. К сожалению, таким способом пока не удается достичь реалистичных движений.
С другой стороны, можно попытаться обучить нейросеть имитировать движения реальных людей, снятые с помощью Motion Capture. Именно таким способом около года назад был достигнут значительный прогресс в реалистичной анимации 3d персонажей.
По этой теме было несколько последовательных научных работ, но наиболее полное описание можно почитать в работе Towards a Virtual Stuntman, посвященной нейросети DeepMimic (https://www.youtube.com/watch?v=vppFvq2quQ0).
Основная идея заключается в том, чтобы при обучении имитировать движения человека начинать эпизод не с самого начала Motion Capture трека, как делали раньше, а из случайных точек по всей траектории. Существующие алгоритмы Reinforcement Learning исследуют окрестности точки старта, поэтому до конца траектории чаще всего не доходили. Но если каждый эпизод начинать вдоль всего трека, то увеличивается шанс, что нейросеть обучится повторять всю траекторию.
Позднее эту идею подхватили и совсем в других областях. Например, обучая нейросеть на прохождениях игр людьми, и тоже начиная эпизоды не с начала, а из случайных точек (конкретно в этом случае с конца, и постепенно сдвигаясь к началу), в OpenAI обучили нейросеть проходить игру Montezuma's Revenge. Которая не поддавалась до этого обычным Reinforcement Learning алгоритмам.
Без этого трюка попытки обучить нейросеть копировать сложные движения заканчивались неудачей, потому что нейросеть находила более короткий путь. Пусть не дающий такую большую награду, как за всю траекторию, но все же какая-то награда была. К примеру, вместо того чтобы делать кувырок назад, нейросеть просто слегка подпрыгивала и плюхалась на спину.
Но с таким подходом, нейросеть без проблем изучает траектории практически любой сложности.
Основная проблема DeepMimic, мешавшая напрямую применить ее к видеоиграм, заключается в том, что не удалось обучить нейросеть выполнять сразу несколько разных анимаций. Приходилось на каждую анимацию обучать отдельную нейросеть. Авторы пробовали объединять их разными способами, но больше 3-4 анимацией скомбинировать не удавалось.
В новой работе эта проблема тоже не устранена до конца, но сделан большой прогресс по плавному переходу между разными анимациями.
Надо отметить, что этой проблемой страдают все существующие на данный момент подобные анимационные нейросети. Например, эта нейросеть, тоже обученная на имитации Motion Capture, способна на физическом движке честно управлять огромным числом мышц (326!) гуманоидного персонажа. Адаптируясь к разному весу поднимаемых тяжестей и различным повреждениям суставов. Но при этом для каждой анимации нужна отдельная обученная нейросеть.
Стоит понимать, что цель подобных нейросетей не просто повторить человеческую анимацию. А повторить ее на физическом движке. При этом Reinforcement Learning алгоритмы делают это обучение надежным и устойчивым к помехам. Потом такую нейросеть можно перенести на физического робота, отличающегося по геометрии или по массе от человека, но он все равно будет продолжать реалистично повторять движения людей (начиная обучение с чистого листа, как уже говорилось, добиться такого эффекта пока не удается). Или, как в работе выше, можно виртуально исследовать как будет двигаться человек с травмами ног, чтобы разработать более комфортные протезы.
Еще в первой DeepMimic были зачатки такой адаптации. Можно было перемещать красный шар, а персонаж каждый раз бросал мяч в него. Прицеливаясь и соизмеряя усилие броска, чтобы попасть точно в цель. Хотя был обучен на единственном треке Motion Capture, который такой возможности не предоставляет.
Поэтому это можно считать полноценным обучении ИИ, а имитация человеческих движений просто позволяет ускорить обучение и сделать движения визуально более привлекательными, привычными для нас (хотя с точки зрения нейросети они могут быть не самыми оптимальными при этом).
Новая работа пошла в этом направлении еще дальше.
https://www.youtube.com/watch?v=7c6oQP1u2eQ
Здесь нет физического движка, это чисто анимационная система для видеоигр. Но упор сделан на реалистичное переключение между несколькими анимациями. И на взаимодействие с игровыми предметами: перенос предметов, использование мебели, открывание дверей.
Архитектура нейросети состоит из двух частей. Одна (Gating network) на основе текущего состояния state и текущей цели goal выбирает какую анимацию использовать, а другая (Motion prediction network) предсказывает ближайшие кадры анимации.
Все это было обучено на наборе Motion Capture треков с помощью имитационного Reinforcement Learning.
Но главное достижение этой работы в другом. В том, как разработчики научили нейросеть работать с разными по размеру предметами и протискиваться в разные по ширине или высоте проходы. Чтобы положения рук и ног выглядели реалистично и соответствовали размерам объекта, с которым персонаж взаимодействует в игре.
Секрет оказался прост: augmentation!
Сначала из Motion Capture трека они определили точки контакта рук с подлокотниками кресла. Потом заменили модель кресла на более широкую, и пересчитали Motion Capture траекторию, чтобы руки касались подлокотников в тех же точках, но на более широком кресле. И заставили нейросеть имитировать эту новую, сгенерированную Motion Capture траекторию. Аналогично с размерами ящиков, высотой проходов и т.д.
Повторив это множество раз с различными 3d моделями окружения, с которыми предстоит взаимодействовать игроку, нейросеть научилась реалистично обращаться с разными по размеру предметами.
Для взаимодействия с окружением в самой игре, дополнительно понадобилось вокселизировать предметы вокруг, чтобы это работало как сенсоры на входе нейросети.
В итоге получилась очень хорошая анимация для игровых персонажей. С плавными переходами между действиями и с возможностью реалистично взаимодействовать с различными по размеру предметами.
Настоятельно рекомендую просмотреть видео, если кто этого еще не сделал. В нем очень подробно рассказано как они этого добились.
https://www.youtube.com/watch?v=7c6oQP1u2eQ
Этот подход можно применять для анимации в том числе четвероногих животных, получая непревзойденное качество и реалистичность движений животных и монстров:
https://www.youtube.com/watch?v=uFJvRYtjQ4c
Ссылки
Видео: https://www.youtube.com/watch?v=7c6oQP1u2eQ
Страница проекта с исходниками: https://github.com/sebastianstarke/AI4Animation
PDF файл с подробным описанием работы: SIGGRAPH_Asia_2019/Paper.pdf