3D Studio MAX: первые шаги. Урок 21. Иерархия и прямая кинематика
Управление иерархическими цепочками
Примеры анимации иерархически связанных объектов
Слежение за движущимся объектом
Шевеление щупалец морского обитателя
Слежение за движущимся объектом
Предположим, что по некоторой достаточно длинной криволинейной трассе движется объект (в нашем случае примитив TorusKnot), перемещение которого должно фиксироваться камерой крупным планом — значит, в конкретный момент времени наблюдать можно только за отдельным участком трассы. Кроме того, небольшой фрагмент трассы с объектом в каждый конкретный момент времени должен освещаться тремя разноцветными прожекторами, напоминающими разноцветные театральные софиты. Получается, что помимо движения объекта по сложной траектории требуется также организовать слежение за ним камеры и трех источников света. Создайте плоскость и объект TorusKnot, а затем настройте освещение посредством внедрения в сцену слабого Omni-источника для общего освещения сцены и трех направленных прожекторов, например с лучами синего, красного и зеленого цветов и небольшими световыми конусами (в данном случае параметр Hotspot/Beam равен 10, а Falloff/Field — 20) — рис. 41. Добавьте трассу в виде произвольного криволинейного сплайна и переместите объект в начало трассы (рис. 42).
Рис. 41. Исходная сцена
Рис. 42. Появление трассы
Анимируем перемещение объекта. Создайте объект-пустышку и организуйте его перемещение по траектории (команда Animation=>Constraints=>PathConstraint с включенным на панели Motion флажком Follow). Свяжите объект TorusKnot с фиктивным объектом и выровняйте его по объекту-пустышке по всем трем осям, убедитесь, что при проигрывании анимации объект TorusKnot совершает запланированное перемещение по траектории.
Теперь нужно настроить слежение источников света. В нашем случае источники направленные ( Target Spot), то есть для них уже задан контроллер Look At (Смотреть на), ограничивающий их вращение таким образом, чтобы они всегда были направлены на свои мишени. Поэтому самым простым решением представляется указать в качестве мишеней Dummy-объект, что автоматически приведет к тому, что источники всегда будут направлены на движущийся объект. Для этого достаточно выделить первый источник (без мишени), на панели Motion открыть свиток Look At Parameters (Параметры контроллера «Смотреть на»), щелкнуть на кнопке Pick Target (Указать мишень) и указать в одном из окон проекций объект Dummy01 (рис. 43). Затем данную операцию следует проделать в отношении двух других источников. После этого источники света будут действительно следить за движущимся объектом, только вот эффект разноцветных театральных софитов окажется утраченным, поскольку все три источника станут освещать одну и ту же область пространства, а значит, их разноцветные световые лучи полностью сольются (рис. 44). Получается, что мишень для каждого источника должна быть своя, но при этом все три мишени должны следовать за объектом Dummy01. Поэтому создайте еще три фиктивных объекта и разместите их так, чтобы они находились в центрах предполагаемых световых пятен (рис. 45). Выделите все три дополнительных объекта-пустышки и свяжите их с объектом Dummy01 (рис. 46). Теперь софиты будут не только следить за движущимся объектом, но и освещать каждый свою зону, что и обеспечит наличие трех разноцветных световых пятен (рис. 47).
Рис. 43. Настройка параметров свитка LookAtParameters для первого Spot-источника
Рис. 44. Результат назначения общей мишени для всех трех источников
Рис. 45. Появление трех дополнительных фиктивных объектов
Рис. 46. Вид иерархической цепочки после связывания дополнительных Dummy-объектов
Рис. 47. Вид визуализированной сцены в одном из кадров анимации
В окне Left создайте камеру, окно Perspective замените на окно проекции камеры (команда Views=>Camera из меню окна проекции или клавиша C). Настройте положение и ориентацию камеры так, чтобы она была направлена на движущийся объект (рис. 48). К сожалению, направление ориентации на объект будет выдерживаться лишь для данного конкретного кадра анимации. Поэтому выделите камеру (без мишени), на панели Motion откройте свиток Look At Parameters, щелкните на кнопке Pick Target и укажите в качестве мишени камеры объект Dummy01 (рис. 49). Проиграйте анимацию — теперь камера добросовестно следит за объектом, вот только расстояние между камерой и объектом постоянно меняется, что затрудняет наблюдение (рис. 50). Поэтому свяжите камеру с объектом Dummy01 (рис. 51) — теперь камера будет не только продолжать слежение за объектом, но и автоматически настраивать позиционирование, а значит, наблюдение за объектом будет производиться с одного и того же расстояния (рис. 52). К сожалению, это еще не все — внимательно просмотрите всю анимацию, и вы увидите, что освещение софитами движущегося объекта на разных этапах анимации неодинаково, хотя все три световых пятна всегда присутствуют — дело в том, что меняется расстояние от источников света до объекта. Исправляется ситуация точно так же, как и вышерассмотренная с позиционированием камеры — достаточно связать все три источника с объектом Dummy01 (рис. 53), а затем установить их на желаемом удалении от объекта. Это и приведет к нужному результату — отдельные кадры полученной в итоге анимации представлены на рис. 54.
Рис. 48. Появление камеры
Рис. 49. Настройка параметров свитка LookAtParameters для камеры
Рис. 50. Вид позиционирования камеры в нескольких кадрах анимации до связывания камеры
Рис. 51. Вид иерархической цепочки после связывания камеры
Рис. 52. Вид позиционирования камеры в нескольких кадрах анимации после связывания камеры
Рис. 53. Вид иерархической цепочки после связывания источников
Рис. 54. Слежение за движущимся объектом
Шевеление щупалец морского обитателя
Применим метод прямой кинематики для имитации шевеления щупалец некоего морского обитателя. Вначале создайте три базовых объекта — один объект Spring01 и два обычных цилиндра, разместите их друг на друге в направлении оси Z (это и будет основа для щупальца). Между ними включите два Dummy-объекта (рис. 55). Выделите объект Cylinder02, откройте на панели Motion свиток Assign Controller (Назначение контроллеров), выделите строку Rotation и щелкните на одноименной кнопке Assign Controller (рис. 56). В открывшемся окне выделите опцию LookAt Constrant (рис. 57) и нажмите Ok. Затем щелкните на кнопке AddLookAt Target и в качестве цели, на которую будет смотреть данный цилиндр, укажите нижний объект-пустышку, а в области SelectLookAt Axis подсветите ось Z (рис. 58). Аналогичную операцию проведите в отношении объекта Spring01, только в качестве ограничивающей его вращение цели укажите объект Dummy02.
Рис. 55. Исходная сцена
Рис. 56. Кнопка AssignController
Рис. 57. Выбор контроллера LookAtConstrant
Рис. 58. Назначение LookAt-цели объекту Cylinder02
Теперь назначим обоим объектам-пустышкам постепенно затухающие колебания, что можно сделать путем добавления им контроллеров Spring (Пружина). Выделите объект Dummy01, откройте на панели Motion свиток Assign Controller, выделите строку Position, щелкните на Assign Controller, выберите контроллер Spring и увеличьте его параметр Mass примерно до 500 (рис. 59). Данный параметр отвечает за силу колебаний — чем выше его значение, тем колебания сильнее. Точно таким же образом назначьте контроллер Spring второму фиктивному объекту.
Рис. 59. Назначение контроллера Spring объекту Dummy01
Свяжите объект Dummy01 с объектом Cylinder01, а объект Dummy02 с объектом Cylinder02 (рис. 60). В режиме автоматической генерации ключей в одном из начальных кадров (мы выбрали 10-й) переместите объект Cylinder01, являющийся родительским, на некоторое расстояние относительно осей X и Y (рис. 61). Проиграйте анимацию, и вы увидите, что щупальце шевелится (рис. 62). Размножьте щупальца, применив операцию Array (команда Tools=>Array) с параметрами как на рис. 63. Это приведет к получению сразу массива щупалец (рис. 64), которыми можно будет воспользоваться при создании какого-нибудь сказочного морского обитателя, только придется прочие элементы данного существа связать с главным родительским объектом сцены Cylinder01. В силу большого количества объектов сцены это окажется проблематичным. Поэтому вначале щелкните на кнопке Select by Name, выберите объекты, которые требуется связать. Затем активируйте инструмент SelectandLink и вновь щелкните на кнопке Select by Name — откроется окно Select Parent (а не Select Object); укажите в нем объект Cylinder01 (рис. 65) и щелкните на кнопке Link, что и приведет к требуемому связыванию. Теперь щупальца уже будут перемещаться не сами по себе, а вместе с прочими элементами морского существа. Вид полученной в итоге сцены в некоторых кадрах анимации может напоминать рис. 66.
Рис. 60. Вид иерархической цепочки после связывания всех объектов
Рис. 61. Формирование ключей анимации в автоматическом режиме
Рис. 62. Вид щупальца в нескольких кадрах анимации
Рис. 63. Параметры настройки операции Array
Рис. 64. Массив щупалец
Рис. 65. Выделение родительского объекта в окне SelectParent
Рис. 66. Морской обитатель с шевелящимися щупальцами