Анимация лица - один из тех немногих случаев, когда классические методы её сотворения не столько нерабочие, сколько нерациональные, ведь наличие продолжительных анимаций (которые еще нужно записать) под каждый из диалогов - Сизифов труд.
Конечно это не касается важных катсцен, синематиков и игр жанра "интерактивное кино", где записанные лицевые анимации занимают значимый объем.
Эта статья в очередной раз коснется темы процедурной анимации, генерации меша и главное - процесса преобразования реплик из аудио-формата в движение вершин модели.
Из звука в текст
На первый взгляд можно подумать, что записанные реплики со звука просто конвертируются в текст, однако lip sync работает не со словами, а со звуками.
Если быть еще более точным, то с фонемами - это минимальная различительная языковая единица, уверен вы помните школьные фонетические разборы со школы и представляете, что одна буква может быть как мягкой, так и твердой, как ударной, так и нет.
Специализированный софт без проблем конвертирует услышанные им звуки в фонемы, а дальше пойдет фонетика пойдет куда глубже - определение по артикуляционным признакам. Здесь все не так сложно как кажется, ведь по сути они различают как двигаются отдельные части речевого аппарата - движение языка, вдох/выдох и еще куча аспектов.
Например иллюстрация выше отражает ключевые их положения для произведения определенных звуков. В русском языке вот 42 фонемы, среди которых 5 гласных и 37 согласных, однако если фокусироваться на сильно упрощенные, почти лишь визуально отличимые артикуляционные признаки, то получим не более 20 по-настоящему отличимых вариаций форм.
Применение в игре
И так, после стадии конвертации мы имеем как аудио-файл, так и набор данных в текстовом формате, с которыми и будут работать дальнейшие алгоритмы.
Подготовительной стадией является создание либо blend shape'ов, либо более гибких и традиционных костных анимаций, для каждой из вышеописанных вариаций форм. Хотя зачастую это зависит от потребности, например в Скайриме не более 15 анимаций рта.
Средь этих двух, сложно сказать какой из вариантов лучше. Blend shap'ы позволяют куда более просто как для движка, так и для автора, создавать небольшие детали - морщины и изгибы. Однако костная анимация позволяет добиваться менее причудливых результатов при смешивании и может редактироваться прямо из движка.
Вроде бы и все. Основной сложностью здесь является создание пресетов анимаций и дальнейшая настройка, где скрипт будет считывать и подчиняться ранее записанным фонемам. Кстати из-за того, что в реальном времени эти процедуры плохо скажутся на производительности, условные программисты Лупа и Пупа, в результате некоторых путаниц, могут получить плохой результат, где действующее лицо будет будто нелепо не попадать под фонограмму .
Если вам вдруг показалось что вторая половина статьи недостаточно емкая и познавательная, то вам не показалось. Ранее я уже рассказывал как работают самые популярные методы создания лицевой анимации здесь : Как создают лицевую анимацию