- •Введение
- •Глава 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
- •Предметный указатель
Глава 7
Создание кукольной анимации
Прячась наверху выступа восточной части компаунда, я лежу и жду, не покажется ли неосторожный противник. Мой палец, лежащий на спусковом механизме, тревожно подергивается, ожидая своей очереди приступить к действию. Я уже представляю, как противник выйдет из двери подо мной и я ударю. Мой снаряд из базуки взорвется, и виртуальное тело противника взлетит в воздух, отскакивая от каменных стен бараков компаунда. Мой план идеален. Через некоторое время выясняется, что мой противник также труслив, как и я. Я слышу его зловещий хохот и осматриваюсь, как раз вовремя, чтобы увидеть, как брошенная им граната приземляется прямо рядом со мной. Похоже, что сегодня мое воображаемое тело будет отскакивать от стен. Ну и ладно, всегда можно сыграть еще раз!
Типичный момент из типичной стрелялки от первого лица; в этой истории нет ничего необычного за исключением той части, где персонаж подпрыгивает в результате попадания в него из различных типов игрового оружия. Такие эффекты как уникальные анимации смерти возможны в результате использования технологии, известной как кукольная (rag doll) анимация, в которой ваши персонажи как бы сделаны из маленьких кусочков. Как только ваш персонаж умирает, загружаются короткие, абсолютно уникальные наборы движений - отлетания от препятствий с движением частей тела, как если бы вы бросили настоящую куклу через комнату.
Такие игры как Unreal Tournament 2003 от Epic Games используют кукольную анимацию для последовательностей смертей персонажей, и поверьте мне, если вы не видели этот эффект, вы многое пропустили. Если же вы хотите использовать кукольную анимацию в ваших собственных проектах, то вам повезло - все необходимое содержится в этой главе!
Созданиекукольнойанимации |
185 |
Рис. 7.1. Вы можете разбить демонстрационный персонаж, состоящий из скелетной структуры и скелетного меша, на последовательность отдельных компонентов
На рис. 7.2 показан внешний вид демонстрационного персонажа, как если бы он состоял только из ограничивающих параллелепипедов.
Вашей задачей является обработка и отслеживание движений этих параллелепипедов (а не костей и вершин) во время их перемещений в анимации. Вы можете передвигать и вращать их, как вам захочется. Так как параллелепипеды представляют кости персонажа, каждая кость в скелетной структуре двигается в соответствии с параллелепипедом, к которому она присоединена (даже если движение вызывает разрыв соединений костей, о котором я расскажу чуть ниже).
Как же кости двигаются в соответствии с движением параллелепипедов? Они наследуют преобразования ограничивающих параллелепипедов, которые движутся по вашему трехмерному миру. Так что теоретически, при перемещении параллелепипеда кость двигается соответственно. (Получается, что кость как бы не существует, потому что вы работаете только с параллелепипедами при моделировании.)
186 |
Глава7 |
|
Рис. 7.2. Кости и вершины демонстрационного персонажа были заменены ограничивающими параллелепипедами, которые соответствую пространству, занимаемому костями и вершинами
Постепенно вам должно становиться понятно, почему я выбрал параллелепипеды для представления костей и их вершин. Вы можете представить каждую кость и ее вершины всего восьмью точками (углами ограничивающего параллелепипеда) вместо неизвестного (и зачастую большего) количества вершин в меше. Кроме этого, математически проще отследить перемещение параллелепипеда, чем костей и вершин.
Предположим, вы создали набор параллелепипедов, которые представляют кости и вершины. Как вы можете видеть на рис. 7.3, каждый параллелепипед полностью включает соответствующие вершины кости и точки соединения костей. Эти параллелепипеды преобразовываются таким образом, чтобы их положение и ориентация совпадали с положением и ориентацией соответствующих им костей.
Созданиекукольнойанимации |
187 |
Точка соединения локтя с плечом
Рис.7.3. Каждыйограничивающийпараллелепипедокружаетвершиныкостииточкисоединениякостей
После создания параллелепипедов и помещения их вокруг трехмерного меша вы можете начинать двигать их. Предположим, вы хотите, чтобы руки вашего персонажа крутились. Приложите небольшую силу к нескольким параллелепипедам, и они начнут двигаться. Соответствующие этим параллелепипедам кости также начнут двигаться.
С этой точки зрения параллелепипеды являются отдельными сущностями; на них не распространяются соединения костей, существующие в скелетной структуре (эти же соединения позволяют хранить скелетную структуру в распознаваемом виде). В некотором смысле это хорошо, т. к. позволяет напрямую управлять скелетной структурой персонажа, используя преобразования параллелепипедов вместо комбинированных преобразований костей. Это означает, что вам не надо комбинировать все локальные преобразования костей с родительской для их корректного ориентирования, достаточно просто скопировать преобразование параллелепипеда, и все готово!
Единственной проблемой является то, что параллелепипеды могут смещаться друг относительно друга, что приводит к расчленению персонажа. Должен быть способ усилить соединения костей, используя ограничивающие параллелепипеды, чтобы сохранить персонаж целым в сочленениях (и избавить вас от жуткой сцены летящих в разную сторону частей тела).