Обратно

Исследования, проблемы, суждения

Игнатьев Н.К.
Компьютерный синтез анимационных персонажей
(сокращенный вариант)

Чтобы уточнить общий принцип действия системы анимации, независимый от способа реализации, желательно выразить его в абстрактной математической форме. Рассматривая этот вопрос подробнее, легко прийти к заключению, что процесс анимации может быть выражен двумя последовательными математическими операциями: интерполяцией и дискретизацией.
Под интерполяцией в рассматриваемом случае понимается восстановление непрерывно движущегося изображения анимационного персонажа по его двум заданным статическим кадрам. В случае ручной анимации интерполяцию на первом этапе выполняет сам художник-аниматор, так сказать, «в уме». На втором, заключительном этапе анимации он же — и снова «в уме» – выделяет из созданного для себя представления о движении персонажа требуемые дискретные кадры мультфильма. Эта процедура называется дискретизацией.
При компьютерной анимации те же этапы преобразования (т.е. интерполяция и дискретизация) реализуются вычислительными методами относительно заданных исходных данных. Но теперь в качестве персонажа фигурирует его скелетная модель, заданная в виде пары ключевых кадров.

Модель фигуры персонажа
Выбирая вариант построения модели персонажа для компьютерного мультфильма, мы будем исходить из простейшей линейно-ломаной модели (рис. 1,а), которую обычно называют «скелетной» или векторной. Последнюю для простоты представим в виде примитива человеческой фигуры, что упрощает и последующие иллюстрации. С той же целью все линейные элементы модели условно представлены как равнопротяженные. По смыслу используемых движений модели она имеет только одну опорную точку вращения 0, которая остается неизменной на протяжении одиночного цикла анимации модели. Смена опорной точки означает переход к следующему циклу анимации.
Поскольку в дальнейшем изложении каждый элемент модели характеризуется не только длиной, но и углом своего направления, то элемент модели должен рассматриваться как радиус-вектор (рис. 1,б). При этом для определенности номер каждого радиус-вектора проставляется у его вершины.
Перейдем к выбору некоторого стандарта в построении радиус-вектора, скажем, графопостроителем, без отрыва пишущего элемента от плоскости построения. Один из возможных вариантов такого построения иллюстрирует рис. 1,в. Кривые стрелки 3 и 6 называют обратными ходами развертки при построении приведенной фигуры. Как видно, при этом выполнена сквозная нумерация прямых и обратных ходов развертки модели. Однако для ввода модели в систему памяти эти ходы должны быть сохранены. Легко заметить, что проще всего это сделать, не нарушая контуров исходной модели — наложить кривые обратных ходов 3 и 6 на векторы 2 и 5 (рис. 1,г). При этом стрелки обратных ходов 3 и 6 не маскируются прямыми ходами 2 и 5, что и требуется.

Рис. 1. Эволюция скелетной схемы модели в векторную:
а — скелетная модель; б — с опорной точкой 0, произвольно
направленными векторами и их нумерацией;
в — с дуговыми обратными ходами, образующими вместе с векторами единую
однонаправленную цепь со сквозной нумерацией;
г — только c векторными обратными ходами развертки,
заметными на фоне прямых

С точки зрения теории передачи двумерного сигнала по одномерному каналу развертка — это тривиальный случай преобразования. Простейшей моделью с разветвлением является трехзвенная (рис. 2,а). Добавление четвертого звена делает ее одноцепочечной в двух вариантах (рис. 2,б, в). Она может служить простейшим примером использования радиус-векторной модели сокращения числа измерений преобразуемого сигнала.
Прежде, чем перейти к построению ключевой пары фаз модели, необходимо несколько усовершенствовать обозначения при радиус-векторе.

Рис. 2. Трехзвенная модель (а), не допускающая развертки, четырехзвенные модели (б и в), допускающие развертку при минимальном числе звеньев

На рис. 3,а показан радиус-вектор li,k, где индекс i выражает его порядковый номер в модели, которая содержит всего n векторов, а индекс k — его принадлежность к k-му кадру той же модели. При этом величина li в обозначении радиус-вектора выражает длину этого i-го вектора, а показанная на рисунке величина ai,k обозначает его угол поворота против часовой стрелки относительно координатной оси x.
На рис. 3,б показан тот же радиус-вектор li,k при малом масштабе рисунка, когда вместо полной записи обозначения радиус-вектора сохраняют только его индекс i,k.

Рис. 3. Условные обозначения параметров одиночного звена векторной модели:
а — при большом формате рисунка, где li,k — i-й вектор в k-м кадре, li — его длина и ai,k — его угол поворота;
б — при малом формате рисунка, где индекс i,k означает i-й вектор в k-м кадре

Соответствующая ключевая пара четырехзвенных фаз модели приведена на рис. 4,а. Как видно, они имеют общую опорную точку 0 в плоскости x,y (здесь и далее обозначение для оси y опущено во избежание усложнения рисунка). При этом предполагается, что фаза модели с индексом k = 0 соответствует моменту времени t = 0, а фаза модели с k = m — моменту времени t = mT , соответствующему интервалу анимации модели. Рис. 4,б иллюстрирует одну из искомых промежуточных фаз модели в момент t = kT, соответствующий k-му кадру результата анимации.
Для приведенной ключевой пары фаз должны быть заданы все угловые и линейные параметры, сокращенную запись которых поясняют рис. 3,а и б. Запишем последние в виде матрицы ключевых параметров модели (рис. 4,а):

a1,0        a1,m        l1
a2,0        a2,m        l2                                           (1)
a3,0        a3,m        l3
a4,0        a4,m        l4

Подчеркнем, что эта матрица относится к ключевой паре фаз модели на рис. 4,а, минимально возможной в качестве полноценного примера последней.
При компьютерной анимации модель можно привести к одномерной, выполняемой n раз. Поясним это на примере с n = 4 (см. рис. 4,а). Записывая исходную ключевую пару фаз моделей алгебраически, имеем две четырехзвенные модели:

l1,0 + l2,0 + l3,0 + l4,0 и l1,m + l2,m + l3,m + l4,m.

После перегруппировки векторов имеем

l1,0 и l1,m; l2,0 и l2,m; l3,0 и l3,m; l4,0 и l4,m,

т.е. четыре однозвенные ключевые пары фаз модели, каждая из которых относится к своей мономодели, в принципе независимой от других. Исходя из этого, анимацию каждой из них (например, для k-го кадра) можно реализовать в отдельности в виде ряда l1,k; l2,k; l3,k; l4,k. Произведя сложение одиночных векторов по i, получаем результат анимации для k-го кадра в виде суммы l1,k + l2,k + l3,k + l4,k.

Рис. 4. Простейшая из разветвленных моделей —
четырехзвенная в виде ключевой пары фаз (а)
и ее промежуточная фаза (б) в k-м кадре

Анимация однозвенной модели персонажа
До сих пор мы рассматривали только неподвижные векторные модели персонажа, выражаемые разветвленными векторными цепями в плоскости переменных x и y. Теперь перейдем к рассмотрению ключевых пар таких моделей вида рис. 4,а, обозначающих границы их условного движения во времени t на интервале анимации длительностью mT, где m — число кадров, охватываемых анимацией, а T — кадровый интервал действия модели.
Чтобы упростить анализ действия модели во времени, рассмотрим ее на примере только ее одиночного звена, или, кратко, мономодели (рис. 5,а). Для общности рассуждений будем считать ее просто i-м звеном исследуемой n-звенной модели персонажа. Предполагается, что с определенными ограничениями результаты такого исследования в дальнейшем могут быть перенесены и на остальные звенья n-звенной модели.
Основными параметрами мономодели являются ключевые фазы ее вектора, обозначенные как li,0 и и li,m в моменты условного времени работы модели t = 0 и t = mT соответственно. Здесь m — число кадровых интервалов работы модели в интервале анимации mT.
В дальнейшем для упрощения решаемой задачи векторные ключевые фазы модели li,0 и li,m иногда будем заменять скалярными угловыми фазами ai,0 и ai,m , соответственно (рис. 5,б).
С учетом указанных скалярных параметров действие мономодели на рис. 5,а в трех измерениях x, y и t может быть рассмотрено в одном измерении t (кривая на рис. 5,б). В самом деле, на основе приведенных здесь известных параметров должна быть найдена функция времени ai (t). Она должна выражать «угловую траекторию» условного движения вектора мономодели на рис. 5,а как результат интерполяции этого движения между заданными ключевыми фазами в скалярном угловом измерении ai,0 и ai,m (рис. 5,б). При рассмотрении такого условного движения, определяемого функцией ai (t), интерполирующую функцию по отношению к вектору i-й мономодели можно назвать приводной. Сравнивая с векторной ключевой мономоделью на рис. 5,а, своеобразную модель параметров движения на рис. 5,б можно назвать скалярной мономоделью.
Таким образом, мы перешли от интерполяции движения в трехмерной векторной модели к интерполяции в одномерной скалярной мономодели, что весьма существенно по пути выполнения общей задачи анимации многозвенной модели.
Если теперь в связи с использованием математического термина «интерполяция» обратиться к математике, то при полном отсутствии сведений о каких-либо реальных свойствах искомой интерполяционной функции ai (t), как это имеет место в нашем случае, единственным приемлемым вариантом может быть лишь линейная интерполяция. Она сводится к соединению двух заданных отсчетов интерполируемой функции отрезком прямой (рис. 6,а), обозначенным как функция ai (t). Результат представляет собой самую грубую интерполяцию, основанную лишь на простоте ее построения для двух заданных точек. Можно даже сказать, что интерполяция между парой заданных угловых отсчетов ai,0 и ai,m в плоскости a,t (см. рис. 5,б) выражает лишь общую идею i-го элемента в этой плоскости (см. рис. 5,в), «задуманного» персонажем. Но, как будет показано ниже, персонаж физически не в состоянии выполнить такое движение из-за наличия инерционности своих составных элементов.
Ограничимся аналитическим выражением линейной интерполяционной функции, легко получаемой на основе рис. 6,а (пренебрегая постоянной составляющей этой функции ai,0 , не влияющей на движение рассматриваемого i-го элемента модели):

Следующий этап анимации мономодели (рис. 5,а) должен состоять в дискретизации найденной интерполяционной функции — в данном случае линейной ai (t) — с кадровым интервалом T. Результат условно иллюстрирует рис. 6,б.

Рис. 5. Ключевая пара фаз мономодели: а — векторная; б — скалярная

Рис. 6. Процесс линейной анимации мономодели:
а — интерполяционная функция; б — результат дискретизации; в — результат анимации

Общий результат дискретизации интерполяционной функции должен выражать ряд угловых отсчетов вида

ai,0 , ai,1 ,ѕ, ai,m                                (3)

для однозвенных кадров с индексами k = 0, 1,ѕ, m. Это можно назвать промежуточной межугловой анимацией, пока скалярной. Мы же ищем межвекторную анимацию. Для перехода к ней необходимо лишь использовать скалярно-векторный переход от известных угловых параметров (3) и известного линейного параметра li к ряду векторов li,0, li,1,..., li,m, образующих однозвенный кадровый «веер» (рис. 6,в). При линейной интерполяционной функции он будет равномерным. Вопрос реализации нелинейной анимации рассматривается ниже в связи с учетом инерционности анимируемых персонажей.
Рассмотренные выше преобразования, выражающие процесс анимации мономодели посредством рис. 5,а — 6,в, можно выразить в виде блок-схемы, которая облегчает понимание и использование этого процесса.
На основной вход блок-схемы (рис. 7) подается ключевая пара фаз анимируемого i-го звена модели вида li,0 и li,m. Блок ВС (векторно-скалярного преобразования) упрощает модель до ключевой пары угловых параметров ai,0 и ai,m и линейного параметра li . Далее блок И (интерполяции) формирует интерполяционную функцию ai (t). На вспомогательный вход блок-схемы подается индекс k искомого промежуточного кадра для поданной на основной вход ключевой пары фаз мономодели. В результате блок Д (дискретизации) выделяет из функции ai (t) дискретный отсчет ai,k. Наконец, на основе полученных линейного параметра li и углового параметра ai,k блок СВ (скалярно-векторного преобразования) формирует любой k-й промежуточный вектор li,k из числа k = 1, 2,ѕ, m.

Рис. 7. Блок-схема межвекторной анимации ключевой пары фаз
мономодели для k-го промежуточного кадра

Рассматривая способ интерполяции в мономодели вида рис. 5,а согласно блок-схеме рис. 7, нетрудно заметить, что при выполнении межвекторной анимации используется метод межугловой интерполяции. Дальнейшая задача состоит в том, чтобы через рассмотренный блок однозвенной анимации прошли все (m +1)•n звеньев анимируемой модели.

Анимация многозвенной модели персонажа
Как очевидно, для перехода от схемы анимации однозвенной модели персонажа к анимации многозвенной модели на вход последней следует поочередно подавать ключевые пары фаз мономоделей, на которые разбирается заданная ключевая пара фаз полной модели (рис. 4,а). Образующиеся на выходе промежуточные фазы мономодели следует поочередно подавать на систему «сборки» результирующей анимированной модели.
Упомянутые системы «разборки» ключевой пары фаз и «сборки» промежуточной фазы — есть не что иное, как анализирующая развертка (АР) и синтезирующая развертка (СР). Говоря точнее, со стороны входа требуются две АР для параллельного анализа фазы k = 0 и фазы k = m, который должны выполнять АР0 и АРm соответственно.
С учетом перечисленных добавлений блок-схема на рис. 7 принимает вид, приведенный на рис. 8. Как видно, здесь имеются два входа для двух заданных ключевых фаз модели ([заметим, что это может быть и ключевая матрица параметров (1)]. Однако логично сослаться на первичный источник информации — ключевую пару фаз модели). Со стороны выхода общей блок-схемы здесь приведено лишь выражение k-го результирующего кадра. Устройство же, объединяющее m +1 кадров в видеоклип, выражаемый формулой

в блок-схему электронных преобразований не вошло как чисто механическое.
Переходя к описанию работы блок-схемы, необходимо прежде всего отметить, что блоки АР0 и АРm «считывают» с векторов li,0, li,m скалярные параметры ai,0 , li и ai,m , li соответственно, а блок СР выполняет обратный переход от скалярных параметров ai,k и li к вектору li,k.
Все три вида развертки — АР0, АРm и СР — несмотря на различие выполняемых функций, действуют в строгой синхронности и синфазности относительно частоты обработки элементов модели, определяемой единым «потоком» индексов i для АР0 , АРm и СР.
От рассмотрения поэлементной развертки векторов модели перейдем к покадровой развертке, чтобы выявить их различие. Так, АР0 функционирует лишь в пределах кадра с индексом k = 0, в то время как АРm выполняет ту же роль в пределах кадра k = m. В том же временном интервале 0 Ј t Ј mT блок СР функционирует со сменой кадровой позиции согласно k = 0, 1,ѕ, m для формирования соответствующих, в том числе промежуточных, кадров результирующей модели.

Рис. 8. Блок-схема межвекторной анимации ключевой пары фаз
многозвенной модели для k-го промежуточного кадра

Анимация с учетом инерционности персонажа
До сих пор мы рассматривали действие лишь линейной интерполяционной функции ai (t), выражаемой формулой (3). Фактически это означало, что модель персонажа в своем действии подразумевалась как безынерционная или, иначе, как имеющая нулевую массу. Но поскольку наличие или отсутствие массы всегда относительно, такая модель могла использоваться лишь для относительно малых элементов (в сравнении с относительно крупными элементами).
Моделируемый реальный персонаж движется не просто в зависимости от своего желания, но также (и это главное!) в зависимости от инерции собственной массы. Иначе говоря, при всякой попытке сделать то или иное движение каждый i-й элемент модели испытывает сопротивление со стороны собственной массы. В результате возникающее движение каждого элемента оказывается сравнительно сложной функцией усилия, производимого персонажем (мы приводим здесь интерполяционные функции только для одушевленных объектов).
Перейдем к рассмотрению нелинейного варианта интерполяции модели персонажа, имеющего отношение, как теперь можно сказать, к массивным или крупногабаритным элементам модели. В этом случае интерполяционная функция заметно меняет свою конфигурацию. Главную роль в процессе анимации играет закон механики об ускорении или замедлении массы тела под воздействием постоянной внешней силы. Такие ускорения и замедления происходят по квадратичному закону.
На рис. 9,а показан пример углового движения произвольного i-го элемента модели, обладающего определенной массой, в соответствии с интерполяционной функцией ai(t). При этом имеется в виду вращательное движение массы i-го вектора мономодели в угловых пределах от ai,0 до ai,m в течение времени от t = 0 до t = mT.

Рис. 9. Процесс нелинейной анимации мономодели:
а — интерполяционная функция; б — результат дискретизации; в — результат анимации

С учетом хорошо известного закона механики о движении (в том числе и круговом) массы под воздействием постоянной силы прямого или обратного направления приходим к искомой функции ai(t). При ее построении были учтены типичные условия движения i-го элемента фигуры персонажа. Так, на первой половине углового пути, т.е. при 0 Ј t Ј mT/2, персонаж, используя практически постоянное усилие, придает i-му звену (с учетом его массы) движение с ускорением по квадратичному закону. Далее в момент t = mT/2 начала второй половины пути персонаж вынужден прекратить ускоряющее усилие и при mT/2 Ј t Ј mT перейти к обратному усилию, замедляющему движение также по квадратичному закону (центрально симметричному по отношению к первой половине пути).

Рис. 10. Центрально сопряженные элементы интерполяционной функции:
1 — линейная; 2 — нелинейная

В соответствии с этим персонаж совершает управление довольно сложным движением своей фигуры, что на первый взгляд может показаться нереальным. Однако в действительности без этого он не смог бы целеустремленно выполнять требуемых движений. Конечно, в реальности указанные движения (если можно так выразиться) несколько сглаживаются, но закон чередования ускорения и замедления неизбежно сохраняется. Разумеется, персонаж движется автоматически, как, например, при ходьбе.
После дискретизации интерполяционная функция принимает вид рис. 9,б, а после завершения анимации — вид рис. 9,в. Из последнего видно, что ускорение и замедление угловой скорости движения i-го элемента мономодели приводит соответственно к разрежению и сгущению векторов, отображающих дискретные кадры движения для i = 1, 2,ѕ, m+1.
Перейдем теперь к определению формулы собственно нелинейной интерполяционной функции ai (t), «опирающейся» на заданные угловые отсчеты ai,0 и ai,m . На рис. 10 она показана как центрально симметричная относительно начала координат (кривая 2). Для сравнения приведена линейная интерполяционная функция ai (t) (кривая 1).
Аналитическое выражение функции ai (t) дает формула

Как видно, в таком выражении она сохраняет указанное свойство интерполяционной функции ai(t) соединять между собой две точки угловых отсчетов ai,0 и ai,m (рис. 9,а).
Итак, на основе предшествующего изложения мы пришли к двум различным видам интерполяции — линейной и нелинейной. При этом линейная интерполяция, выражаемая формулой (2), является свойством безынерционной мономодели, где моделируемый персонаж при движении преодолевает лишь силу трения в модели. Нелинейная интерполяция (4) является свойством инерционной мономодели, где тот же персонаж преодолевает силу инерции модели.
Поскольку в модели одного и того же персонажа всегда присутствуют элементы большой и малой массы, для анимации требуются два интерполятора: линейный И1 и нелинейный И2. Следовательно, нужна весьма несложная модернизация блок-схемы на рис. 8, состоящая во введении двух попеременно работающих интерполяторов И1 и И2.

Полный текст - в № 2 журнала "ТКТ" за 2003 г.

Обратно

Hosted by uCoz