Войти
АртСтатьи

Приближение анимации персонажа к реальности. (4 стр)

Автор:

Полезные рекомендации

Напоследок хочу представить несколько советов относительно процесса создания анимации. На сегодняшний день программа 3ds Max и модуль CStudio имеют огромную функциональность, поэтому если вам тяжело сделать то или иное движение, попробуйте варьировать способы его получения, например, разбить на слои, задать математическими выражениями и т.д. Это аналогично ситуации, когда вы не можете повысить производительность за счёт покупки нового железа (денег не хватает, например), тогда вы ищите новый софт, более быстрый и качественный. И, конечно же, в качестве рекомендаций – особенность отображения резкого движения и состояние покоя.

Динамика резкого движения

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

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

Изображение

Рука находится в положении покоя, затем начинает резко перемещаться…

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

Крайне резкая остановка при ударе рукой приводит к вибрации всего тела.

Анимация «Удар рукой»

Итак, как мы и условились, резкое движение состоит из стандартных трёх фаз:

- упреждение – в данном случае это подготовка тела к резкому движению рукой.

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

- завершающая стадия – содрогание тела, как следствие повышенного напряжения с целью фиксирования положения.


Загрузите файл «blow_start» и воспроизведите анимацию. Скелет Biped ударяет рукой, однако в движении отсутствует завершающая стадия. Наша задача добавить таковую для придания движению реализма. Т.к. размах довольно значительный, то «дрожать» заставим всё тело.

Выделите COM (центр тяжести) объект (это удобно сделать через именованное с соответствующим названием выделение). Активируйте команду вращения и на «панели кадров» увидите ключи для вращения центра тяжести. Последний ключ приходиться на 35 кадр – момент удара, после которого и нужно добавить содрогание. Так что включите режим авто ключа (Auto Key) и перейдите в кадр 37. Поверните COM на –3 градуса по оси Z. Скопируйте ключ из 35 кадра в 39. Центр тяжести теперь дергается, переходим к самому нижнему позвонку.

Выделите нижний позвонок и проведите для него те же операция, что и для COM’а, с такой разницей, что в 37 кадре позвонок нужно повернуть на 3 градуса по оси Z.

Выделите кисть левой руки (та рука, которой выполняется удар). Для неё также скопируйте анимационный ключ из 35-го кадра в кадр 38. Теперь перейдите в кадр 36 и незначительно перетащите кисть руки направо.

Для правой руки скопируйте анимационный ключ из кадра 35 в кадр 39. В кадре 37 слегка подвиньте руку ближе к телу.

Всё готово, теперь у удара есть завершение, что немаловажно. Результат приведенных действий этого урока сохранен под названием «blow_end».

Состояние покоя

В компьютерных играх повсеместно используется анимация под названием «Idle», своего рода состояние незанятости. Однако, если бы персонаж просто стоял от нечего делать в одной позе, то походил бы на монумент (в 3d подобные замирания сразу бросаются в глаза). Чтобы вдохнуть жизнь в героя или, другими словами, добавить немного реализма трёхмерной модели, достаточно прибегнуть к любым движениям, пусть даже не значительным. Это может быть дыхание, имитация которого очень хорошо подходит для подобной задачи. Чтобы немного «разбавить» однотонность дышащего персонажа, прибавляйте озирания по сторонам, почёсывания и т.п.

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

«Дыши, не дыши…»

Загрузите сцену «biped_prepare» или же сами создайте новую сцену с одним только Biped скелетом в ней. Включите режим автоматической установки ключей, и через каждые 30 кадров чередуйте две приведенные на рисунке позы (каждая поза выполнена через повороты двух верхних позвонков Biped скелета).

Изображение

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

Теперь, относительно четвёртой версии, появляется фитча (возможность), благодаря которой управлять Biped анимацией можно с помощью любого имеющегося в наличие у Макса и подходящего по типу данных контроллера. Давайте вспоминать математику…

«Дыши по формуле»

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

Изображение

Приготовьте сцену, на которой можно попрактиковаться, либо загрузите «biped_prepare».
Выделите верхний позвонок Biped скелета и перейдите к панели анимации.

Раскройте свиток назначения контроллера (Assign Controller) и найдите пустой слот дополнительного контроллера для масштабирования, выделите его (выделенный, он показан на рисунке).

Теперь назначьте на него (кнопка Assign Controller, она одна единственная в этом свитке) контроллер управления с помощью  математического выражения (Scale Expression). На экране появиться диалог, из которого нас интересует только правое верхнее поле, названное «выражение» (Expression). Обратите внимание на то, что там написано три единицы, заключенные в квадратные скобки. Это масштаб по каждой из осей. Я не буду пояснять смысл выведенного мной выражения (я же не книгу, а статью пишу). Тем более, что с основами Макса можно ознакомиться и с помощью «букваря» (их сейчас в любом книжном навалом, да и Интернете немало документации), так что введите следующее выражение, на место изначально:

[ abs(sin( radToDeg(F/15)))/100+1, 
abs(sin( radToDeg(F/15)))/8+1, 
abs(sin( radToDeg(F/15)))/8+1 ]

Закройте диалог и спустите выделение на один позвонок ниже (на клавиатуре такую операцию можно выполнить нажатием клавиши «PageUp»). Проделайте те же действия по установке нового дополнительного контроллера, однако вставьте немного другое выражение:

[ abs(sin( radToDeg(F/15)))/100+1, 
abs(sin( radToDeg(F/15)))/6+1, 
abs(sin( radToDeg(F/15)))/6+1 ]

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

Но это ещё не всё. Я хочу представить ещё один пример на тему добавления реализма в спокойное неподвижное состояние.

«Как у тебя руки трясутся…»

Изображение

Загрузите файл «shake_start» и в сцене появиться Biped скелет с вытянутыми руками. Давайте теперь заставим руки трястись, что также поможет оживить героя.

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

Обратите внимание на то, что рука теперь не неподвижно висит в воздухе, а легонько трясётся.

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

1)  Двойной щелчок на объекте приведёт к выделению всех его потомков. Это очень удобно для выделения, к примеру, всей руки скелета. Для этого достаточно два раза кликнуть по плечу.

2)  Не забывайте про клавиатурные комбинации:


Действие  Установка ключа  Копировать позу  Вставить позу 
Клавиатурная комбинация
0
Alt + C
Alt + V

В таблице я представил только несколько основных комбинаций, в любом случае в 3ds Max’е есть возможность добавлять свои макро скрипты (описывать собственные новые команды) и назначать потом на них клавиатурные комбинации.

3)  Старайтесь разбить анимацию на некоторые стадии, которые были бы более понятны и просты. Я говорю о незаменимом использовании слоёв.

4)  Если вы видите, что при работе появляются какие-то повторяющиеся действия, то распишите их как алгоритмы и превратите в скрипты, это ускорит выполнение вашей работы.

На третьем и четвёртом совете я хочу особо заострить внимание.

Скрипты

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

В качестве примера на облегчение жизни аниматора в его нелегком деле, привожу небольшую простую утилиту.

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

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

Привожу пример кода для выставления значения ослабления от ключа равным 50.

  on execute do
  (  
    local n = numkeys cnt
    if (n > -1) then 
      for i = 1 to n do 
      (
        local bk = getKeyTime cnt i
        
        if (bk == sliderTime) then (
          local k = biped.getKey $.controller i
          
          -- set up new value
          k.easyFrom = 50
          
          exit
        )
        
      )
  )  

Явное удобство и множество вариаций. Для выполнения примера по созданию анимации ходьбы вам пригодиться утилита «Normal Tension», которую вы сможете найти в файле «BU_NormalTension». Чтобы воспользоваться утилитой, откомпилируйте её. Она появиться в разделе «Biped_Utilities» и дальше либо назначьте какую-нибудь клавиатурную комбинацию, либо вынесите её на панель в качестве кнопки и т.п.

Использование слоёв

Я не буду вдаваться в основы работы со слоями в Character Studio, думаю, было бы куда лучше с моей стороны привести пример их уместного использования. Однако, могу напомнить, что функциональные команды расположены в свитке «Слои» (Layers) панели скелета Biped во вкладке «Движение» (Motion).

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

« Что это за запах? »

Актёром (подопытным кроликом) для выполнения данной анимации будет монстр.

Как для монстра передать процесс распознавания запаха? Я предположил, что основным движением будет вытягивание головы и туловища вперёд и затем поочерёдно в стороны. Тем самым персонаж как бы принюхивается к окружающему, точно не зная, где находится то, что ему надо.

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

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

Итак, давайте прибегнем к использованию нового слоя. Создайте новый слой Изображение  и можете даже имя ему назначить, как говориться «Порядок не бывает лишним». Включите режим «Авто ключа» (Auto Key) и можно приступить к анимированию.

Выделите голову скелета и установите для неё ключ Изображение  в 40-м кадре. Теперь будем поднимать и опускать голову через её вращение по оси Z, причём для поднятия вращаем с отрицательным значением угла поворота, а для опускания – с положительным. В кадре 43 поднимите голову на 5 градусов, в кадре 46 опустите на 7 градусов, и в кадре 50 поднимите на 12 градусов.

Скопируйте ключ 50-го кадра в кадр 57 и в 60-м кадре поднимите голову на 3 градуса. Это позволит немного вытянуться голове, немного приукрасить анимацию. Продержим такое положение до 69 кадра, где установите анимационный ключ. Подобная пауза будет изображать глубокий вдох.

Как видите накладывать дополнительные перемещения с помощью использования слоёв довольно просто и эффективно, поэтому заполните подобными попеременными поднятиями и опусканиями головы промежуток между 69-м и 83-м кадрами, используя интервал между ключами в 4 кадра для опускания и в 2 кадра для подъёма (варьируйте этими значениями, отходя от заданных на +- 1 кадра). В 89-м кадре поднимите голову на 2 градуса. Всё, анимация готова.

Результат выполнения вышеописанных действий сохранён в файле «smell_end».

«Хождение на корточках»

Приведу ещё один очень простой, но наглядный пример:

Загрузите сцену с файла «layers_start». Проиграйте анимацию, она была сгенерирована CStudio с использованием 9-ти шагов стандартной ходьбы.

Теперь перейдите в свиток «Слои» (Layers) и создайте новый слой с помощью соответствующей кнопки.

Активируйте режим «Авто ключа» (Auto Key) и перейдите в кадр 0. Превратим обычную ходьбу в хождение на корточках. Для этого опустите центр тяжести на –20 единиц по оси Z (для выполнения вертикальных перемещений можно активировать соответствующий режим Изображение  в свитке Track Selection), а обе стопы поднимите по той же оси на 20 единиц. Готово, теперь проиграйте анимацию и обратите внимание на то, как просто вносить вариации в существующую анимацию через применение слоёв.

Результат записан в файле «layers_end».

Заключение

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

Страницы: 1 2 3 4

#3D Studio MAX, #анимация, #персонажи

29 сентября 2004 (Обновление: 3 дек 2017)

Комментарии [21]