Уроки: 3ds Max

Пример использования технологии "Speech Animator"


Подготовка.

Для начала скачаем и инсталлируем программу - speechanimator_zip.exe. Нужно предварительно войти в курс дела - почитать на досуге страничку помощи программы - "Описание технологии".
Также нам понадобится тестовая модель чайника - teapot.zip.

Для "чистоты эксперимента" создадим файл "Азбука.wav" без карты звуков. Для этого сдублируем файл из комплекта поставки "SpeechAnimator.wav" как "Азбука.wav". После этого удалим карту звуков - меню программы "SpeechAnimator.exe" - сервис - удалить карту звуков из файла... Выбираем файл "Азбука.wav". Получаем сообщение программы - Звуки успешно удалены из файла "Азбука.wav".


Этап 1.
Транскрибирование.

Откроем в программе "SpeechAnimator.exe" файл "Азбука.wav". Будет выдано сообщение - "Файл Азбука.wav не имеет таблицы звуков! Транскрибировать?" Ответим - Да. Далее увидим нечто подобное следующему - Рис.1


Рис.1

Судя по всему, придётся вручную немного подправить работу транскрайбера. Выбирая мышкой звуки по очереди и изменяя их, приводим таблицу морфем приблизительно к следующему виду:


Рис.2

При этом можно выбирать несколько звуков подряд - мышкой в области колонки звуков, либо при помощи клавиши "Shift".
Прослушать выбранные звуки можно, щёлкнув на кнопке . Просмотреть результат синхронно со звуком - кнопка . По ней воспроизведение начинается с текущей выбранной позиции.
Будем рендерить при 30 кадрах в секунду. Время между морфемами при глубине 1 - 0,0464 сек, а между кадрами - 0,0333 сек. Поэтому увеличиваем глубину разбиения до 2 (0,0232 сек) - нажимаем кнопочку . Подтверждаем наше намерение увеличить глубину разбиения.

Ну вот, при проигрывании картинка стала заметно лучше! Заметим, что дальнейшее увеличение глубины разбиения в данном случае смысла не имеет, т.к. кадры будут следовать гораздо реже морфем.

На этом транскрибирование можно считать законченным. Жмём кнопку и выходим из программы "SpeechAnimator.exe". Пока спасибо и на этом.


Этап 2. Привязка базовой модели.
Привязка осуществляется в среде "3D Studio MAX R3.X". Вообще-то подходит любая версия, был бы модификатор "Skin". В "3D Studio MAX R2.Х", как мы знаем, такого и не увидишь. А "Skin" для нашего дела - САМОЕ ТО! Для начала загрузим тестовую модель. Чего-то кривовато выглядит... Ну да ладно. И такая сойдёт.
Нажимаем File-Merge... Ищем наш злосчастный "model.max". Он должен быть в папке инсталляции программы "SpeechAnimator". Далее выбираем загрузку всех объектов - на всякий случай.
Проверяем настройку - "Use Selection Center" и "World" в списке "Reference Coordinate System" - .

Подгоняем всё это дело поближе к "ротику" чайника, простите за выражение. Разворачиваем на 180 градусов относительно оси OZ (World) и градусов на (-20) относительно оси OX (World). Ну, как кому нравится, так и лучше. Самое главное пока, чтобы передняя часть "губ" базовой модели находилась как раз посередине "губ" чайника:


Рис.3

В нашем случае не будем масштабировать базовую модель.
Скроем объекты - "Bottom Mouth" и "Tongue Line" - они нам не понадобятся.


Переходим к по-точечному редактированию линий. Здесь есть очень важный момент. Вся работа программы опирается на тот факт, что положение и ориентация базовых точек всех объектов базовой модели совпадают! Поэтому при операциях с объектами базовой модели нужно за этим следить.
Выберем объект "Static Line". В режиме "Sub-Object"(и только в нём) перемещаем точки и приводим его примерно к такому состоянию:



Рис.4

Примерно то же самое проделаем и с объектом "Mouth Line"


Рис.5

Только в этом случае сдвигаем только точки 1 и 5 "Mouth Line"


Теперь поработаем с "Lips LineTop" и "Lips LineBot". Сдвигаем, как и прежде, только точки 1 и 5. В процессе сдвига точек парами (а так удобнее) 3D MAX спрашивает, не хотите-ли эти самые точки совместить. Так вот: кто очень хочет, пусть так и делает; а мы - не будем! Их ещё даже нужно немного раздвинуть:


Рис.6

Здесь нужно заметить, что точки 1-1 и 5-5 "Lips LineTop" и "Lips LineBot" желательно разместить как можно ближе друг к другу.

Вроде-бы всё. Выглядит неплохо. С "по-точечным" редактированием линий закончили. Переходим к модификатору "Skin".

Назначим "Skin" чайнику. Добавим кости "Lips LineTop", "Lips LineBot", "Mouth Line", "Static Line". Посмотрим, что получилось.
Выберем кость "Static Line". Перейдём в режим "Sub-Object" модификатора. Включим флажок "Color VerticesWeights".


Рис.7

По моему мнению, некоторые точки не стоят такого внимания этой косточки. Они ограничены жёлтой линией.
Включим флажок Filters "Vertices", выберем эти лишние точки и назначим им вес "0".
Примерно такого же эффекта можно достичь, изменяя диаметр "Envelopes".


Переключимся на кость "Mouth Line". Здесь тоже не всё в порядке:


Рис.8

Обнулим вес точек внутри области, ограниченной жёлтой линией

Теперь перейдём к кости "Lips LineTop":


Рис.9

И здесь придётся обнулить вес всех точек в области, ограниченной жёлтой линией. Не нужно пока трогать только часть точек на верхней "челюсти" чайника.

Примерно такая же ситуация с "Lips LineBot":


Рис.10

Нужно обнулить вес всех точек в области, ограниченной жёлтой линией.
Ну, для начала вроде достаточно.



Этап 3. Генерация анимирующего скрипта.
Вернёмся к программе "SpeecAnimator.exe". Откроем нашу "Азбуку". Нажимаем кнопочку .


Рис. 11

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



Этап 4. Выполнение скрипта и доводка модели.


В "3DMAX" выполняем наш скрипт "SpeechAnimator.ms". Много времени это не займёт.
Установим 6 кадр - звук "А". Вроде, всё неплохо выглядит. Только рот можно было и посильнее открыть. Но это мы потом исправим.
Установим 13 кадр - звук "У". Вес точек в прищёчных ямочках должен распределяться примерно так - 50% - "Mouth Line", 25% - "Lips LineTop", 25% - "Lips LineBot".
Если некоторые точки вылезают в неподходящие места, вес их можно назначать прямо в текущем кадре. Выбираем нужную кость, режим "Sub-Object", и т.д..

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

Пойдём вторым путём. Сгенерируем новый скрипт с такой пропорцией (см. рис.). Может показаться, что нужно было увеличивать длину челюсти, но это не так. Если мы увеличим длину челюсти, в результате рот будет открываться меньше. Это происходит потому, что для достижения заданных пропорций фронтальной проекции рта его и нужно меньше открывать.
После выполнения нового скрипта подключим "Азбуку" к сцене и сделаем превью для просмотра.
Получили привязанную модель чайника 3DMAX. Сейчас можно заставить его сказать не только "Азбука", а кое-что посолиднее, например, пусть споёт "Город" Б.Г.! На страничке поддержки http://www.chat.ru/~speechanimator/index.htm есть эта песня с картой звуков. Только для работы придётся конвертировать файл в формат PCM - 22050 Гц. Для этого можно использовать встроенный конвертер программы.

Желаю успехов в использовании данной технологии!

С уважением, разработчик, Александр Охота.
hunt@perm.raid.ru



17469 Автор:
Актуальность: 192
Качество: 192
Суммарный балл: 384
Голосов: 2 оценки
Зарегистрируйтесь, чтобы добавить комментарий.
Эту страницу просмотрели: * уникальных посетителей