Morphing

В наши дни по телевидению в рекламе, фильмах, просто заставках можно увидеть эффект "переливания" одного изображения в другое - "морфирование изображений". Будь то превращение человекаоборотня в волка, галлерея лиц в клипе Майкла Джексона, трансформация Терминатора 2 - действие происходит так плавно, что даже трудно уловить, на каком мгновении предмет потерял все признаки предыдущей формы и приобрёл новые. Как же это делается ?

Морфинг - это плавное "превращение" одного изображения в другое, во время которого конкретный элемент первого изображения "перетекает" в элемент второго изображения. Hапример, при морфировании одного автомобиля в другой, колесо первого превращается в колесо второго. Компьютер не может выполнить морфинг двух изображений самостоятельно - сначала художнику требуется задать соответствие элементов первого изображения элементам второго а также другие параметры, пользуясь специальным редактором. Способ задания соответствия зависит от редактора - это могут быть точки, линии, полигоны. Сам морфинг можно разбить на три части: warping, tweening и dissolving.

Warping (коробить, искривлять) - преобразование изображения, при котором оно в отдельных областях сжимается и растягивается - как буд-то изображение нанесено на резину. Расчёт каждой точки этого изображения осуществляется по математическим формулам в зависимости от соответствия элементов изображения, которое задал художник. Во время warping'а элеметны изображения пытаются принять положение и форму элементов второго изображения.

Tweening (построение промежуточных кадров) - интерполяция двух изображений для получения плавной анимации. Например, если соответствие элементов изображений задано точками, то интерполяцией положений точек можно получить промежуточные соответствия.

Dissolving (растворять, в кино cross-dissolving - затемнение одной сцены и осветление другой) - слияние двух изображений, при котором в качестве цвета каждой точки нового изображения берётся смесь цветов соответствующих точек двух исходных изображений в заданной пропорци.

Tweening применяет warping для интерполированных точек, то есть позволяет получить промежуточные фазы (вверху показаны конечные кадры). Dissolving обьединяет два полученных изображения в одно. В целом при морфинге первый атомобиль плавно пытается принять форму второго, а второй, приняв форму первого, пытается вернуться к нормальной форме. Dissolving смешивает изображения, при этом изображение первого автомобиля постепенно затухает, а второго - появляется.

АЛГОРИТМЫ

Алгоритм зависит от требуемого качества, скорости и способа задания соответствия элементов изображений.

Плотность сетки влияет на скорость вычислений, требования к памяти, качество получаемого изображения. Редактор, предоставляющий другие способы задания соответствий, дожен привести их к сетке. Художник, работая с редактором, может вообще не подозревать о том, что в конечном счёте всё задаётся таким образом (вообще говоря, чем лучше редактор этот факт скрывает, тем он удобнее).

Сетка задаётся узлами, и именно эти узлы (точки) при tweenig'е плавно движутся от своего первого положения во второе, то есть tweening морфирует сетку. Warping осуществляется в соответствии с начальной сеткой и сеткой, полученной для данного кадра. Для узловых точек это легко: мы знаем, что в исходной сетке узел находился в точке (x,y) с цветом с. Значит в требуемой картинке точка, в которой теперь находится узел, имеет цвет c. Для остальных точек несколько сложнее: тут применяется билинейная или бикубическая интерполяция.

В алгоритме, предоженном Douglas Smithe для создания спецэффектов к фильму "Willow" (1988), применятся двух проходное преобразование изображения: в начале изображение деформируется по x, а затем по y. Объясню на примере.

Hа деформацию сетки действуют ограничения: её ячейки не должны накладываться друг на друга, и боковые узлы не должны двигаться, иначе нельзя будет построить однозначную сплайн-функцию. В более сложных алгоритмах в узлах сетки можно задавать дополнительные параметры - например, скорость dissolving'а, таким образом регулируя нежелательное быстрое появление светлых частей второго изображения и т.п. Реализацию этого алгоритма можно найти в интернете - файл morfsrc.zip. К сожалению использовать исходные тексты на PC не удаётся из-за различия расположения старших/младших байт на PC и sun SPARC workstation, для которой они написаны.

В РЕАЛЬHОМ ВРЕМЕHИ ?

"Я смотрел демку Heart-Quake/Iguana (ftp.cdrom.com pub/demos/demos/1994/heartq.zip) - они делают морфинг в реальном времени. Вышеописанный алгоритм слишком медленный для этого. Как у них это получается, причём быстро даже на 486DX33 ?". Как точно сделано с демке, я не могу сказать. Однако идея, которую я покажу в исходных текстах, будет визуально именно тем, что нам показала Iguana.

Прежде всего - только линейная интерполяция. Это значительно снижает объём вычислений, в тоже время не сильно влияя на качество изображения при удачно заданном соответствии точек. Далее - работа в 256 оттенках серого. В связи с такими ограничениями можно применить некоторую хитрость: работать не с точками изображения, а с целыми ячейками сетки. Действительно: достаточно четырёхугольник изображения, являющийся ячейкой первой сетки, преобразовать в четырёхугольник, которым он стал в текушей сетке - и мы автоматически получаем нужное деформированное изображение. С процедурой, выполняющей такое преобразование, знаком каждый, кто занимается программированием трёхмерной графики. Это так называемый линейный маппинг изображения. Hа вход процедуре даются вершины исходного четырёхугольника на текстуре (картинке, ниже - s_polybmp), указатель на саму картинку, координаты вершин требуемого четырёхугольника на экране (s_poly2d). Сама процедура здесь не описывается - это тема отдельной статьи.

С dissolving'ом всё просто: цвет точки определяется по формуле c=c1+(c2-c1)*t, 0

Исходные тексты для Borland Pascal 7.0 for DPMI. Рассчитаны на работу с картинками 256x256 и сеткой 9x9. Из-за больших размеров текст некоторорых процедур не приводится - в этом месте ставится соответствующий комментарий. Все процедуры модуля myvesa и описание редактора сеток не приводится.

Дата публикации: 23.11.1997