19 комментариев

avatar
Мощно. Интересно насколько ресурсоемки необходимые расчеты.
  • 0
avatar
Это смотря какая стадия расчетов тебя интересует. Предварительная обработка, обучение или выполнение? :)
Готовая нейосеть не слишком требовательна к ресурсам. Нередко пакет визуализации персонажей в игре подкрепляют тремя-четырьмя небольшими нйросетями, по надобности.

Я вот так и не смог выделить из статьи важную для себя информацию. Чем-же конкретно управляет эта новая нейросеть?
Контроллер персонажа — действительно очень большой агрегат. Контроль только на картинке выглядит монолитно, на деле же там с два десятка подсистем разного плана, каждая из которых уже сама по себе является серьезным проектом.
  • 0
avatar
Эта нейросеть берёт на входе вектор движения, направление тела, рельеф и предыдущий путь. На выходе получается положение скелетной модели. Насколько я понял.
  • 0
avatar
Да, все так, настолько же и я это понял. И это никак не отвечает на мои вопросы. :)
Это общая информация, которой можно описать почти любую подсистему контроллера персонажа.
Доберусь до этого как-нибудь, да почитаю поподробнее.
  • 0
avatar
А можешь кратко рассказать, почему вот этой одной магической нейросети недостаточно, чтобы забыть о чём то ещё в контексте движения персонажа?
  • 0
avatar
Сам по себе скелет гуманоида тривиален, в нем не больше шарниров, чем у рядового человека.

Мокап или ручные анимации являются только источником для анимации скелета. Напрямую они не применяются, если речь идет именно о контроллере.

Все анимации жестко стратифицированы по своим типам. И вот тут начинаются интересные тонкости.

Скелет персонажа делится на группы: голова, грудной отдел, поясница, ноги. Групп может быть больше или меньше, по надобности.
Каждой группе определяется своя подсистема контроля. Каждая такая подсистема снабжена своей оперативной памятью, своей группой датчиков и своим набором выходных регистров.

Датчики связываются с окружением и телеметрией персонажа (Уровень хп, близость к препятствию слева на высоте плеча, наличие ранения в конечность, уровень утопания в жидкости или тип почвы и.т.д.).

Оперативная память на то и оперативная, что нужна для операций подсистемы. Там содержатся временные расчеты подсистемы и ее текущее состояние.

А выходные регистры — это наборы коэффициентов для типов анимаций. Как видно, каждая подсистема контроля так же получает информацию снаружи, пережевывает ее и выплевывает некоторые рекомендации.

Да, коэффициенты — это только рекомендации. Поставить модель в правильную позу исходя из ее окружения и состояния можно только учтя все эти рекомендации в правильном соотношении.

Сведением коэффициентов занимается структура «Blend Tree» — дерево смешивания. В ее недрах так же есть и оперативная память, и датчики, и регистры.
Только регистрами дерева смешивания являются веса матриц для костей скелета, а датчиками являются именно эти самые рекомендательные коэффициенты.
Дерево смешивания входными данными распоряжается по своему разумению, может и отбросить. Его поведение зашивается в ресурсах конфигурации.

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

Для правильного положения стоп или ладоней на плоскостях (да и для целой кучи всяких разных случаев) активно используется инверсная кинематика.
Конфигурируемая особым, отличным от анимации, типом ресурсов, ИК своенравно вклинивается в задуманные художниками анимации и меняет их под свои нужды.
Эта подсистема дополнительно навешивается на контроллер и так же связывается с деревом смешивания, подправляя результаты некоторых датчиков дерева.

Голова и глаза тоже должны быть живыми. Персонаж должен уметь моргать как человек, а не как робот. Даже для век существует своя подсистема, датчики которой следят как за самим персонажем, так и за обстановкой. Перс должен уметь щуриться, глядя в сторону источника света.
За положением глаз и головы следят еще две подсистемы, внимание которых сконцентрировано на точках интереса в окружении персонажа.
Еще есть лицевая, мимическая и голосовая подсистемы.

На очереди — руки. На курок тоже отдельная подсистема нажимает. Мечами-топорами машет подсистема владения оружием с конфигурацией для соответствующей экипировки.
Туда же вмешивается подсистема инверсной кинематики рук.

Еще сбоку подкрадывается подсистема физики одежды и тоже творит свое темное дело со своими коэффициентами.

Сборки контроллера персонажа бывают разные, где-то что-то есть, где-то чего-то нет. Каждая подсистема нуждается в настройке. В каждом проекте люди принимают решение вводить или не вводить различные подсистемы в контроллер. А если контроллер пишется людьми самостоятельно (что зачастую и происходит), то зачастую его возможности ограничены сроками исполнения работ.

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

Так вот, мне слабо верится что вот эта одна нейросеть может заменить дерево смешивания вместе со всеми подсистемами. Больше похоже на замену курсовой подсистемы, которая обычно отвечает за движение персонажа в разных формах.
На видео и в тексте все преподносится туманно, с каким-то намеком.

Кратенько получилось… =)
Комментарий отредактирован 2017-05-08 19:53:31 пользователем FrankStein
  • +10
avatar
В том то и дело, что по их словам — на выходе нейросети непосредственно координаты, углы и скорости джоинтов скелета. То есть заменят собой Blend Tree + IK (в части ног).
  • 0
avatar
на выходе нейросети непосредственно координаты, углы и скорости джоинтов скелета.
Это и есть намеки и туманные недомолвки.
Я буду рад поберечь свое время, если ты поможешь и в деталях все пояснишь. :)

Больше всего мне интересно, раз уж это новшество заменяет контроллер персонажа, как эта нейросеть справляется со смешиванием анимаций всего скелета персонажа?
Как она отличает разные типы оружия и степени повреждения конечностей? Как она управляет головой и глазами?
Главное — как она симулирует физику одежды и волос?

Входной слой у нейросети скудный, для поддержки всей модели нужно на порядки больше датчиков.
  • 0
avatar
ммм ты точно ничего не путаешь?)
Их система конечно не отличает типы оружия и степени повреждения конечностей, и глазами тоже конечно не управляет — она решает только одну задачу: процедурную генерация анимации перемещения по сложной поверхности. Они нигде и не говорят что одна их нейросеть может заменить полностью весь контроллер персонажа.
  • 0
avatar
Всё было очень, очень интересно, спасибо большое :)
Но
скелет гуманоида тривиален, в нем не больше шарниров, чем у рядового человека.
В одной руке человека 23 степени свободы. Всё-таки игровые модели эту реальность сильно упрощают. Ну, и она не нужна для существующих игровых механик. :)
  • +3
avatar
Хм… если получится бодро генерировать анимацию с интерактивностью на уровне Assassin's Creed, то это будет очень круто. =)
  • 0
avatar
Я правильно понимаю, что анимации не заскриптованы, а формируются на лету в зависимости от ландшафта? Или там базовый набор анимаций, которые применяются в зависимости от контекста?
Очень здорово выглядит, было бы круто видеть такое в играх.
  • 0
avatar
Если бы было заскриптовано, то не было бы необходимости в нейросети. =)
  • +1
avatar
Я в этом вообще ничего не понимаю — вот и спрашиваю. Спасибо :)
Для меня это все на уровне общих впечатлений и ощущений — это для меня основной ориентир и он в данном случае показал «палец вверх».
  • 0
avatar
Идея такая. Они взяли человека, обвешали датчиками и прогнали по разным поверхностям. Потом отдали это нейросети и получили систему, которая умеет определять правильное положение скелетной модели в динамике.
  • +1
avatar
Если я правильно понимаю, то технически ничто не мешает скормить аналогичной сети и провести через аналогичную процедуру обучения любые уже имеющиеся заготовки анимации, будь то снятые моушнкепчером или заскриптованные вручную, и получить на выходе модуль для бесшовной анимации.
Учитывая, как коряво обычно выглядят переходы между анимациями (потому что их банально нет), это уже довольно многообещающе, не говоря о остальных полученных результатах.
Не знаю откуда такой всплеск, десять лет назад в университете меня учили, что нейронные сети мертвы, вычислительных ресурсов недостаточно, алгоритмы обученмя несовершенны, всё плохо.

А теперь это новый тренд в компьютерных науках. Что-то плюс нейронная сеть. Так же как сейчас у физиков что-то плюс графен.
Комментарий отредактирован 2017-05-08 11:56:09 пользователем Avicorn
  • 0
avatar
Ну еще раньше также хоронили виртуальную реальность. Прогресс такой прогресс. =))
  • 0
avatar
Помимо того, что подросли вычислительные мощности (особенно в контексте видеокарточек), ещё и научились делать эффективные многослойные нейронные сети. Детально я, правда, не копал.
  • 0
avatar
Вот кстати да, видеокарточки. Я помню, как нам на дискретке рассказывали, что рост вычислительных мощностей на порядок увеличивает размерность матрицы решений линейных уравнений (а нейронные сети в упрощённом виде есть ни что иное, как матрица коэффициентов) буквально на единицы. Т.е. производительность поднялась в десять раз и вместо N мы сможем за разумное время решать матрицу N+1.

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

Ну и алгоритмы обучения видимо тоже подросли.
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.