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

ponimayka1

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

Очевидно, что контрольные точки не совпадают, следовательно не совпадают и края поверхностей. Операция Square не идеальна и тоже имеет свои маленькие слабости.

Дело в том, что по умолчанию края соседних поверхностей подгоняются друг к другу так, чтобы касательные к поверхности на этих краях совпадали. Если вы откроете Attribute Editor, то в закладке для squareSrf1, вы можете найти раздел Continuity (непрерывность, гладкость), в котором задаются условия гладкой стыковки краев поверхности.

261

По умолчанию, метод вычисления гладкости стыковки (Continuity Туре) определен как Tangent. Этот метод «честно» пытается гладко состыковать края поверхностей, причем ему это не всегда удается, так как условие гладкости на стыках является довольно сильным. Об этом свидетельствуют галки в разделе Continuity Passed (Выполнение условия гладкости), показывающие, на каких краях поверхности Square удалось добиться выполнения гладкой стыковки. В нашем случае галка напротив Continuity Passed 2 отсутствует, что означает: на второй (нижней) границе MAYA не смогла (ну, не смогла, и все тут!..) идеально точно состыковать края поверхностей. Можно дополнительно увеличить точность вычислений вдоль границ путем увеличения атрибута Curve Fit Checkpoints, однако добиться полного успеха все равно не удастся, и кроме того, это повлечет за собой появление дополнительных изопарм, повлияет на тесселяцию и пр.

В данном случае имеет смысл изменить метод стыковки на более простой и установкить для всех трех границ Continuity Туре = Implied Tangent (неявный тангенс). Этот метод более прост и стыкует поверхности не так математически строго, как метод Tangent, но визуально вполне приемлемо. Кроме того, он позволяет избежать разъезжания границ и появления артефактов.

Примечание. Если вы собираетесь использовать Renderman for Maya для просчета сцены, то вам не надо заботиться о тесселяции, так как последний не использует полигоны при просчете сплайновых поверхностей. Однако точность прилегания краев поверхностей друг к другу необходимо обеспечивать, поэтому для бесшовности картинки придется применять метод Continuity Туре = Implied Tangent.

262

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

Проверяем. В Outliner выбираем первоначальные грани куба и неистово масштабируем их. Кубик не должен разъезжаться. Рендерим. Если дырок нет, сохраняем файл (результат в roundedCube2.rna). Если дырки есть, моем руки и делаем все заново.

Осталось подготовить файл для будущего использования.

Выберите все построенные Fillet и Square и сгруппируйте их. Назовите группу Corners. После этого перетащите средней кнопкой группу Corners и бросьте ее на группу nurb-

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

Это, естественно, происки Construction History. Угловые поверхности получают двойное масштабирование - от плоскостей и от себя лично.

263

А жаль. Так хорошо было бы иметь одну группу для всей модели.

Ищем решение. Оно скрывается в Attribute Editor для группы Corners. Там надо выключив галку Inherit Transform (наследовать трансформации), чтобы группе Corners не передавали масштабирование и прочие трансформации от родительской группы nurbsCube1.

Теперь масштабирование группы nurbsCube1 работает, как ожидалось.

Сохраните сцену (roundedCube3.ma) и подумайте о том, как мы будем ее дальше использовать. В дальнейшем мы будем импортировать этот файл в нужную сцену, Задавать. положение и размеры куба, настраивать величину скругления и удалять Construction History которая дальше не потребуется.

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

Выберите группу nurbsCube1 и добавьте к ней новый атрибут gap со значением по умолчанию 0,9: Modify=>Add Attribite (Default=0.9).

Теперь откройте Windows=>General Editors=>Connection Editor и нажмите Reload Left, чтобы загрузить nurbsCube1 в левую панель.

Выберите в Outliner все шесть граней куба и нажмите Reload Right. Для удобства обзора снимите в меню Left Display и Right Display галки Show Non-Keyable.

Выберите слева атрибут gap, а справа выбирайте у всех объектов атрибуты ScaleX, Scale),

ScaleZ.

264

Закройте Connection Editor.

Выберите nurbsCube1, и меняйте значение атрибута gap в диапазоне от нуля до единицы. Теперь нет необходимости в разыскивании, выборе и масштабировании граней куба. Все необходимые параметры куба управляются атрибутами группы nurbsCube1.

Сохраняем файл (roundedCube4.ma).

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

Однако MAYA потакает человеческим слабостям и людям с короткой памятью. Попробуйте временно удалить историю прямо для выбранной группы nurbsCube1 (Edit=>Delete by Type«History).

Вы увидите в Script Editor следующее сообщение:

Warning: Turning on inheritTransform for 'Corners'.

To есть MAYA сама включила галку Inherit Transform у группы Corners. Масштабирование и перемещение группы работает корректно. Можно возвращаться к паровозу.

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

265

Кабина и окна

Откройте сцену trainNew2noHistory.ma.

Импортируйте (File=>lmport) в нее файл roundedCube4.ma. Выберите группу nurbsCube1 и поставьте ее на место. translateY=1.5; translateZ=-6; scaleX=5; scaleY=8; scaleZ=2 Задайте значение атрибута gap равным 0.98.

История похоже нам больше не нужна, поэтому удалим ее для всего куба. Также удалим верхнюю плоскость куба, она нам больше не пригодится.

Крыша

Разберемся с крышей.

Как и раньше, это полигональный куб. Создаем его и ставим на место.

(translateY=6; translateZ=-6; scaleX=6; scaleY=1; scaleZ=3)

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

Удалим историю с кубика. Это важно.

Выбираем кубик и выполняем Edit Polygons=>Bevel.

Эта операция «снимает фаску» с выбранных ребер, а так как мы выбрали весь куб, то сглаживаются все ребра куба.

В Attribute Editor или Channel Box надо настроить значение атрибута offset, чтобы подрегулировать ширину фаски. Установите его равным 0.1.

266

Задайте значение Segments=3, чтобы сгладить фаску.

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

На всякий случай выбираем куб и выполняем Edit Polygons=>Merge Vertices.

Теперь осталось подрулить жесткую границу перехода между соседними гранями. В отличие от NURBS-поверхностей, сгладить полигональную сетку можно, не добавляя вершин, а «смягчив» нормали на границах граней, то есть даже не редактируя геометрию.

Выбираем куб.

Открываем Option Box операции Edit Polygons=>Normals=>Soften/Harden. Задаем значение параметра Angle=80.

То есть если угол между гранями меньше 80 градусов, то ребро визуализируется как «мягкое», иначе - как «жесткое».

Нажимаем Soft /Hard.

Можно поэкспериментировать со значением угла в Attribute Editor, это поможет понять механизм смягчения нормалей.

267

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

Открываем Hypergraph и выбираем Graph=> Input And Output Connections.

Видим, что история берет свое начало у невидимой ноды polySurfaceShape1. Выбираем ее в Hypergraph. В Attribute Editor в разделе Object Display эта нода имеет включенный статус lntermediate Object. Если временно выключить его, то можно увидеть на экране прежний куб и даже добраться до его вершин.

268

Осталось вытянуть козырек и обязательно не забыть включить атрибут Intermediate Ob­ ject. Можно переходить к иллюминаторам.

Выберите nurbsCube1 и polyCube1 и сгруппируйте их (Ctrl-g). Назовите группу Cabin.

Также сгруппируйте оставшиеся четыре поверхности в группу Base. Удалите историю во всей сцене.

Edit=>Delete All by Type=>History. Сохраните файл (trainNew3.ma).

SoftWindows, мягкие окна

Предыдущий вариант окон нуждается в закруглении краев. Заготовка находится в файле trainNewt.ma. Это можно сделать множеством способов.

Можно сделать Offset Surface для внутренней поверхности (distance=-0.1), сжать ее вдоль (Modify=>Center Pivot),

а затем выбрать крайнюю изопарму и Trim Edge

269

и построить Freeform Fillet.

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

270

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