Наряду с используемыми элементарными анимациями, такими как моргание и подрагивание лица, наиболее важным аспектом лицевой анимации является синхронизация губ. Помните, что губы изменяют форму в соответствии с каждой произносимой фонемой, которые вы и хотите воспроизвести в анимации.
При воплощении синхронизированной анимации губ может быть использовано множество методов. На данный момент самым распространенным способом создания синхронизированной анимации губ является использование скриптов (произносимых и написанных) в паре со словарем фонем, используемым для разбиения всех произносимых (и написанных) слов на последовательности фонем.
Скрипт содержит точную произносимую и синхронизируемую с губами последовательность. Например, предположим, что вы хотите, чтобы игровой персонаж произнес "Hello and welcome" синхронно с движением губ. Используя текстовый
4. Видимо — опечатка. 1/3 секунды это 333 миллисекунды. — Примеч. науч. ред.
редактор, введите точную фразу и сохраните ее в текстовом файле. Далее, используя любую программу редактирования звука, произнесите и запишите эту фразу. Убедитесь, что вы сохранили ее в стандартном файле .WAV
После того как вы выполнили это, вы можете разбить фразу на последовательность фонем. Это делается при помощи словаря фонем, который является файлом данных, содержащим последовательности фонем для каждого слова, хранимого в словаре. Соединяя последовательности для каждого слова, вы можете создать последовательности, соответствующие скриптам.
Например, в определении словаря фонем для слова "Hello" будут следующие фонемы: hh, ah, l и ow. Каждая из этих четырех фонем ассоциирована с соответствующим лицевым мешем. По мере обработки каждой фонемы во время лицевой анимации лицевой меш морфирует в соответствии со звуками. Для последовательности "Hello and welcome" будут использованы следующие фонемы hh, ah, l, ow, ae, n, d, w, eh, l, k, ah и m. Совместное использование скрипта и словаря творит чудеса.
Пока что эта хорошая идея, а как она работает? Давайте рассмотрим процесс написания, записи и обработки данных, который в результате станет синхронизированной анимацией губ. Начнем с написания скриптового файла (тестового файла). Этот скрипт должен содержать все слова произносимые вами или дублером.
Далее, используя формат записи с высоким качеством, запишите скрипт слово в слово. Говорите медленно и отчетливо, делая паузы между словами. После того как вы закончили со скриптом, вы можете очистить звуковой файл, сделав максимальную громкость и убрав статические помехи. Также полезным может быть обработка звука с помощью фильтра, чтобы преобразовать звуки между словами в паузы.
На рис. 11.7 изображена волновая форма нескольких слов, которые я записал для иллюстрации технологии синхронизации губ.
Вот здесь и начинается самая веселая часть! Используя словарь фонем, возьмите написанный скрипт и преобразуйте каждое слово в последовательность фонем. Используя звуковой файл, протестируйте каждое слово (по его звуковой волне) и определите их общую длительность. Длительность каждого слова определяется скоростью анимации для каждой последовательности фонем.
Как определить длительность каждого слова звукового файла? Или точнее, как узнать где находится каждое слово? Помните, имеется скрипт, содержащий точную последовательность произносимых слов. С его помощью вы определяете какое слово является каким, а как же определить положение и длину каждого слова?
Помните, как я сказал вам, чтобы вы говорили медленно, добавляя небольшие паузы между словами? Эти паузы являются как бы сигнальными указателями. Пауза означает конец одного слова и начало другого. Посмотрите еще раз на

Рис. 11.7. Волновая форма слов "Hello and welcome!"
звуковую волну рис. 11.7. На этот раз я пометил паузы между словами и использовал их для изолирования слов. На рис. 11.8 показана новая звуковая волна, с выделенными словами и паузами.

Рис. 11.8. Звуковая волна была разбита на секции, означающие слова и паузы
Теперь, я уверен, вы начинаете понимать значение использования скрипта в сочетании со словарем! Используя значение времени (основанное на частоте воспроизведения и положении звука), вы можете вернуться к последовательности фонем и использовать значения времени для ее анимации. Что может быть проще?
И сразу же в качестве примера, посмотрите на программу, которая работает аналогично только что изученному принципу - Linguistic Information Sound Editing Tool (Инструмент звукового редактирования лингвистической информации) корпорации Microsoft.
Использование лингвистического программного обеспечения корпорации Microsoft
Используя концепции применения скриптов, голосов и словарей фонем, пришло время перейти к реальной программе, которая составляет последовательности фонем. Эта программа, Linguistic Information Sound Editing Tool корпорации Microsoft, или для краткости LISET, анализирует файлы .WAV, с записанными в них голосами. В паре с напечатанным скриптом она создает последовательность фонем, которую вы можете использовать в своих играх.
Программа LISET является частью замечательного программного набора Agent корпорации Microsoft. Agent это полноценный пакет анимационных и Голосовых программ, позволяющий пользователям взаимодействовать с анимированными персонажами, встроенными в приложения и веб-странички. Представьте, вы можете иметь виртуального гида, который бы показывал посетителям ваш веб-сайт, и, более того, выглядел бы и говорил как вы!
Чтообы иметь такие возможности, как полная обработка речи, включая синтез речи из текста, обработка фонем и синхронизация губ, вы определенно должны посмотреть на пакет Agent. Для получения дополнительной информации о нем посмотрите сайт http://www.microsoft.com/msagent корпорации Microsoft.
Установите Agent в вашу систему, если вы еще не сделали этого. Убедитесь, что LISET также установлен, поскольку очень скоро он нам пригодится. После того как вы все проинсталлировали, запустите LISET. (Ищите его в меню "Programs" ("Программы").) На рис. 11.9 показано основное окно программы LISET.
После запуска LISET вы можете загрузить файл WAV, который содержит произнесенный голосом скрипт. Щелкните пункт меню File и выберите Open. Появится диалоговое окно Open, позволяющее указать расположение файла WAV Найдите его, выберите и щелкните Open, чтобы продолжить.
После загрузки файла WAV он сразу готов к обработке. Однако необходимо указать текстовый скрипт, чтобы LISET мог сопоставить его со звуковой волной. Видите окно редактирования Text Representation (Представление текста) наверху приложения LISET? Именно туда вставляется текстовый скрипт. Однако не спешите, потому что окно редактирования может содержать только ограниченное количество букв. Так что пытайтесь вставлять скрипты блоками по 65,000 слов или менее за раз.

Рис. 11.9. Linguistic Information Sound Editing Tool корпорации Microsoft позволяет вам загружать файлы WAV и отмечать кусочки звуковых волн маркерами фонем
Посмотрите еще раз на рис. 11.9, где вы можете видеть, что я загрузил файл WAV и ввел соответствующий текст. Для проверки последовательности фонем скрипта щелкните Audio (Аудио) и выберите Play (Играть). Видите маленький рот в правом верхнем углу LISET? По мере проигрывания звука маленький рот меняет свою форму в соответствии с произносимыми фонемами. Замечательно, не правда ли?
Для получения настоящего удовольствия щелкните Edit и выберите Generate Linguistic Info (Сгенерировать лингвистическую информацию). Через несколько мгновений (и появления окна продвижения) последовательность фонем будет проанализирована, а информация о них будет наложена на звуковую волну. Посмотрите на рис. 11.10, чтобы увидеть, что я имею ввиду.
LISET выполняет приличный объем работы, помещая фонемы в правильные положения в звуковом файле, но если что-то не совсем правильно, вы можете вручную изменять положения и продолжительности каждой фонемы.
Во время перемещения мыши над каждой фонемой вы заметите, что указатель меняется. На правой и левой фанице фонемы курсор меняется на двойной квадрат со стрелочками, означая, что если вы щелкните и переместите мышь, размер фонемы изменится. Щелчок внутри самой фонемы (не на ее краях) выделит небольшую часть звуковой волны.

Рис. 11.10. Слово "test" состоит из четырех фонем (t, eh, s и t), которые находятся сверху звуковой волны. Заметьте, что пауза в конце слова также помечена
Вы можете вьщелить кусочки звуковой волны, щелкнуть Edit и выбрать Replace Phoneme (Заменить фонемы), Delete Phoneme (Удалить фонему), Insert Phoneme (Вставить фонему) или Insert Word (Вставить слово). Replace Phoneme позволяет вам изменять фонемы на другие, Delete Phoneme удаляет фонему из последовательности. Используя две функции Insert, вы можете вручную помещать новые слова или фонемы в звуковую волну.
После того как вы обработали и разместили последовательность фонем, отображаемых LISET, вы можете сохранить информацию о них. Щелкните File и выберите Save As. Выберите путь и имя сохраняемого файла, и все готово!
В результате использования LISET последовательности фонем хранятся в специальных файлах, имеющих расширение .LWV. Единственной проблемой является то, как использовать эти файлы в собственных программах? Как насчет конвертирования их во что-нибудь более читаемое?
Конвертирование файлов LISET в .X
Формат файла .LWV, используемый приложением LISET, содержит всю информацию о фонемах, необходимую для создания синхронизированной лицевой анимации губ. Единственной проблемой является то, что вы не хотите иметь делос форматом файла .LWV в своих проектах. Необходим способ преобразования последовательности фонем из формата .LWV в какой-нибудь более читаемый формат, например .X.
Все правильно, .X опять приходит на помощь! Компакт-диск этой книги содержит вспомогательную программу, называемую ".LWV to .X Converter" (для краткости ConvLWV), которая преобразует файлы .LWV в .X. Посмотрите конец этой главы, чтобы узнать местоположение этой программы. Программа является простой и очень удобной в использовании. Для преобразования файла .LWV в .X все, что необходимо сделать, - это щелкнуть кнопку "Convert .LWV to .X", как показано на рис. 11.11.

Рис. 11.11. Программа ConvLWV предоставляет шесть управляющих элементов, самым важным из которых является кнопка "Convert .LWV to .X"
После того как вы нажмете кнопку "Convert .LWV to .X", появится диалоговое окно "Select .LWV File for Import" ("Выберите импортируемый файл .LWV"). Используйте управляющие элементы этого окна для указания исходного конвертируемого файла .LWV. После выделения файла нажмите Open.
Далее вы увидите диалоговое окно Select .X File for Export (Выберите экспортируемый файл .X). Введите путь и имя файла, в который будет экспортирована последовательность фонем, и нажмите Save. Фу! Через несколько секунд в вашем распоряжении окажется .X файл, содержащий последовательность фонем!
Формат экспортируемого файла .X выглядит следующим образом:
xof 0303txt 0032
// Экспортировано с помощью программы .LWV to .X Converter v1.0 (с) 2002-
//03 by Jim Adams
Header {
1; 0; 1;
}
Как и обычный .X файл, экспортированная последовательность фонем начинается с определения формата заголовка. После него находится бесстыдная рекламная вставка и объект данных Header. Ничего, чего бы вы не видели раньше, не происходит. Однако далее следует то, на что необходимо обратить внимание.
// DEFINE GUID(Phoneme, 0x12b0fb22, 0x4f25, 0x4adb, 0xba, 0x0, 0xe5, 0xb9,
// 0xc1, 0x8a, 0x83, 0x9d)
template Phoneme
{
<12B0FB2 2-4F2 5-4adb-BA0 0-E5B9C18A83 9D> DWORD Phonemelndex; DWORD StartTime; DWORD EndTime;
}
// DEFINE_GUID(PhonemeSequence, // 0x918dee50, 0x657c, 0x48b0,
// 0x94, 0xa5, 0x15, 0xec, 0x23, 0хе6, 0x3b, 0хс9); template PhonemeSequence
{
<918DEE5 0-65 7C-4 8b0-9 4A5-15EC2 3E6 3BC9> DWORD NumPhonemes;
array Phoneme Phonemes[NumPhonemes];
}
Последовательность фонем, хранимая в файле .X, использует два специализированных шаблона. Первый шаблон, Phoneme, хранит информацию о каждой фонеме. В нем содержится идентификационное число фонемы (номер меша фонемы, о котором вы скоро прочитаете) и начальное и конечное время (в миллисекундах) анимации фонемы.
Так и есть, шаблон Phoneme фактически является ключевым кадром анимации! Вот здесь то и появляется шаблон PhonemeSequence. Он используется для хранения массива объектов Phoneme, определяющего полную последовательность анимации. Количество ключевых кадров анимации определяется первым значением шаблона PhonemeSequence, после которого следует массив ключевых кадров. Такая реализация структуры делает загрузку анимации фонем быстрой и безболезненной.
Давайте продолжим рассмотрение только что созданного файла .X (или даже того, который я создал для иллюстрирования работы конвертатора). Следующий объект PhonemeSequence, названный PSEQ, содержит небольшую анимацию, состоящую из пяти ключевых кадров.
PhonemeSequence PSEQ { 5;
116; 0; 30;, // 0x007 4 603; 30; 200;, // 0x025b 115; 200; 2 3 0;, // 0x0073 116; 230; 270;, // 0x0074 9 5; 2 7 0; 4 6 8;; // 0x0'05f
}
Как вы можете видеть, каждая фонема представлена десятичным Unicode значением IPA (для каждого ключевого кадра в комментариях показано шестнадца-теричное значение IPA). Чтобы сделать систему лицевой анимации по настоящему универсальной, вы можете создать лицевой меш для каждой фонемы. Как вы можете догадаться, ни при каких обстоятельствах не используется более нескольких сотен различных мешей для лицевой анимации, так что необходимо ограничить количество Unicode значений IPA, с которыми вы работаете.
Вот здесь-то вспомогательная программа ConvLWV и проявляется во всей красе - переприсваивая известные вам Unicode значения IPA в меньшие, которыми легче управлять в приложениях. Посмотрев на рис. 11.11, вы заметите, что нижняя часть уточняет использование базы данных преобразования. Эта база данных используется для переприсваивания Unicode значений IPA в значения, заданные вами. Например, вместо использования 0х025Ь для представления фонемы "eh" (например, в словах "ten" и ^erry") вы можете использовать значение 0x0001 (которое может также служить индексом меша фонемы в анимационном движке).
Потом эти значения используются в качестве индексов в массиве мешей, представляющих фонемы. Теперь, вместо использования сотен мешей, вы можете работать с маленьким набором мешей, использующихся для множества фонем. Каждый раз, когда вы переприсваиваете Unicode значения IPA и преобразуете файл .LWV в .X, эти Unicode значения IPA преобразуются в объекте PhonemeSequence. Например, после переприсвоения набора Unicode значений IPA предыдущий объект PSEQ может выглядеть так:
PhonemeSequence PSEQ (
5;
2; 0; 30;, // 0x0074
3; 3 0; 200;, // 0x02 5b
6; 200; 2 3 0;, // 0x0073
2; 230; 270;, // 0x0074
0; 270 ; 468 ; ; // 0x005f
}
По умолчанию все Unicode значения IPA переприсваиваются таким же значениям: 0х025Ь всегда преобразуется в 0х025Ь, 0x0075 всегда 0x0075 и т. д. Для изменения переприсвоенного Unicode значения IPA найдите его в окне списка, в нижней правой части диалогового окна ConvLWV (как показано на рис. 11.12).

Рис 11.12. В окне списка щелкните два раза на Unicode значения IPA, которое вы хотите изменить. Слева отображается Unicode значение, а справа расположено переприсваеваемое значение
В качестве примера, предположим, вы хотите пререприсвоить фонему "eh" (Unicode значения IPA0x025b) значению 0x0001. В окне списка найдите 0х025Ь (слева) и щелкните два раза на нем. Появится диалоговое окно Modify Conversion Value (Измените преобразуемое значение), которое позволяет вам ввести новое значение (см. рис. 11.13). Введите 0x0001 и щелкните ОК. Значения, содержащиеся в окне списка, обновятся, и вы можете продолжить переприсваивать их.

Рис. 11.13. Диалоговое окно Modify Conversion Value позволяет вам изменять Unicode значения IPA. Введите новое используемое значение и нажмите OK
Так что тяжелая работа была проделана не зря, вы имеете возможность сохранять, а потом перезагружать переприсвоенные значения. Это особенно удобно, если вы работаете со множеством различных последовательностей, используя один и те же значения преобразования. Для сохранения базы данных преобразования щелкните Save Database (Сохранить базу данных) и введите имя файла. Все базы данных преобразований сохраняются в файле с расширением .IPA Для загрузки базы данных преобразования щелкните кнопку Load Database (Загрузить базу данных), укажите загружаемый .IPA файл и нажмите Load.
Последними двумя кнопками программы ConvLWV являются Clear Database (Очистить базу данных) и Reset Database (Сбросить базу данных). Кнопка Clear Database устанавливает все значения преобразования в 0x0000, означая, что всем Unicode значениям IPA переприсваиваются нули. Щелкнув на кнопку Reset Database вы устанавливаете все значения преобразования в соответствующие Unicode значения IPA (таким образом 0х025Ь преобразуется в 0х025Ь, 0x0075 в 0x0075 и т. д.)
Вот и все об использовании программы ConvLWV. Смелее, попробуйте все - записывать, обрабатывать, конвертировать файлы .LWV в .X. Когда вы будете готовы, можно переходить к загрузке последовательностей фонем в ваши программы при помощи специализированного анализатора файлов .X.
⇐Автоматизирование основных функций || Оглавление || Использование анализатора файлов .X для последовательностей⇒