Это база: Зачем нужна математика в повседневной жизни — страница 35 из 60

Очень эффективный способ получения реалистичных движений, особенно людей и других гуманоидных существ, – захват движения. Актер проделывает необходимые движения перед камерой или несколькими камерами, если нужно получить трехмерные данные. При этом на ключевых точках его тела, таких как ступни, колени, бедра и локти, закрепляются белые кружки (точки), а затем компьютер, анализируя полученное видео, получает данные о движении этих точек. Эти данные используются для анимации скелета. Именно так был анимирован Голлум в трилогии «Властелин колец». Естественно, если вам нужны странные нечеловеческие (но при этом реалистичные) движения, то и актеру приходится двигаться соответствующим образом.

Каким бы способом ни анимировался скелет, как только результат нас устраивает, мы «набрасываем» на него подготовленную сетку. То есть мы объединяем два списка координат, определяя дополнительные связи между положением костей и положением окружающих их кусочков сетки. Затем на большую часть процесса мы забываем о сетке и занимаемся исключительно анимацией скелета. Именно на этом этапе очень кстати оказывается наша работа, связанная с жестким движением, потому что каждая кость является жесткой, и мы хотим, чтобы они двигались в трех измерениях. Кроме того, мы должны наложить на движение ограничения, благодаря которым скелет будет оставаться целым. Если мы двигаем одну кость, концы костей, прикрепленных к ней, тоже должны сдвинуться, так что мы переносим координаты этих концов в правильные позиции. Затем можно жестко двигать и эти кости тоже, что, конечно, влияет на кости, прикрепленные уже к ним… так, кость за костью, мы заставляем весь скелет слегка изогнуться. Можно сдвинуть ступни, чтобы заставить динозавра идти, изогнуть хвост вверх, вниз или в сторону, открыть ужасные челюсти – но все это мы проделываем на скелете. Это проще, быстрее и дешевле, потому что у скелета намного меньше частей.

Когда характер движений скелета нас устраивает, мы набрасываем на скелет сетку, начиная с первого кадра движения. А программа анимации заставляет следовать за движениями скелета на последовательных кадрах, причем нам уже не нужно ничего делать, за исключением, возможно, одного-двух кликов мышкой. Это позволяет убедиться, что анимация по-прежнему выглядит реалистично, когда весь динозавр следует за тем, что происходит с его скелетом.

Далее можно заняться творчеством и поиграть разными параметрами. Мы можем сдвигать положение «камеры», менять точку зрения, используемую программой, приближать объекты, получая крупный план, или, наоборот, рассматривать бегущего динозавра издалека – все что угодно. Мы можем создавать других существ, например стадо травоядных, убегающих от чудовищного тираннозавра. Делается это аналогично – сначала скелеты, на которые затем набрасывается сетка. Можно анимировать каждое существо отдельно, а затем собрать их вместе в единую сцену охоты хищника.

Поскольку скелеты – это всего лишь схематичные фигурки, на этом этапе мы, пожалуй, еще ничего не сделали, чтобы предотвратить появление двух существ в одном и том же объеме пространства. Дополнительные настройки программы позволяют ей предупреждать нас о столкновениях такого рода. Когда мы набрасываем на скелеты сетки, те многоугольники, которые оказываются впереди, перекрывают те, что сзади, и, поскольку динозавры непрозрачны, приходится убирать те области, которые должны быть скрыты. Все это делается при помощи простых вычислений координатной геометрии, но таких вычислений оказывается довольно много. До тех пор пока компьютеры не стали по-настоящему быстрыми, это было невыполнимо. Теперь это рутина.

Дел остается еще немало, поскольку динозавр, похожий на скопище многоугольников, не слишком впечатляет. Нужно задрапировать многоугольники реалистичным кожным узором, затем разобраться в цветовой информации, может быть, создать какие-то реалистичные текстуры – мех выглядит совсем иначе, нежели чешуя. Каждый шаг требует отдельного программного обеспечения и применения соответствующих математических методов. Этот этап называется отрисовкой, и именно на нем собирается окончательная картинка, которая появляется на экране, когда мы смотрим кино. Но в сердце всего лежат миллиарды вычислительных операций, обеспечивающих жесткое движение точек и ребер.

Эти математические методы обладают и еще одним преимуществом. На любом этапе, когда нас что-то не устраивает, мы можем изменить соответствующую деталь. Если мы хотим, чтобы динозавр был зеленым, а не коричневым, то не нужно перерисовывать все заново. Мы воспользуемся тем же скелетом и той же сеткой, возьмем те же движения и ту же текстуру кожи, но поменяем ее цвет.

Занимаясь созданием фильма или игры, команды специалистов используют целый ряд стандартных пакетов программ, разработанных для обеспечения этих процессов. Чтобы дать вам хотя бы примерное представление о сложности происходящего, я назову некоторые из компаний и программных пакетов, использованные при создании фильма «Аватар».

Основной объем анимации обеспечивала компания Weta Digital в Новой Зеландии, известная своей работой над «Властелином колец» и «Хоббитом». Почти две сотни видеопоследовательностей – в основном это были летательные аппараты в финальном сражении – создала компания Industrial Light & Magic, основанная в 1975 году Джорджем Лукасом для создания спецэффектов для первого фильма саги «Звездные войны». Остальные компании из Великобритании, Канады и США добавляли к изображению важные детали, такие как экраны в аппаратной и информационные табло на забралах шлемов, имитирующие технологии будущего. Большая часть подобных кадров была сделана в редакторе Autodesk Maya. Дизайн моделей летательных аппаратов, в особенности Scorpion, был сделан в программе MODO компании Luxology. Сцены в поселке Хеллс-Гейт и интерьеры создавались в редакторе трехмерной графики Houdini. Инопланетные существа были нарисованы с помощью ZBrush. Первоначальный концепт и текстуры создавались при помощи программы Adobe Photoshop. Всего в работе над фильмом участвовало около десятка компаний и использовалось 22 пакета программ плюс бесчисленные специально написанные плагины.

* * *

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

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

Разумно сшивать и выстраивать последовательности на уровне скелета. Все остальное – набросить сетки, добавить цвет и текстуру – можно сделать позже. Поэтому вы делаете очевидное – соединяете подряд 12 копий цикла бега и прыжок и смотрите, как выглядит результат.

Он выглядит ужасно.

Отдельные кусочки ничего, но друг с другом они гладко не стыкуются. Результат получается дерганым и неубедительным.

До недавнего времени единственным выходом была модификация стыков вручную с интерполяцией новых небольших кусочков движений. Но это было не очень просто. Однако кое-какие недавние новинки в области математических методов обещают облегчить эту задачу. Идея заключается в использовании методов сглаживания для заполнения прорех и выравнивания резких переходов. Главное – найти способы делать это с единичной костью скелета или, в более общем случае, с единичной кривой. Решив такую задачу, можно вновь сшить скелет воедино из отдельных костей.

Область математики, которую сейчас пытаются применить, называется теорией форм. Поэтому начнем с очевидного вопроса: что такое форма?

В обычной геометрии встречается множество стандартных форм: треугольник, квадрат, параллелограмм, окружность. При интерпретации в координатной геометрии эти формы превращаются в уравнения. На плоскости, например, точки (x, y) на единичной окружности в точности удовлетворяют уравнению x2 + y2 = 1. Еще один очень удобный способ представления окружности состоит в использовании так называемого параметра. Это вспомогательная переменная, скажем t, которую мы можем рассматривать как время, вместе с формулами, определяющими, как x и y зависят от t. Если t принимает ряд численных значений, то каждое его значение дает нам две координаты x(t) и y(t). Возьмите правильные формулы, и эти точки определят окружность.

Стандартные параметрические формулы для окружности имеют тригонометрический характер:

x(t) = cos t, y(t) = sin t.

Можно также изменить вид параметра в формуле и все равно получить окружность. Например, если заменить t на t3, то формулы

X(t) = cos t3, y(t) = sin t3

тоже определяют окружность, причем ту же самую. Такой эффект наблюдается потому, что параметр времени несет больше информации – не только о том, как меняются x и y. Согласно первой формуле, точка при изменении t движется с постоянной скоростью. Согласно второй формуле, нет.

Теория форм – это способ обойти проблему неопределенности. Форма – это кривая, которая рассматривается как объект, не зависящий от конкретной параметрической формулы. Так что две параметрические кривые определяют одну и ту же форму, если можно изменением параметра превратить одну формулу в другую, как при замене