- •Пример № 4 Персонаж взаимодействует с другими объектами.
- •Пример № 5.
- •(Отсутствует)
- •(Отсутствует)
- •(Отсутствует)
- •1. Перезапустите 3ds max 4.
- •Пример № 6 Работа с данными Motion Capture.
- •1. Перезапустите 3ds max 4.
- •Пример № 7 Покрытие скелета оболочкой с помощью модификатора Physique
- •Пример № 8. Работа с анимацией групп.
- •Урок 1. Начала работы с поведением
- •Создание группы
- •Добавление поведения
- •Применение визуальной подсказки
- •Настройка поведения
- •Изменение поведения
- •Пример № 9. Анимация многоногих существ
- •Выбор и перемещение рук вниз
- •Привязка рук к позвоночнику
Применение визуальной подсказки
Для настройки параметров обратной связи делегатов иногда желательно получить представление о том, почему делегаты ведут себя именно так. С этой целью применяются визуальные подсказки об активности и параметрах, зависящих от расстояния.
В свитке Avoid Behavior включите Hard Radius и Display Repel Radius.
Вокруг каждого делегата появятся каркасные сферы, показывающие соответствующие радиусы (жесткий и отталкивающий)
Выключите Display Hard Radius и Display Repel Radius, чтобы избежать загромождения картины.
В свитке Avoid Behavior, группе Display During Solve включите Potential Collision, Repel Activity и Look Ahead Radius.
Проведите моделирование
Во время моделирования белые линии показывают определение вероятного столкновения, цветные линии – отталкивающую активность, а сферы – радиусы обзора. Последнее доступно только во время моделирования, так как рассчитывается, исходя из установки Look Ahead и текущей скорости делегата.
Настройка поведения
Делегаты избегают друг друга, поскольку установка Look Ahead задает каждому делегату количество кадров, на которые он рассчитывает вперед поведение других делегатов, что и позволяет ему избежать столкновения. По умолчанию эта установка равна 30. Делегаты будут подходить друг к другу ближе, если это значение уменьшить.
Установите Look Ahead равным 3.
Запустите моделирование.
На этот раз делегаты не будут уступать друг другу дорогу издалека. Фактически, Вы можете увидеть и некоторые столкновения, поскольку малое значение Look Ahead не дает им времени начать разворот, чтобы избежать удара. Наилучшее значение для поведения Avoid, как и для других поведений определяется исходя из ситуации методом проб и ошибок.
Изменение поведения
Далее Вы заставите делегатов перестать стремится к кубику, и начать движение назад, когда они подойдут к нему достаточно близко. Вы можете сделать это, назначив существующее поведение Repel команде Seek Team, и активировав его в том же кадре, в котором отмените поведение Seek.
Сначала просмотрим анимацию, чтобы определить, когда менять поведение.
1. Перемещая ползунок взад и вперед, найдите кадр, в котором делегаты подходят ближе всего к кубику.
Выберите кадр возле семидесятого.
2. Переместите ползунок назад к кадру 0 и включите кнопку Animate.
3. Откройте диалог Behavior Assignments и назначьте Repel Behavior команде Seek Team.
4. В списке Behavior Assignments нажмите левую кнопку мыши на пункте Seek Team Repel Behavior.
Соответствующий пункт в группе Assignment Design выделится и элементы интерфейса внизу группы Behavior Assignments станут доступны.
5. Внизу группы Behavior Assignments выключите флажок Active.
Крестик, стоящий в соответствующей строке списка назначенных поведений пропадет, показывая, что это поведение неактивно. Это значение поддается анимации, то есть Вы можете напрямую назначать, какое поведение активизируется или отключается в любом кадре.
6. Переместите ползунок в кадр 70.
7. Включите флажок Active для назначения Seek Team Repel Behavior, затем выберите назначение Seek Team Repel Behavior и отключите для него флажок Active.
8. Перемещая ползунок взад и вперед возле кадра 70, наблюдая за списком Behavior Assignment.
В то время как поведение Repel включается, поведение Seek отключается.
9. Закройте диалог и выключите анимацию.
10. Запустите моделирование.
В кадре 70 делегаты перестанут двигаться к кубику и начнут двигаться от него.
Для более плавного изменения можно анимировать установку Weight. Она управляет степенью влияния поведения на делегата и может находится в диапазоне от 0.0 до 1.0.
Урок 8.4: Добавление логики к поведению группы |
В предыдущем уроке Вы научились переключать команду с одного поведения на другое с помощью анимации флажка Active. Вы сделали это, выполнив моделирование, и определив таким образом кадр, в котором должна произойти смена поведения. Однако это не очень гибкий подход. Если Вы поменяете местоположение кубика или скорость делегатов, кадр, в котором надо менять поведение, изменится, и Вам придется изменять как минимум два ключа. В более сложных ситуациях, таких как несколько целевых объектов, или двигающийся целевой объект, или делегаты, которые подходят к цели с разных дистанций, применение описанного выше способа может оказаться очень трудным.
Для сложных ситуаций Вы можете назначить распознающий контроллер делегатам и командам. Распознающий контроллер может иметь несколько состояний. Каждое состояние может содержать одно или несколько поведений, каждое со своим весом. Вы определяете состояние как диаграмму и связываете его с алгоритмом изменения. Алгоритм изменения использует язык Max Script, чтобы определить, когда одно состояние передаст управление другому.
В этом уроке мы используем распознающий контроллер, чтобы изменить поведение команды с Seek на Repel при подходе делегата к кубику.
Установка поведения
Откройте файл, который Вы сохранили в середине урока 2 (cs_tut08_lesson4a.max) или, если хотите – cs_tut08_lesson4.max из директория cstudio\tutorials\tutorial8, который расположен в главном директории 3ds max 4.
Данная сцена содержит десять делегатов, расположенных на границе сферы вокруг кубика.
Выберите объект группы и откройте панель Modify.
Используйте диалог Edit Multiply Delegates, чтобы включить Constrain to XY Plane для всех делегатов.
Этот метод обсуждался в предыдущем уроке.
Добавьте поведение Seek и Repel и установите кубик как объект обеих поведений.
Для поведения Repel выключите Use Radii
Использование распознающего контроллера
Вместо назначения этих поведений делегатам, Вы используете их для построения распознающего контроллера и назначите созданный контроллер делегатам.
В свитке Setup нажмите кнопку Cognitive Controller.
В окне Cognitive Controller Editor нажмите кнопку New на правой стороне инструментальной панели.
Это создаст новый распознающий контроллер с именем Cognitive Controller и активизирует инструмент Create State.
Нажмите левую кнопку мыши два раза в окне редактора в двух разных местах.
Это добавит к контроллеру два окна состояния, каждое из которых может содержать любое количество поведений.
Редактор распознающего контроллера с добавленными двумя состояниями.
Первое из состояний – темно-красное, оно будет стартовым состоянием и выполняться первым, когда распознающий контроллер начнет работу.
Вы можете назначить стартовым и другое состояние.
Чтобы делегаты стремились к кубику, Вы назначите поведение Seek первому состоянию. Вы можете сделать имя состояния более описательным и назначить поведение каждому состоянию.
Щелкните правой кнопкой мыши чтобы выйти из режима Create State, а затем на красном окне состояния.
Имя диалога отражает имя состояния на тот момент, когда Вы его открыли. Вы можете изменить это имя, и оно отобразится на экране при следующем обновлении.
В диалоге State щелкните левой кнопкой мыши в верхнем однострочном окне редактирования и поменяйте имя состояния на Seek.
Нажмите кнопку Add. В диалоге Select Behavior нажмите Seek Behavior, а затем кнопку OK.
Поведение Seek выделится в списке. Вы можете изменить его вес, чтобы, если состояние содержит несколько поведений, некоторые могли доминировать над другими.
Когда Вы откроете диалог Select Behaviors, экран обновится, и имя диалога State поменяется на Seek.
Закройте диалог Seek, нажав на кнопку “закрыть” в правом верхнем углу окна.
Поменяйте имя второго состояния на Repel и назначьте ему поведение Repel.
Создание перехода
Вы добавите переход между двумя состояниями и создадите короткую программу на языке MAX Script, которая будет сообщать распознающему контроллеру, когда переключаться между состояниями.
В окне редактора нажмите Create Position.
Проведите курсором мыши (с нажатой левой кнопкой) от состояния Seek к состоянию Repel.
Появится стрелка, указывающая от первого состояния ко второму. Это и есть переход.
Щелкните правой кнопкой мыши на стрелке перехода.
В диалоге перехода (“Seek ® Repel”) поменяйте установку Duration на 10.
Это приведет к тому, что условие перехода будет обсчитываться 10 кадров, вместо 25. Более короткий переход дает более быструю реакцию.
Нажмите кнопку MAX Script.
В окне MAX Script введите следующее
Fn TestDist del t = ( get_dist = distance $box01.pos del.simpos if get_dist < 120 then 1 else 0 )
Впрочем, Вы можете загрузить файл MAX Script test_dist.ms из директория cstudio\tutorials\tutorial_8, расположенного в главном директории 3ds max 4.
Эта программа проверяет в каждом кадре расстояние между каждым делегатом и кубиком. Если оно меньше 120 единиц, делегат переходит в другое состояние, которое использует поведение Repel. Имя функции, второе слово в программе (после “fn”) должно появится в диалоге Transition.
Программа начинается со слова get_dist, подсчитывает расстояние между положением ([name].pos) указанного объекта ($box1) и положением делегата, вызвавшего программу (del.simpos). “Simpos” – специальное свойство местоположения, используемое для определения положения делегата во время моделирования.
Программа перехода от одного состояния к другому рассчитывается каждый кадр, для каждого делегата, который использует данный распознающий контроллер. Каждый раз, когда программа выполняется, контроллер заменит параметр del на имя текущего делегата.
Первый раз, когда программа выполнится в некоем кадре, она посчитает расстояние между объектами box01 и delegate01, второй раз между delegate02 и box01, и т.д. Чтобы посмотреть, в каком порядке рассчитывается расстояние между делегатами и кубиком, вставьте в программу следующую строку.
print del.name
Убедитесь, что открыто окно Listener (нажмите клавишу F11) перед запуском моделирования.
Чтобы узнать больше о программировании на MAX Script, прочитайте раздел Procedures в главах электронного справочника “Cognitive Controller Editor” и “State Transition Dialog”, где Вы можете найти много простых программ с описанием их компонент и функций.
Щелкните два раза на имени функции (“TestDist”), чтобы оно выделилось, и затем нажмите клавиши Ctrl+C, чтобы скопировать его в буфер обмена Windows.
Закройте диалог MAX Script.
В диалоге Transition щелкните левой кнопкой мыши в текстовом окне в группе Transition Condition, чтобы выделить имеющийся там текст и нажмите Ctrl+V, чтобы вставить в это окно имя функции из буфера обмена.
Закройте диалог Transition, а затем Cognitive Controller Editor.
До того, как Вы сможете проверить свой контроллер в действии, осталось два коротких шага.
Откройте диалог Behavior Assignments и создайте команду, состоящую изо всех делегатов.
Назначьте распознающий контроллер (CogController) созданной команде и закройте диалог.
Запустите моделирование.
Делегаты перемещаются к кубику, пока не подойдут к нему довольно близко, а затем устремляются в обратном направлении.
Попытайтесь сделать следующее:
· добавить второй переход, который возвращал бы делегатов к кубику, когда они отойдут от него на некоторое расстояние. Совет: надо изменить всего три места в приведенной программе;
· анимировать кубик, чтобы делегаты могли преследовать его, пока не подойдут к нему на определенное расстояние (120 единиц). Совет: возможно, придется изменить установку End Solve;
· используйте диалог Edit Multiple Delegates для установки случайной скорости для делегатов с тем, чтобы они достигали кубика и начинали уходить от него в разное время.