Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ponimayka1

.pdf
Скачиваний:
131
Добавлен:
07.06.2015
Размер:
37.11 Mб
Скачать

Вернемся к деформерам. Сохраните сцену (twisterStart.ma).

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

Выберите частицы и создайте для них нелинейный изгибающий деформер: Deform=>Create Nonlinean=>Bend.

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

Затем выберите в Channel Box ноду bend1 и задайте значение curvature=0.3, чтобы изогнуть поток частиц. Поиграйте также в атрибутом highBound, чтобы задать границу действия этого деформера.

Оживим немного статический вихрь. Прежде всего, ему положено хаотически извиваться в разные стороны. Вооружившись терпением, быстро поставьте некоторое количество ключей на атрибут curvature - это заставит поток изгибаться «туда-сюда».

Тем, кто особенно ленив, я предлагаю выбрать bendl на экране или в Outliner, открыть Attribute Editor и там в закладке bendl разыскать атрибут curvature и вписать для его значения следующую формулу:

=0.3*noise(time);

661

Нажав Enter, вы создадите нехитрый expression, который будет изменять атрибут деформера bend1 и гнуть поток из стороны в сторону.

Для пущей метеорологичности предположим, что наша струя должна еще вращаться вокруг собственной вертикальной оси. Этого просто добиться, проанимировав атрибут rotateY манипулятора bendHandle1.

Если вам, как обычно, лень возиться с ключами и бесконечностями в Graph Editor, просто откройте Attribute Editor для bendHandle1 и впишите для rotateY следующее заклинание: =frame*5;

Это задаст равномерное вращение потока вокруг вертикали (угол поворота в градусах равен номеру кадра, умноженному на пять).

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

Решетки Lattice. Free Form Deformation

Выделите частицы, когда они достигли границы и создайте для них деформирующую решетку: Deform=>Create Lattice.

Вокруг частиц появится решетка. И опять не в центре.

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

Выберите в Outliner два объекта: ffdlLattice и ffdIBase.

Затем сдвиньте их по горизонтали в центр и растяните в стороны, чтобы поток помещался

внутри.

662

Теперь нажмите над решеткой правую кнопку мыши и выберите компоненты решетки Lat­ tice Point.

Выберите второй и третий ряд точек и сожмите их с помощью Scale Tool, а затем приподнимите немного наверх.

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

663

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

Нажмите над частицами правую кнопку мыши и в выпавшем меню выберите lnputs=>All

Inputs.

Появится окошко List of input operations for particlel .

В нем перечислены все операции, имеющие историю и применявшиеся к выбранному объекту. В данном случае это список деформеров. Список этот читается снизу вверх. Решетка Lat­ tice фигурирует в нем под дивным именем Ffd1 (ffd1) и под номером три.

Перетащите в этом окне средней кнопкой мыши надпись Ffd1 (ffd1) с третьей позиции вниз на первую позицию, отпустите ее над Nonlinear(twistl). Порядок деформаций поменяется, это сразу будет заметно при анимации.

664

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

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

Примечание.

Для решетки Lattice можно задать поведение деформированного

объекта за

пределами решетки.

По умолчанию,

он

там просто не деформируется.

С помощью атрибута Outside Lattice для ноды ffd

в Attribute Editor можно задать

мягкое затухание деформаций

fFaltoff) или

продолжение деформаций (Аll) за

пределами

решетки.

 

 

 

Важное примечание для любителей частиц. При подстановке объектов в деформированные частицы с помощью Particle Instancer возникнут проблемы. Если аккуратно открыть Op­ tion Box операции Particles=>lnstancer, можно прицепить инстансируемые объекты именно к деформированному «шейпу» (particleShape1 Deformed). Однако основная проблема в том, что для него не работают expressions! А без них толком настроить Instancer вряд ли удастся. Выход состоит в следующем: прицеплять Instancer надо все-таки к недеформированным частицам. Для них надо завести per-particle атрибут типа vector и назвать его, например, deformedPos. Далее нужно создать runtime expression простого вида: "particleShape1.deformedPos= particteShape1Deformed.posi­ tion". Затем в атрибутах для Instancer надо вместо обычной связи position=worldPosition, выбрать position^ deformedPos. Таким образом, позиция деформированных частиц будет передаваться недеформированному «шейпу». Также можно поступить и с остальными атрибутами.У данного трюка есть один маленький недостаток. Инстансированные объекты будут отставать от частиц на один кадр, правда, это будет заметно только на очень больших скоростях.

665

Устройство решеток Lattice и работа с ними. Двойные решетки. Алгоритм деформации

Как и в случае большинства деформеров, для создания решетки достаточно выбрать объект или часть компонент и выполнить Deform=>Create Lattice.

Имя решетки обычно начинается с " f f d " , что означает free form deformation (деформация произвольной формы). В отличие от нелинейных деформеров, задающих только определенный тип искажений формы, решетки позволяют деформировать объект произвольно, редактируя вручную компоненты решетки под название Lattice Points.

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

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

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

Если вы заглянете в Outliner, то увидите, что рядом с основной решеткой, с именем типа ffdlLattice, существует еще дополнительная базовая решетка, названная ffdlBase (я называю ее «базовой» лишь по созвучию с ее именем). Основную решетку вы можете видеть и выбирать на экране. Именно ее редактируют за компоненты Lattice Point. Базовая решетка видна только в Out­ liner, пока ее не выберут, и ее форма остается нетронутой.

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

666

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

Кроме того, на экране вы можете выделять только основную решетку. Поэтому когда, например, вы пытаетесь выбрать ее целиком и передвинуть, то сдвигается весь деформируемый объект, так как точки основной решетки «уезжают» от точек базовой, a MAYA вычисляет и применяет плоско-параллельную деформацию, воспринимаемую как смещение объекта.

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

Примечание. Этот принцип относится не только к решеткам, но и к некоторым

другим деформерам,

например, к Wrap или Wire. Если после

создания деформера

вы видите,

что в Outliner рядом с ним появился объект с названием типа xxxBase,

то можете

быть

уверены,

что этот

деформер работает

по вышеописанному

принципу

-

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

базового

и

основного деформеров.

 

 

Напомню, что

решетки

удобно

рассматривать

как новый комплект

контрольных точек

для объекта, позволяющий делать производить глобальное редактирование формы объекта с помощью небольшого числа точек. Количество точек решетки можно задавать либо при создании деформера, либо для уже существующего деформера, отредактировав в Channel Box атрибуты S- T-U-Divisions у ноды ffdnLaticeShape.

Для того, чтобы изменить количество ячеек решетки после того, как вы отредактировали ее точки, необходимо сначала вернуть ее в первоначальную форму. Это можно сделать с помощью операции Deform=>Edit Lattice=>Remove Lattice Tweaks (удалить смещения точек решетки).

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

667

Если двигать сам деформируемый объект, а решетку оставить на месте, то «вылезая» из решетки, объект стремиться занять свою первоначальную форму. Это не всегда желательно, поэтому для определения того, как ведет себя часть объекта не влезающая в решетку, существует атрибут Outside Lattice. С помощью него можно даже задать «мягкое» возвращение (Falloff) к первоначальной форме - по мере удаления от решетки.

Когда решетка создается для подвижных объектов, то хорошей идеей может быть «припарентивание» решетки к объекту для совместных движений. В этом случае полезной будет также группировка основной и базовой решеток вместе во избежание разъезжания. Все эти опции можно включить в Option Box операции Create Lattice.

Wrap deformer. Решетка произвольной формы. Обобщенные деформации

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

Для таких целей имеется деформер типа Wrap. Для его создания необходимо сначала выбрать деформируемый объект (или объекты), а затем выбрать деформирующий (влияющий) объект (influence object). После этого следует выполнить операцию Deform=>Create Wrap.

Терминологический комментарий. Деформирующий объект часто называют «объектом влияния» (influence object), подчеркивая его свойство влиять на форму и поведение других объектов.

В качестве «объекта влияния» может выступать любая сплайновая кривая, либо полигональная или сплайновая поверхность.

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

Создайте полигональный цилиндр, растяните его по вертикали и задайте побольше горизонтальных сечений (subdivisionHeight=20).

Создайте сплайновую сферу, растяните ее по вертикали в форме яйца.

Теперь выберите сначала цилиндр (как деформируемый объект), а затем сферу (как деформирующий) и выполните Deform=>Create Wrap.

Убедитесь, что в Outliner возникла скрытая копия сферы nurbsSphereiBase, являющаяся базовой формой для деформера Wrap.

Выберите сферу на экране и потащите за одну из ее контрольных вершин.

668

Атрибут Weight Threshold деформера Wrap, позволяет задать степень влияния точек деформирующего объекта, в зависимости от их близости к поверхности деформируемого объекта. Это позволяет управлять гладкостью деформации.

Атрибут Max Distance позволяет определить радиус влияния точек деформера. Значение ноль означает, что область влияния бесконечна.

Применение деформера Wrap дoвoльнo разнообразно. Прежде всего это всяческие косвенные деформации. Например, у вас есть высокополигональная модель и вы собираетесь привязать ее к скелету. Вместо того, чтобы привязывать модель напрямую, а потом часами возиться с настройкой скининга, проще взять низкополигональную копию модели, привязать ее к скелету, а затем сделать ее деформером Wrap для высокополигональной модели. Настроить скиниг в этом случае будет проще, а все трансформации скелета будут передаваться сначала на низкополигональную модель, и затем автоматически, через Wrap-деформер, на высокополигональную. Такой способ называют непрямым (косвенным) скинингом (indirect skinning). Этот же метод часто используется и с решетками Lattice, когда к скелету привязывается только решетка, а основная модель деформируется с помощью решетки.

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

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

Деформеры Sculp и Wire

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

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

Деформер Sculp позволяет использовать в качестве деформирующего объекта либо сферуманипулятор, либо произвольную NURBS-поверхность. В последнем случае производительность резко снижается и сильно зависит от «насыщенности» NURBS-поверхности. Количество настроек этого деформера столь велико, а популярность его столь невелика, что не имеет смысла останавливаться на нем подробнее.

1

См. ниже про атрибут envelope.

669

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

Так как в одном деформере может быть несколько деформирующих кривых, то создание этой деформации оформлено в виде инструмента Deform=>Wire Tool, а не в виде простой операции, как для остальных деформеров. Он имеет массу настроек-атрибутов и некоторое количество дополнительный операций в меню Deform=>Edit Wire.

Совет. Если х о т и т е «прогнать волну» с помощью деформера Wire, не забывайте выбрать основную кривую и спрятанную базовую кривую, чтобы перемещать их вместе.

Wire-деформер очень полезен при моделировании и позволяет «ущипнуть» или выдавить углубление на поверхности, не путаясь в рядах контрольных вершин. Особенно если принять во внимание, что вы можете создавать «кривые на поверхности», о которых говорилось в главе про моделирование.

Анимация губ персонажа еще один пример применения этого деформера.

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

670

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]