Процедурная анимация и почему она не заменит ручной труд

На примере процедурной анимации, поговорим о том, почему прогресс не лишит нас работы

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

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

Одной из таких техник, получившая огромную популярность, является процедурная анимация - анимация, генерируемая компьютером. Давайте поговорим о том, что это и как работает.

Что это такое

Прежде всего, нам нужно понять, что такое сама по себе анимация. Попробую ввести термин самостоятельно. Анимация - это последовательность визуальных состояний. То есть, у вас есть объект, он может находиться в нескольких состояниях (например, рот куклы может быть открытым и закрытым), причём мы можем видеть эти состояния и отличать друг от друга невооружённым взглядом. И процесс анимирования заключается в создании последовательного набора изображений (например, картинок), которые захватывают эти состояния.

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

Завораживающе

Неудивительно, что аниматоры кинулись в объятия компьютеров, которые легко могут автоматизировать этот процесс, сняв с аниматоров большую часть нагрузки.

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

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

Как уже было сказано, для создания анимации вам необходимо предоставить компьютеру начальные условия (положения объектов и действующие в пространстве законы), а также конечный результат (то есть, длину анимационного клипа и конечное состояние объектов). Например, если вы хотите создать анимацию летящего шара, то вам нужно задать начальное и конечное положение шара, а так же пространственные законы на него действующие (или их отсутствие).

Основные понятия процедурной анимации

Поговорим об основных понятиях, которые вы встретите при использовании процедурной анимации:

Сцена - некое пространство, в котором происходит действие. Сцена обладает определёнными настройками, определяющими вид и поведение объектов на сцене, как например гравитация. А так же она обладает объектами, не подверженных анимации, но влияющие на все остальные объекты, например освещение или пол.

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

Самое интересное, что есть в процедурной анимации - это закон перехода (или интерполяция). Если у вас есть объект и два заранее определённых для него ключевых кадра, то для того, чтобы сменить состояние объекта в промежуточных кадрах, программа использует закон перехода - некоторую формулу, которая определяет поведение свойств объекта. Эти формулы могут быть абсолютно любыми, на выбор аниматора, но обычно используются линейный закон (y = x), квадратичный (y = x^2), экспоненциальный (y = e^x), синусоидный (y = sin(x)) или заданный через сплайн (совокупность многочленов). А в вычислении состояния объекта нам поможет интерполяция - математический метод нахождения промежуточных значений.

Допустим, шар находится в позиции x = 0 на кадре 0 и его нужно передвинуть в позицию x = 10 на кадре 10. С помощью интерполяции попытаемся узнать, где шар будет на позиции в кадре 5. Нормируем условия, чтобы свести конечный кадр и конечную позицию к 1, то есть и x, и y нужно будет делить на 10. Тогда шар будет находиться в позиции x = 5 для линейного закона, x = 2.5 для квадратичного, x = 7.07 для синусоидного, x = 2 для экспоненциального.

Значение величины на каждом отдельном кадре в зависимости от выбранной формулы
Значение величины на каждом отдельном кадре в зависимости от выбранной формулы

Каждый из законов используется для своих ситуаций: затухающий синосуидный для демонстрации остановки объекта, набирающий обороты экспоненциальный для разгона или для чего-то внезапно произосшедшего. Параболически закон используют для того и для другого, потому что он вообще идеально описывает траекторию движения тел, запущенных в свободный полёт. Линейный же закон используют для простого монотонного движения. И нет никакого универсального способа, в каждой конкретной ситуации нужно будет использовать что-то своё.

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

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

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

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

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

Скелет можно использовать как в свободной среде, так и через ключевые кадры: полученному скелету или его отдельным компонентам задаются состояния, под которые скелет так или иначе подстраивается.

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

Можете залипнуть в симуляцию воды, кстати

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

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

Ещё одной интересной техникой является смешивание анимационных клипов. Например, представьте себе скелет, у которого есть две анимации: медленная ходьба и быстрый бег. С помощью смешивания мы можем получить анимацию для скелета в промежуточных состояниях, например для медленного бега мы бы использовали среднее арифметическое, иначе говоря (a+b)/2, где a и b - позиции костей для клипов ходьбы и бега.

А вот тут уже другое смешивание: одна анимация накладывается поверх другой

Достоинства и недостатки

Сначала о достоинствах.

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

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

Как вы думаете, справились бы аниматоры с этой сценой, рисуя они её вручную?

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

Именно поэтому компьютер определённо лишил аниматоров множества рутины, давая возможность сконцентрироваться на дизайне и эмоциях. Но это если аниматоры умеют пользоваться теми инструментами, что им выданы.

Однако есть и недостатки, от которых нам не скрыться.

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

Инструменты для создания процедурной анимации очень сложны, просто потому что они максимально универсальны. Например, простейшая система частиц в Unity содержит около сотни различных параметров, собранных в паре десятков категорий. Доходит до абсурда: некоторые вещи легче нарисовать от руки, чем обучиться инструменту, который это сделает за вас в пару секунд. Впрочем, знание инструментов окупается в долгой перспективе. Возможно, как в фильмах про будущее, прогресс дойдёт до того, что мы сможем управлять After Effects через голос или движения рук в воздухе, но я в этом очень сильно сомневаюсь - профессионалы индустрии пока что предпочитают стабильность и количество возможностей взамен удобству использования.

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

Очень красиво, но физически некорректно
Очень красиво, но физически некорректно

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

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

1010
2 комментария

Комментарий недоступен

Ответить

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

1
Ответить