проблемная рожа А.ГЛАДЫШ, А.ФЕДОРА Спецвыпуск: Хакер, номер #064, стр. 064-058-3 Скелетная анимация — вид анимации, при котором основным рычагом управления аниматора являются кости анимируемого им скелета. Скиннинг (англ. skin — «кожа») — метод привязки вертексов модели к костям скелета, трансформированным при помощи скелетной анимации. Если используется этот метод, на положение одного вертекса могут влиять кости в количестве больше одной штуки. Когда скелетная анимация со скиннингом реализуется в реальном времени, обычно накладывается ограничение по максимальному количеству костей, к которому может быть привязан вертекс модели (обычно не более четырех). Морфирующая анимация — вид анимации, при котором итоговое состояние модели в данный момент просчитывается при помощи интерполяции нескольких ключевых кадров. Каждый кадр такой анимации — это анимируемая модель целиком. Итоговое положение данного вертекса модели при морфинге определяется как средне взвешенное положений этого вертекса в рассматриваемых ключевых кадрах. Интерполяция кадров может проводиться как по времени, так и по каналам анимации. Обычно скелетная анимация поддерживается движком игры вне зависимости от того, как именно реализована лицевая анимация персонажей. В то же время скелетная анимация сложна для адекватного представления лицевой анимации, особенно с учетом ограничения количества костей на вертекс: для эффективной передачи мимики требуется использовать анимационные кости как аналоги множества мышц лица. Морфинг же позволяет анимировать лицо произвольными, удобными художнику средствами, не привязываясь к мизерному набору возможностей его анимационного пакета, который поддерживается движком. практическая реализация лицевой анимации На диске к журналу ты найдешь пример упрощенной реализации автоматической генерации лицевой анимации, которая синхронизирована с речью в реальном времени. Пример написан с использованием Direct X Framework. Посмотрим некоторые вопросы реализации, приведенной в примере (ищи на диске). Используется морфирующая анимация. Для создания анимации используются три канала (в примере используется общий буфер). При необходимости число каналов может быть увеличено за счет некоторых потерь производительности. В каждый момент времени в каждом из каналов выбран один из кадров морфирующей анимации. Кадры, выбранные в каналах, смешиваются согласно весам, вычисленным по данным синхронизации с речью. Таким образом мы получаем конечный кадр для данного момента времени. Текущий кадр задается как положение содержащегося в нем меша в общем вертексном буфере. Для случаев, когда видеокарта пользователя не поддерживает указание смещения для вертексного буфера, можно предусмотреть такой вариант, когда используется один вертексный буфер на каждый кадр. В первом (основном) канале всегда находится кадр с нейтральным выражением лица и с закрытым ртом. Во втором — текущая визема положения губ. В нашем случае с делением на уровне морфем — в этом кадре всегда находится визема «открытый рот». В третьем — визема текущей эмоции. Текущие веса смешивания задаются для всех неосновных каналов (второго и третьего). Вес первого канала вычисляется исходя из того, что сумма весов всех каналов должна равняться единице и каждый вес должен быть строго больше нуля. |