Журнал «Компьютерра» №1-2 за 2006 год - Компьютерра. Страница 12
Если для создания инверсной кинематики обычно достаточно пары кликов мышкой, то для того, чтобы сделать мышцу, придется программировать. Большинство солидных 3D-пакетов включают в себя язык для написания встроенных программ. Вот и в этом случае поведение мышцы зависит не только от расположения костей, но и от скорости их взаимного движения. Ведь при одном и том же положении локтевого сустава бицепс будет находиться в совершенно разных состояниях в зависимости от того, сгибается рука или разгибается.
Если мы присмотримся, например, к бегущей собаке, то увидим, что некоторые части ее тела колеблются в такт прыжкам. Это, конечно, можно сделать аналогично мышцам, написав соответственный код. Но можно воспользоваться возможностью 3D-пакетов рассчитывать динамику упругих тел. Многие физические процессы можно моделировать встроенными средствами программ для моделирования. И так «подвесив» в нужном месте деформирующее тело на специальные пружины и настроив необходимые динамические параметры, мы получим желаемый результат. Существенно повысить реалистичность можно, если применить аналогичный метод ко всем крупным мышцам существа.
Посмотрите на свою руку: видите морщины, появляющиеся на ней, когда вы сгибаете локоть? Нашему персонажу такие морщины тоже нужны. Для их имитации строятся специальные кривые, которые, в отличие от костей, продавливают кожу. И после размещения в нужном месте «привязываются» к скелету.
Теперь тело персонажа практически готово. Но лицо, ну или морда, что у него там есть, остается неподвижным. А если в фильме будут крупные планы? Для создания мимики существует несколько принципиально разных подходов. Естественный – для мимики используется имитация лицевых мышц. Они, как ни удивительно, делаются из тех же костей, что и скелет, но работают, как настоящие мышцы, – изменяя длину, двигают ткани лица. Этот метод дает практически полную свободу в создании различных выражений лица, но достаточно сложен в управлении, ведь лицевых мышц может быть очень много.
Более простой в управлении метод основан на плавной модификации трехмерных объектов. Сначала лицо персонажа дублируется в нескольких экземплярах, обычно не более пяти. Каждый из дублей модифицируется таким образом, что выражает крайнюю степень той или иной эмоции: радости, гнева, страха.… После чего специальный инструмент позволяет «смешивать» в разных пропорциях эти лица. Теперь при помощи пяти ползунков можно управлять мимикой персонажа. Более того, таким же образом можно создать и эффект плавной трансформации, всего лишь сделав пару из новых лиц, сильно не похожих друг на друга.
Когда все предварительные работы завершены, в дело вступают аниматоры. Именно эти люди научат наше существо двигаться на экране. Самый простой метод анимации компьютерных персонажей называется методом ключевых кадров (Key Frames). Состояние героя точно задается на некотором наборе кадров, эти кадры не обязаны идти в фильме последовательно, например поза существа может быть задана на первом десятом и пятидесятом кадрах. После чего для всех промежуточных (не ключевых) кадров автоматически вычисляется положение всех частей героя. Этот способ достаточно прост в реализации, но слишком трудоемок для создания движений сложной конфигурации и требует большого умения аниматора для получения реалистичности поведения персонажа. Более того, не все позы персонажа в реальности бывают возможными. Зритель вряд ли поверит в существо с явно смещенным центром тяжести. Например, при анимации хвоста бегущего динозавра надо следить за тем, чтобы хвост, как и его прототип, балансировал в воздухе, помогая своему хозяину не упасть. В таких случаях зачастую применяется процедурная анимация, здесь для управления персонажем или его частью пишется специальная программа, которая может расположить одни части тела персонажа оптимальным образом исходя из других и существа в целом. Но и такой подход не всегда дает приемлемый результат.
Что же может стать источником реалистичного движения? Правильно, сам человек. Для того чтобы перенести движения с человека на цифрового персонажа, существуют системы захвата движения (Motion Capture), позволяющие анимировать в реальном времени. Существует три принципиально разных подхода к созданию таких систем. Первый: можно разместить на руках, ногах и других частях тела специальные датчики, которые будут передавать на компьютер информацию о своем положении в пространстве. Второй: на человека можно «надеть» внешний скелет, регистрирующий изменение положения своих костей. Однако обе эти технологии громоздки и дороги.
Третий же (новейший) способ захвата движения куда проще. На теле человека в особых точках размещаются специальные маркеры, например ярко-оранжевые перчатки. А программный комплекс восстанавливает положение маркеров в пространстве, получая данные с обычных цифровых камер, расположенных вокруг движущегося человека. Этот способ наиболее удобен, так как оборудование почти не мешает двигаться. Впрочем, для достижения более реалистичных результатов могут применяться особые костюмы, сковывающие движения актера, для восстановления походки рыцаря в тяжелых латах, может быть, и актеру придется облачаться в некоторое подобие средневековых лат. К тому же технологии Motion Capture годятся для копирования движений не только человека, но и животных.
Даже мимику можно перенести с реального персонажа на виртуального. Для этого на лицо человека наклеиваются яркие кружочки, после чего его снимают с нескольких камер одновременно, и с помощью программного обеспечения, схожего с тем, которое используют для Motion Capture, физиономия человека в реальном времени переносится на компьютерного героя.
А что это мы совсем забыли о механических актерах. Их можно сделать очень похожими на живой организм, просто скопировав его устройство с начала и до конца. Сначала изготовить копию скелета с функциональными устройствами, заменяющими мышцы, после чего разместить муляжи мышц, снабдив их возможностью увеличивать объем и, наконец, обтянуть все «кожей». Так как ее можно изготовить из материалов, похожих по свойствам на настоящий покров животного, результат может быть очень реалистичен. Но это пока наш механический актер неподвижен. Во время съемок ему придется двигаться. Это могут быть однокадровые движения как в классической кукольной мультипликации, но тогда можно будет забыть о сложных прыжках и естественности движений. Более того, этот метод съемок требует большого количества времени. Так, при съемках первого «Кинг-Конга», где роль большой обезьяны играла кукла, а деревья в джунглях были простыми комнатными растениями, в сцене, пока Конг шел по лесу, одно из деревьев успело выбросить бутон и даже зацвести.
Если нам надо снимать непрерывные движения, то кукла должна либо самостоятельно двигаться, либо использовать помощь человека. Куклы-роботы хорошо подходят только на роли роботов, все дело в их необычном стиле передвижения: согласитесь, трудно не узнать походку даже самого изощренного робота и еще труднее выдать ее за прыжки зайца или бег человека. Помощь человека машине может прийти как снаружи, так и изнутри. Да, именно изнутри, персонаж может надеваться на актера, как новогодний костюм. Это позволяет достичь некоторой реалистичности движений, но не позволяет создать героя ростом четыре метра или существо с непропорционально длинными конечностями: тот же Кинг-Конг с человеческими пропорциями смотрелся бы не так колоритно. Существуют и другие вариации на тему марионеток, но всем им присущ крупный недостаток – даже не необходимость стирать на отснятом материале веревки, а все та же неестественность движений, зритель в них не верит.
Если механического актера, как и живого, можно снять обычной камерой, то для их компьютерных коллег применяются специальные программы рендеринга, позволяющие создавать реалистичное изображение на основе 3D-сцен. Для наиболее сложных сцен обычно используют так называемые рейтрейсеры (Raytracer). Принцип действия этих программ довольно прост. Из оптического центра камеры через каждый пиксел на экране пускается луч. Он может отражаться, преломляться и затухать в зависимости от того, какие объекты встречаются у него на пути, и в конце концов приносит информацию о цвете того пиксела, через который прошел в самом начале своего пути. Понятно, что такой способ визуализации требует немалых вычислительных мощностей, особенно если учесть огромные разрешения кинематографических форматов.