- •Введение
- •Глава 1. Подготовка к изучению книги
- •Установка DirectX SDK
- •Выбор отладочных или рабочих версий библиотек
- •Настройка вашего компилятора
- •Установка директорий DirectX SDK
- •Привязывание к библиотекам DirectX
- •Установка используемого по умолчанию состояния символа
- •Использование вспомогательного кода книги
- •Использование вспомогательных объектов
- •Проверка вспомогательных функций
- •Двигаясь дальше по книге
- •Глава 2. Синхронизация анимации и движения
- •Использование движения, синхронизированного по времени
- •Считывание времени в Windows
- •Анимирование с использованием временных меток
- •Перемещение, синхронизированное со временем
- •Движение вдоль траекторий
- •Создание анализатора маршрутов .X файла
- •Создание внутриигровых кинематографических последовательностей
- •Посмотрите демонстрационные программы
- •TimedAnim
- •TimedMovement
- •Route
- •Cinematic
- •Глава 3. Использование формата файла .X
- •Работа с .X шаблонами и объектами данных
- •Определение шаблонов
- •Работа со стандартными шаблонами DirectX
- •Открытие .X файла
- •Перечисление объектов данных
- •Получение данных объекта
- •Создание класса .X анализатора
- •Загрузка мешей с использованием D3DX
- •Загрузка мешей, используя анализатор .X
- •Загрузка скелетных мешей
- •Загрузка анимации из .X
- •Загрузка специализированных данных из .X
- •Посмотрите демонстрационные программы
- •ParseFrame
- •Глава 4. Работа со скелетной анимацией
- •Начало скелетной анимации
- •Использование структур скелетов и иерархий костей
- •Использование скелетной структуры и скелетного меша
- •Загрузка иерархий из .X
- •Изменение положения костей
- •Обновление иерархии
- •Работа со скелетными мешами
- •Загрузка скелетных мешей из .X
- •Создание контейнера вторичного меша
- •Сопоставление костей фреймам
- •Обновление скелетного меша
- •Визуализация скелетных мешей
- •Глава 5. Использование скелетной анимации, основанной на ключевых кадрах
- •Использование наборов скелетных анимаций, основанных на ключевых кадрах
- •Использование ключей при анимации
- •Работа с четырьмя типами ключей
- •Считывание данных анимации из .X файлов
- •Прикрепление анимации к костям
- •Обновление анимации
- •Посмотрите демонстрационные программы
- •Глава 6. Комбинирование скелетных анимаций
- •Комбинирование скелетных анимаций
- •Соединение преобразований
- •Улучшение объектов скелетной анимации
- •Посмотрите демонстрационные программы
- •Глава 7. Создание кукольной анимации
- •Работа с физикой твердого тела
- •Создание твердого тела
- •Расположение и ориентирование твердых тел
- •Обработка движения твердых тел
- •Использование сил для создания движения
- •Соединение твердых тел с помощью пружин
- •Обеспечение обнаружения столкновений и ответной реакции
- •Создание систем кукольной анимации
- •Определение состояния твердого тела
- •Хранение костей
- •Создание класса управления куклой
- •Создание данных костей
- •Вычисление ограничивающего параллелепипеда кости
- •Установка сил
- •Объединение костей
- •Обработка столкновений
- •Восстановление соединений костей
- •Перестроение иерархии
- •Посмотрите демонстрационные программы
- •Глава 8. Работа с морфирующей анимацией
- •Морфинг в действии
- •Определение исходного и целевого меша
- •Морфинг мешей
- •Создание морфированного меша при помощи обработки
- •Визуализация морфированных мешей
- •Расчленение наборов
- •Создание морфирующего вершинного шейдера
- •Посмотрите демонстрационные программы
- •Глава 9. Использование морфирующей анимации, основанной на ключевых кадрах
- •Использование наборов морфируемой анимации
- •Создание шаблонов .X для морфируемой анимации
- •Загрузка данных морфируемой анимации
- •Визуализации морфированного меша
- •Получение данных морфируемого меша из альтернативных источников
- •Посмотрите демонстрационные программы
- •Глава 10. Комбинирование морфированных анимаций
- •Комбинирование морфированных анимаций
- •Использование базового меша в комбинированных морфированных анимациях
- •Вычисление разностей
- •Комбинирование разностей
- •Создание вершинных шейдеров комбинированного морфирования
- •Использование вершинного шейдера морфируемого комбинирования
- •Посмотрите демонстрационные программы
- •Глава 11. Морфируемая лицевая анимация
- •Основы лицевой анимации
- •Использование комбинированного морфирования
- •Использования фонем для речи
- •Создание лицевых мешей
- •Создание базового меша
- •Создание выражений лица
- •Создание мешей визем
- •Создание анимационных последовательностей
- •Создание последовательностей фонем
- •Использование анализатора файлов .X для последовательностей
- •Проигрывание лицевых последовательностей со звуком
- •Использование DirectShow для звука
- •Синхронизация анимации со звуком
- •Зацикливание воспроизведения звуков
- •Посмотрите демонстрационные программы
- •Глава 12. Использование частиц в анимации
- •Работа с частицами
- •Основы
- •Рисование частиц с помощью квадратных полигонов
- •Работа с точечными спрайтами
- •Улучшения визуализации частиц при помощи вершинных шейдеров
- •Оживление частиц
- •Передвижение частиц при помощи скорости
- •Использование интеллекта при обработке
- •Создание и уничтожение частиц
- •Управление частицами с помощью класса
- •Использование излучателей в проектах
- •Создание движков частиц в вершинных шейдерах
- •Посмотрите демонстрационные программы
- •Глава 13. Имитирование одежды и анимация мешей мягких тел
- •Имитация одежды в ваших проектах
- •Получение данных одежды из мешей
- •Приложение сил для создания движения
- •Воссоздание и визуализация меша одежды
- •Восстановление исходного меша
- •Добавление дополнительных пружин
- •Загрузка данных масс и пружин из .X файла
- •Создание анализатора .X данных одежды
- •Работа с обнаружением столкновений и реакцией на них
- •Определение объектов столкновений
- •Обнаружение и реакция на столкновения
- •Создание класса меша одежды
- •Использование мешей мягких тел
- •Восстановление мешей мягких тел
- •Посмотрите демонстрационные программы
- •Глава 14. Использование анимированных текстур
- •Использование анимации текстур в ваших проектах
- •Работа с преобразованиями текстур
- •Создание преобразования текстур
- •Установка матриц преобразования текстуры
- •Использование преобразования текстур в проектах
- •Использование файлов видео в качестве текстур
- •Импорт видео при помощи DirectShow
- •Создание специализированного фильтра
- •Работа со специализированным фильтром
- •Создание менеджера анимированных текстур
- •Окончание современной анимации
- •Веб-сайты
- •Рекомендуемые книги
- •DirectX 9.0 SDK
- •GoldWave Demo
- •Paint Shop Pro Trial Version
- •TrueSpace Demo
- •Microsoft Agent and LISET
- •Предметный указатель
Морфируемая лицеваяанимация
Основы лицевой анимации
Вы будете использовать четыре основные части лица: глаза, брови, рот и ориентацию головы. Самой главной из всех четырех частей является ориентация головы. Присмотревшись, вы можете заметить, что во время выполнения повседневных задач большинство людей постоянно двигают головой. Очень редко человек не перемещает голову. Наиболее часто движения головой происходят при разговоре; голова человека постоянно движется, когда он говорит. Ваш движок лицевого анимирования должен повторять те же самые движения.
Следующее, что вы можете заметить, это то, что глаза людей также постоянно двигаются. Вы хотите иметь эту особенность в своем анимационном пакете? Если да, вам придется задуматься куда глядят ваши персонажи. Зачастую у людей есть причина двигать глазами - они смотрят на окружающую обстановку и людей.
Для упрощения необходимо ограничить движения глаз. Если персонажу необходимо осмотреться, вы должны отделить глаза от лица (использовать их в качестве отдельных мешей). Намного проще вращать несколько глазных яблок, чем создавать набор морфируемых мешей, представляющих всевозможные ориентации глаз.
К глазам также относятся веки и ресницы. Как я и вы, для реалистичности ваш персонаж должен периодически моргать глазами. Используя комбинированные анимации, добавление возможности моргать глазами является простой задачей - все что необходимо, это морфировать целевой меш, представляющий базовый меш, в меш с закрытыми глазами. Изменяя величину комбинирования моргающего меша, со временем вы можете создать правдоподобную анимацию моргания.
Я упоминал использование комбинированной морфированной анимации? Вы правы, упоминал! С комбинированной морфированной анимацией очень легко работать, и ее использование замечательно подходит для лицевых анимаций. Давайте подробнее рассмотрим причину использования комбинированной морфированной анимации в вашем собственном движке лицевой анимации.
Использование комбинированного морфирования
Как я упоминал в главе 10, комбинированная анимация лица зависит от используемого базового меша. Базовый меш задает начальную ориентацию, которую используют остальные меши для определения деформируемых вершин при анимации. Только те вершины, положение которых в меше отличается от положения в базовом меше, обрабатываются и используются при визуализации результирующего комбинированного меша.
296
Базовый меш представляет собой лицевой меш, не содержащий никакого выражения лица. Для каждого выражения, принимаемого лицевым мешем, такого как моргание век, поднятие бровей, разнообразных форм рта, вы просто комбинируете целевой и базовый морфируемые меши.
Посмотрите на набор мешей, показанных на рис. 11.1, в качестве примера использования комбинированного морфирования в лицевых анимациях.
Pис. 11.1. Вы можете комбинировать базовый меш, изображенный слева, со множеством мешей, для создания уникальных анимаций. В данном случае улыбка комбинирована с морганием
Опять же, для анимации каждой детали лицевого меша используются простые цели морфирования. Моргание глаз может быть одной деталью, а ресницы могут быть другой. Вы можете поднять одну или обе брови. Каждая деталь соответствует эмоции персонажа, которую вы можете запрограммировать в своем анимационном пакете. Например, предположим, что имеется флаг, означающий что персонаж разозлен. При визуализации лицевой анимации ваш движок может скомбинировать меш, в котором обе брови опущены. Если персонаж задает вопрос, движок поднимет одну из бровей меша.
Говоря об эмоциях, вы можете использовать не только брови для передачи чувств персонажа. Рот также может изменять форму. Обычно углы рта персонажа повышаются или понижаются в соответствии с изменением эмоций. Расстроенные персо-
Морфируемая лицевая анимация
нажи опускают углы рта, хмурясь, в то время как счастливые персонажи растягивают рот в улыбке.
Таким образом, вы можете использовать целевые меши для отображения, эмоций меша. Вы можете опустить бровь и немного опустить губы меша для выражения правдоподобной ярости. Как показано на рис. 11.2, нет никакой нужды в применении двух раздельно скомбинированных морфируемых мешей, когда с тем же успехом можно использовать один!
Рис. 11.2. Вместо использования двух целевых морфируемых мешей, вы можете скомбинировать их в один целевой меш, таким образом, сохраняя время и место
Давайте вернемся ко рту. Кроме того, что он помогает отображать эмоции, рот является замечательным средством общения. Губы являются мощной мускульной машиной, которая может принимать множество форм. Во время разговора рот меняет форму, помогая создавать звуки, образующие речь.
Разнообразные формы, которые принимает рот во время разговора, называются виземы (visemes), а произносимые звуки называются фонемы. В этой главе я смешиваю использование визем и фонем, потому что в отношении анимации они обозначают практически одно и то же1. Через минуту вы узнаете о фонемах
иих использовании в синхронизированной анимации губ.
1.Зачастую даже вместо термина визема используют термин "визуальная фонема". - Примеч. науч. ред.
298 Гл
Использования фонем для речи
Как я только что заметил, фонемы являются звуками, произносимыми нами; каждое слово языка (любого языка) состоит из набора фонем. Например, слово "program" состоит из следующих семи фонем: р, r, ow, gh, r, ae, и m.
При произношении каждой из этих фонем рот принимает уникальную форму (визему). Поэтому теперь становится понятным, почему я перемешиваю эти термины - для каждой фонемы есть одна визема. При использовании лицевой анимации необходимо создать целевой морфируемый меш рта, который имеет точно такую же форму, как и ваш рот, при произнесении звуков.
Замечание.ВместотогочтобыприводитьзначенияуникодаIPAвдесятичнойсистеме счисления, намного проще (и является стандартом) привести их в шестнадцатеричной системе счисления. Таким образом, в этой главе я буду использовать шестнадцатеричныезначенияIPA,находящиесявдиапазонеот0x0000до0x0FFF.
Я скоро вернусь к созданию лицевых мешей, произносящих звуки. А пока я хочу немного подробнее рассмотреть фонемы, чтобы увидеть, как вы можете использовать их в своих проектах. Фонемы создаются набором уникальных символов, при этом для усугубления уникальности каждому символу присваивается уникальное значение. Эти значения, известные как IPA (International Phonetic Alphabet (Международный фонетический алфавит)) значения уникода2, изменяются в диапазоне от 0 до 1024 (для англоязычных пользователей), при этом каждая группа значений присваивается различным языкам и произношениям (как показано в таблице 11.1).
Таблица 11.5. Группы фонем Unicode IPA
Диапазон значений |
Язык |
|
|
0x0041 to 0x00FF |
Стандартная латынь |
|
|
0x0010 to 0x01F0 |
Европейская и расширенная латынь |
|
|
0x0250 to 0x02AF |
Стандартные фонемы |
|
|
0x02B0 to 0x02FF |
Символы изменения |
|
|
0x0300 to 0x036F |
Диакритическиезнаки |
|
|
Англоговорящие люди используют значения, показанные в таблице 11.1, но большей частью используются значения (и фонемы) таблицы 11.2.
2. Unicode - уникод,16-битный стандарт кодирования символов, позволяющий представлять алфавиты всех существующих в мире языков. - Примеч. науч. ред.
Морфируемая лицевая анимация |
|
299 |
|
|
|
|
|
Таблица 11.6. Фонемы американского английского |
|
|
|
|
|
|
|
Значение |
Фонема |
Пример |
|
|
|
|
|
0x0069 |
iy |
Feel |
|
|
|
|
|
0х026А |
h |
Fill |
|
|
|
|
|
0х00Е6 |
aе |
Carry |
|
|
|
|
|
0x0251 |
aа |
Father |
|
|
|
|
|
0х028С |
ah |
Cut |
|
|
|
|
|
0x0254 |
aо |
Lawn |
|
|
|
|
|
0x0259 |
ах |
Ago |
|
|
|
|
|
0x0065 |
еу |
Ate |
|
|
|
|
|
0х025В |
eh |
Ten |
|
|
|
|
|
0х025А |
er |
Turn |
|
|
|
|
|
0x006F |
OW |
Own |
|
|
|
|
|
0х028А |
uh |
Pull |
|
|
|
|
|
0x0075 |
UW |
Crew |
|
|
|
|
|
0x0062 |
b |
Big |
|
|
|
|
|
0x0070 |
p |
Put |
|
|
|
|
|
0x0064 |
d |
Dug |
|
|
|
|
|
0x0074 |
t |
Talk |
|
|
|
|
|
0x0067 |
g |
Go |
|
0х006В |
k |
Cut |
|
|
|
|
|
0x0066 |
f |
Forever |
|
|
|
|
|
0x0076 |
V |
Veil |
|
|
|
|
|
0x0073 |
s |
Sit |
|
|
|
|
|
0х007А |
z |
Lazy |
|
|
|
|
|
0х03В8 |
th |
Think |
|
|
|
|
|
0x00F0 |
dh |
Then |
|
|
|
|
|
0x0283 |
sh |
She |
|
|
|
|
|
0x0292 |
zh |
Azure |
|
|
|
|
|
0х006С |
l |
Length |
|
|
|
|
|