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

ponimayka1

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

совпадать: ведь мы могли сетку «помять» или растянуть. Поэтому на выходе будут уже «помятые» данные, а на входе - оригинальные. (Информация о «помятости» хранится, естественно, тоже в секретных атрибутах ноды pSphereShape1, определяющих координаты вершин.)

А что будет, если соединить inMesh одного объекта и outMesh другого? Вперед! В Hypergraph! Нажимаем shift, тащим средней кнопкой мыши ноду pSphereShape1 и бросаем ее на pCubeShape1. В Connection Editor слева выбираем outMesh, справа - inMesh.

Если теперь выбрать у pSphere1 несколько вершин и подвинуть их, то можно увидеть, что аналогичные вершины у pCube1 тоже переместились. Внешне похоже на инстансирование, однако это не инстансирование, потому что ноды shape у наших объектов разные. Если же выбрать и переместить вершины у pCube1, это не произведет никакого впечатления на pSphere1. Действительно, ведь связь между объектами односторонняя, поэтому перемещения вершин pCubel просто «наслаиваются» на перемещения, унаследованные от pSphere1.

Исследуйте связи в Hypergraph. Теперь это простое дерево, где данные о форме pSphere­ Shape1 передаются через связь outMesh->inMesh в pCubeShape1.

Изменение атрибутов subdivisionsAxis и subdivisionsHight ноды роlуSphere1 по-прежнему влияет на форму обоих объектов: ведь поток данных проходит через них последовательно. Правда, меняется нумерация вершин, поэтому если вы сдвигали точки слишком сильно, то увидите их смещения в новых местах, соответствующих их старым номерам.

Ну, а напоследок выберите рСuЬе1 и примените к нему какую-нибудь операцию полигонального моделирования, например Роlygons=>Smooth. Затем выберите pSphere1 и снова «подергайте» эту фигуру за вершины (смотрите один из возможных результатов на рисунке внизу).

111

Снова исследуйте Hypergraph, в особенности имена атрибутов, задействованных в связях Ясно, что MAYA для выполнения операции smooth вставила в существующее дерево еще пару нод, отвечающих за эту операцию. Очевидно, что нода polySmoothFace1 просто «ловит» данные, поступающие в атрибут inputPolymesh, производит над ними вычисления, соответствующие операции smooth и выдает результат в атрибут output.

Для взрослых: нода polyTweak1 хранит информацию о том, как мы таскали вершины. Можете в Attribute Editor изменить ее атрибут NodeState на HasNoEffect и увидеть результат.

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

Снова вывод номер один

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

Но атрибуты не существуют сами по себе: они всегда принадлежат объектам, а точнее

112

нодам, которые тоже имеют разные типы и предназначены для различных целей. На практике тип любого атрибута можно, конечно, узнать МЕL командой

getAttr -type

А тип любой ноды MEL-командой nodeType. Однако, чтобы получить более или менее внятное описание предназначения этого атрибута, понадобится поработать с документацией.

Работа с документацией. Исследование незнакомых объектов. Источник безграничных познаний

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

Например, откройте файл distance.ma.

Попробуйте перемещать объекты. Через минуту становится понятно, что размер сферы зависит от расстояния между объектами. Но каким образом это сделано?

При выбранной сфере в Attribute Editor обнаруживается некая нода howFar, которая имеет всего два атрибута: Point1 и Point2.

В Hypergraph можно распутать связи между сферой и кубом и выяснить, что позиции (атрибуты translate) сферы и куба соединяются с атрибутами Point1 и Point2 ноды howFar, а некий атрибут distance этой ноды соединяется с атрибутами scale сферы. Хотя уже примерно понятно, как работает нода howFar,

113

хотелось бы получить более детальную информацию о тех атрибутах, которые не появляются Attribute Editor.

Примечание. Взрослые мальчики никогда не читают разделов документации, содержащих описание пунктов меню и процесса редактирования объектов. Им нужна лишь описание интересующей их ноды и ее атрибутов. Для этого существует пункт меню Help=>Node And Attribute Reference..., который просто открывает алфавитный указатель на все типы нод, встречающихся в MAYA.

Осталось узнать тип интересующей нас ноды howFar. Проще всего узнать тип ноды в At­ tribute Editor, где в соответствующей ноде закладке слева от имени ноды обозначен ее тип.

В нашем случает тип ноды howFar обозначен как distanceBetween. Поэтому открываем Help=> Node and Attributes Reference... и находим там описание типа distanceBetween. Документация подтверждает нашу догадку: ноды этого типа просто вычисляют длину отрезка между точками, задаваемыми атрибутами Input1 и Input2. А вот описание атрибутов ноды приводит нас к обнаружению еще двух атрибутов, позволяющих перемножать входящие атрибуты на матрицу, то есть вычислять расстояние в другом пространстве.

Таким образом, если вам встречается незнакомая нода или новый атрибут, тип и назначение которых вы хотите узнать, ваш путь лежит в Help=>Node and Attributes Reference. Именно так, с некоторого момента, протекает дальнейшее изучение MAYA.

Для облегчения жизни взрослым мальчикам в Attribute Editor тоже есть меню Help, которое предлагает сразу отправить вас в описание любой ноды, присутствующей в данный момент в закладках Attribute Editor. Это, разумеется, донельзя удобно.

Дальше. Выберите куб или сферу.

Убедитесь, что первая закладка в Attribute Editor всегда имеет тип transform. Вторая закладка, в случае полигональных объектов, имеет тип mesh.

Посмотрите также, что в документации в описании ноды типа mesh есть комментарии к атрибутам inMesh и outMesh, с которыми мы уже экспериментировали.

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

Совет. Указанный раздел документации является основным источником знании о «внутренностях» MAYA и ее реальном устройстве. Чего стоит хотя бы описание ноды transform! Поэтому, по мере накопления опыта работы с MAYA, заглядывайте в него почаще.

История (History)

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

Интуитивное определение: History - это совокупность объектов и связей, влияющих на форму данного объекта. То есть если форма выбранного объекта зависит от атрибутов других объектов или нод, тогда этот объект имеет History.

Более формальное определение: если нода shape данного объекта имеет входящие связи, влияющие на форму объекта, то эти связи вместе с нодами, участвующими в них, называются His­ tory данного объекта.

Ну и определение «на пальцах»: History то, как мы влияли на форму объекта. Влияли мы при помощи различных операций, а MAYA имеет свойство после многих операций создавать ноды, им соответствующие, и так далее... Круг определений замыкается.

Понятие History иллюстрируется еще и следующим наблюдением. Как правило, перед применением той или иной операции в MAYA можно открыть в меню ее Option Box и задать там параметры применения этой операции (например, куда будет смотреть макушка полигонального конуса или же сколько будет точек у Lattice). После применения операции не надо все делать заново, если захочется изменить некоторые из этих параметров: MAYA обычно создает необходимые ноды, соответствующие этим операциям, а параметры, задаваемые в Option Box, становятся атрибутами объектов, то есть они доступны для редактирования через Attribute Editor. Другими словами, MAYA запоминает наши действия в соответствующие ноды по мере совершения действий, так сказать исторически, то есть они и становятся историей объекта (History).

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

Разберем эти две части History отдельно.

Примечание. Связь с числовыми атрибутами (например visibility), принадлежащими ноде shape, не может рассматриваться как History, так как она не влияет на форму объекта. Ну и, естественно, вышеиспробованные связи между атрибутами trans- form-нод также не являются отношениями типа History. (Можете проверить, что операция Delete History никак не повлияет на эти связи.)

Construction History. Стэк моделирования. Протоколирование действий и операций. Конструктивные входы и выходы

Понятие Construction History применимо только к геометрическим объектам, то есть к кривым, NURBS-поверхностям и полигональным сеткам (операции работы с subdivision surfaces не имеют Construction History или наследуют последнюю у полигонов).

Прежде всего мы сталкиваемся с понятием Construction History при создании геометрических примитивов. Какой бы объект вы ни создали при помощи меню NURBS Primitives или Polygon Primi­ tives, он будет содержать ноду (имя которой начинается на make для NURBS или на poly для полигонов), которая позволяет изменять внешний вид и свойства поверхностей и кривых уже после их создания. Эта нода и есть простейший пример Construction History.

Проделайте небольшое упражнение (кому неохота, можете открыть файл nurbsHistory.ma).

Вновой сцене создайте NURBS-тор. Проделав некоторое количество операций моделирования, посмотрите, как видоизменилась Construction History объектов.

ВChannel Box выделите makeNurbsTorusI и задайте End Sweep=180, Minor Sweep=180.

115

Далее, RMB=>lsoparms. Выберите крайнюю верхнюю и нижнюю изопармы.

Создайте лофт: Surface=>Loft.

Разверните камеру и выберите две торцевые изопармы у лофта и тора.

Снова выполните Surfaces=>Loft. Повторите для другого торца.

Выберите теперь тор и обратите внимание, какое столпотворение возникло в Channel Box:

116

Там отображаются названия нод, которые MAYA создала в ходе наших бесхитростных действий. Выбирая разные поверхности, можно даже понять логику распределения этих нод по разделам INPUTS и OUTPUTS в Channel Box. Окончательно прояснить эту логику поможет Hypergraph и кнопка Input And Output Connections. Для одной из торцевых поверхностей дерево зависимостей выглядит примерно так:

Выберите тор, поиграйте с атрибутами makeNurbsTorus1. Очевидно, что MAYA мгновенно перестраивает всю модель в соответствии с изменениями атрибутов тора, как будто бы заново повторяя все проведенные нами операции. В этом и состоит смысл и назначение Construction His­ tory.

Крайне полезно поэкспериментировать с атрибутами промежуточных нод типа loft1 или curveFromSurfacelso, позволяющими задать даже номер изопармы, выбранной вами для построения новых поверхностей.

Можно также сказать, что History для данного объекта - это верхняя часть дерева зависимостей (upstream graph), которая «входит» в объект. (Если в Hypergraph вы используете Options=>Orientation=>Horizontal, это будет, естественно, левая часть дерева.)

117

Удаление History. Отшибание памяти. Разрыв с прошлым

Соответственно, MAYA будет помнить и перестраивать всю нашу модель, пока будут сохраняться связи между соответствующими нодами. Понятно также, что разрыв связей не приведет к исчезновению объектов, а лишь нарушит зависимость одних объектов от других. Более того, если в Hypergraph удалить все ноды типа loft и curveFromSurfacelso, поверхности никуда не денутся, они просто не будут больше зависеть друг от друга.

Для удаления зависимостей и всех промежуточных объектов существует специальная операция удаления истории: Delete History.

Если выбрать объект и выполнить Edit=>Delete by Type=>Delete History, для выбранного объекта будет удалена вся входящая (верхняя) часть дерева зависимостей. Очень важно помнить, что в процессе такого удаления истории удаляются лишь входящие связи и ноды, однако влияние самого объекта на другие объекты (если такое существует) останется прежним.

Возникает вопрос: когда нужно удалять историю?

Ответ первый: сохраняйте историю только до тех пор, пока она вам нужна. Если вы используете Construction History для моделирования, редактируя кривую, через которую проходит revolve, или подбирая радиус скругления у операции round, удалять историю надо после того, как вы окончательно завершите работу над формой поверхности, то есть будете уверены, что такое редактирование вам больше не понадобится.

Ответ второй: сохраняйте историю, если вы собираетесь использовать ее в анимации, Например, вы смоделировали занавеску, как лофт, проходящий через несколько кривых, и собираетесь анимировать кривые при помощи динамики волос. Зависимость формы поверхности от образующих ее кривых будет активно использоваться, поэтому сохранение истории в этом случае - вполне адекватное действие

Однако пытливые умы нетерпеливо спросят: а зачем удалять историю?

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

Во-вторых, Construction History часто вызывает такое явление как «двойные перемещения».

Double Transformation. Двойные перемещения. Законопослушная MAYA

Если вы успели окончательно разорвать все связи и удалили историю на экспериментальном полуторе, откройте заново файл nurbsHistory.ma.

Выберите все поверхности и попробуйте подвигать их в любом направлении. Все разъезжается в разные стороны. Затем выберите только тор и снова перемещайте его произвольным образом. Теперь все в порядке.

Снова выберите все поверхности и подумайте, что происходит в процессе перемещения объектов, имеющих историю. С одной стороны, лофт «помнит» о том, что он был построен через две изопармы тора, и поэтому обязан перемещаться вместе с тором. С другой стороны, лофт ведь тоже выбран, а мы еще тянем его с помощью манипулятора Move Tool. Дабы соблюсти закон, лофт передвигается еще и в соответствии с перемещениями манипулятора, то есть получает двойное перемещение. Аналогичный эффект будет происходить и при использовании Rotate и Scale Tool, поэтому он получил название Double Transformation. Причем это никакая не ошибка и не «глюк»

118

в данном случае МАУА делает ровно то, что от нее просят, корректно учитывая все связи между объектами.

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

Если же вы дорожите историей, но хотели бы без проблем перемещать объекты как одно Целое, сгруппируйте их (Edit=>Group) и перемещайте группу. Так как расположение объектов внутри группы не меняется, то и пересчета зависимостей Construction History не происходит.

Примечание. Иногда можно с самого начала отказаться от использования Construc­ tion History. Для этого на Status Line существует специальная кнопка, Construc­ tion History On/Off, которая позволяет вообще не запоминать последовательные операции моделирования.

Изысканный Duplicate. Input Graph. Input Connections. Копирование старых связей.

Дублирование входящего дерева зависимостей

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

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

Создайте полигональный куб. Выполните Polygons=>Smooth.

Снова выберите объект и выполните Edit Polygons=>Extrude Vertex. Опять выберите объект, далее проделайте Polygons=>Average Vertex. (Опять-таки, для ленивых имеется файл starObjectHistory.ma.)

Предположим, мы хотим получить копию нашего объекта, но в дальнейшем собираемся менять у нее, например, атрибут Subdivision Level в Attribute Editor для ноды polySmoothFace.

Если просто выполнить Edit=>Duplicate с параметрами по умолчанию, новый объект, как

119

только что говорилось, вообще не будет иметь истории.

Однако если в Option Box операции Duplicate включить галочку Duplicate Input Graph (памятливые умы не могут не помнить, что History - это и есть «входящее» дерево) и если скопировать объект, новая копия будет обладать собственной Construction History и иметь аналогичное дерево в Hypergraph.

Теперь можно индивидуально изменять атрибуты Construction History для каждого объекта. (Поиграйте, например, с атрибутами ноды polyCube.)

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

Выберите объект и в Option Box операции Duplicate включите галочку Duplicate Input Con­ nections.

После копирования новый объект уже не будет иметь собственную независимую Construc­ tion History, а будет зависеть от истории оригинального объекта.

Теперь в Attribute Editor или Channel Box легко заметить, что у выбранных атрибутов одинаковая история. А изменение Subdivision Level в Attribute Editor одинаково изменяет все

120

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