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

ponimayka1

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

ряды контрольных точек стали переплетаться или просто превратились в неравномерную сетку. Применение операции Smooth «разгладит» такие участки и распределит контрольные точки вдоль поверхности более равномерно. Полезно включить отображение компонентов Hull для NURBS-поверхностей (Display=>NURBS Components=>Hull), чтобы интерактивно наблюдать процесс «расправления». В этом случае также полезно использовать различные значения параметра

Reference Vector, определяющего в каком направлении происходит сглаживание. Кнопка Flood, применяющая выбранную операцию ко всей поверхности целиком, тоже может сослужит хорошую службу в случае сглаживания поверхности.

Для полигонов операция Smooth также делает своеобразное «расслабление» полигональной сетки, стремясь выровнять расстояния между вершинами.

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

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

Примечание. Кодовое название для Артизана - Jasper. Попробуйте сделать поиск по зтому слову в папке, где установлена MAYA.

Работа с поверхностями. Идеологические особенности

Многие методы работы с поверхностями являются аналогами операций для работы с кривыми. Команды Attach и Rebuild имеют аналогичные параметры. Вместо Insert Knot используется Insert isoparm, вместо Reverse Curve Direction Reverse Surface Direction и т. д. И теоретическая часть и все ужасы параметризации, изложенные в разделе, где описана работа с кривыми, попрежнему действуют и при работе с поверхностями. Все понятия (такие, как степень, тангенс и кривизна, параметризация, multiplicity) также применимы к поверхностям, хотя и с одной маленькой поправкой у поверхностей всегда есть два направления.

NURBS-поверхность это всегда сетка, состоящая из двух семейств кривых-образующих,

201

называемых изопармами. У каждого такого семейства есть свое направление, общее для каждого семейства. Направления эти обозначаются буквами U и V, поэтому если показать контрольные вершины для любой поверхности, в одном из углов поверхности можно увидеть квадратный ноль (это начало поверхности) и две точки, обозначенные U и V и задающие два направления вдоль поверхности.

В отличие от полигонов нормаль у NURBS-поверхностей всегда направлена в одну сторону: вдоль всей поверхности. Направление нормали определяется взаимным расположением направлений U и V (математически говоря, их векторным произведением), поэтому изменения одного из направлений на противоположное при помощи операции Edit NURBS=> Reverse Surface Direction приведет к развороту нормали в обратную сторону. Нормаль выбранного объекта всегда можно показать через Display=>NURBS Components=>Normals.

Вместо маркера Curve Point у поверхностей существует Surface Point.

Также на поверхностях можно выбирать изопармы (Isoparms). Это кривые, лежащие прямо «в поверхности» и предназначенные только для выбора с целью дальнейших построений. Их нельзя перемещать в пространстве, редактируя таким образом поверхность. Изопармы всегда можно «отодрать» от поверхности, скопировав и превратив их в обычные кривые с помощью операции Edit Curves=>Duplicate Surface Curves.

202

Примечание. «Изопармы» можно одинакового значения параметра». или V всегда остается одинаковым.

перевести с

русско-латинского как «линии

Вдоль любой

изопармы значение параметра U

У поверхностей нет компонент типа Edit Points, но если вы хотите «схватить и потащить» поверхность за произвольную точку, лежащую на поверхности, используйте Edit NURBS=>Surface Efting=>Surface Editing Tool. В этом же меню находятся операции Break Tangent и Smooth Tan- gent, позволяющие быстро «сломать» или наоборот «сгладить» поверхность в районе выбранной изопармы.

Совет. Ряды контрольных точек удобно

выбирать при

помощи

компонента

Hull. Строго говоря, Hull - не компонент,

а просто экранная

сетка,

соединяющая

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

203

Главное ограничение сплайновых поверхностей

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

Любая сплайновая поверхность всегда является сеткой из изопарм. Даже сплайновая сфера представляет собой сетку из меридианов и параллелей, состоящую из прямоугольных ячеек. Сплайновую поверхность всегда можно развернуть в прямоугольную сетку-плоскость, или на оборот, свернуть из прямоугольной сетки. Об этом надо помнить всегда. Это природа сплайновых поверхностей и следствие их математического описания, и с этим ничего нельзя сделать. Напомню что обыкновенную руку можно представить как минимум одиннадцатью объектами: ладонь из сферы, пять пальцев из цилиндров и еще пять соединений-колец между ладонью и пальцами. Если пальцы и соединения-кольца еще можно пытаться «сшить» в один объект, то сферу с пальцами нельзя соединить в один объект в принципе.

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

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

Кроме того, операция Attach Surfaces не работает с краями отверстий, вырезанных с помощью Trim Tool, поэтому объединять поверхности вы сможете, только соединяя их реальные границы.

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

204

Конечно, операции Align и Stitch, позволяют «подогнать» часть края одной поверхности к границе другой. Но они не объединяют две поверхности в одну, а речь сейчас идет именно об этом

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

Совместимые края поверхностей

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

Дальше я вместо «количество сегментов» буду иногда употреблять выражение «количество нэопарм», хотя количество видимых изопарм на экране отнюдь не всегда совпадает с количеством сегментов на поверхности. Чтобы эти «количества» совпадали, то есть чтобы увидеть на экране «стоящее количество сегментов в виде изопарм, надо либо перейти в режим wireframe (клавиша 4) и нажать клавишу 1, либо включить в окне камеры режим Shading=>Shade Options=>Wireframe и Shaded.

Потренируйтесь на двух NURBS-плоскостях, применяя к ним операцию Attach Surfaces (включите Keep Originals, чтобы изменять исходные поверхности и тут же видеть результат).

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

205

Если же количество сегментов на второй поверхности будет равным шести, то результат будет более «красивый» и будет иметь также шесть сегментов.

Выводы делайте сами. Могу лишь посоветовать: перед стыковкой поверхностей надо позаботиться о том, чтобы количество сегментов на объектах было хотя бы кратным одному или тому же числу.

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

Совместимая параметризация

Даже если на обеих поверхностях задана параметризация одного типа (Uniform), но на одной из них диапазон параметра определен от нуля до единицы, а на другой от нуля до количества сегментов (0 to #Spans), то вас поджидают различные неприятности (о том, что происходит при попытке объединить поверхности с Uniform и Chord Length параметризациями, можете посмотреть в упражнении ближе к концу этой главы).

Создайте две одинаковые (!) плоскости и перестройте одну из них так (с помощью Re-

206

builde Surfaces), чтобы задать Uniform-параметризацию типа 0 to #Spans. (По умолчанию диапазон параметра на примитивной плоскости изменяется от нуля до единицы).

Затем примените операцию Attach Surfaces. То, что изопармы немного «съедут» (если использовался метод Blend), не так страшно.

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

Дело в том, что параметр совершенно неравномерно распределен вдоль поверхности. В

207

одной половине поверхности, унаследованной от первой плоскости, параметр изменяется от нуля до единицы, а во второй половине начинает быстро изменяться от сегмента к сегменту. Выбери несколько изопарм и посмотрите в заголовке окна MAYA (или в Script Editor), какие значения параметра соответствуют им.

Таким образом, перед применением операции Attach Surfaces (и не только ее, а и многих других) всегда надо приводить поверхности к одному типу параметризации. Я советую использовать параметризацию по количеству сегментов - 0 to #Spans. Это всегда можно сделать перестроив нужные поверхности с помощью операции Rebuild Surfaces с опциями Rebuild Type=Uniform, Parameter Range=0 to #Spans, Keep=CV.

Напомню, что определить тип параметризации и диапазон изменения параметра можно в Attribute Editor раздела NURBS Surface History.

В идеале максимальные значения атрибутов Min Max Range U/V должны совпадать с количеством сегментов SpansUV, а минимальные - равняться нулю.

Примечание. После операции Detach Surfaces диапазон изменения параметра может начинаться не с нуля, что тоже может быть источником проблем. Это же относится и к кривым.

Вывод из всех этих устрашающих экспериментов следующий. Перед применением очередной операции сплайнового моделирования старайтесь контролировать как количество сегментов, так и тип параметризации на выбранных поверхностях и кривых. Привычка перестраивать поверхности, сохраняя форму (Keep=CV) и перераспределяя параметр (Parameter Range=0 to #Spans), поможет сэкономить вам массу времени, которое в противном случае придется затратить на устранение проблем.

208

Конвертирование сплайнов в полигоны и тесселяция

Любую сплайновую поверхность можно превратить в полигональную. Обратное утверждение неверно. Полигональную поверхность можно пытаться представить в виде некоторого (обычно весьма большого) числа сплайновых патчей. Ниже я покажу, как.

Преобразование сплайнов в полигоны может понадобиться, например, для экспорта вашей модели в игровой движок или в систему рендеринга, не поддерживающую майские сплайны. Конвертация сплайнов в полигоны производится с помощью операции Modify=>Convert=>NURBS to Polygons. В Option Box этой операции вы можете выбрать, каким методом производить конвертацию.

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

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

Самым предсказуемым является метод General, позволяющий установить, на сколько полигонов будет разбит каждый сегмент поверхности. Для этого надо в параметрах разбиения Initial Tessellation Controls обязательно установить 07 V Type=Per Spans # of Iso Params (для каждого сегмента между изопармами) и задать необходимое число разбиений для Number U и Number V.

Кстати, все методы и параметры можно настроить после конвертации, в результате которой создается нода nurbsTessellate - в ее атрибутах есть все необходимые настройки для экспериментов.

Процесс превращения сплайновой поверхности в полигональную также происходит каждый раз в процессе рендеринга и называется тесселяцией (tessellation). Вы можете задавать настройки тесселяции для каждой поверхности в Attribute Editor в разделе Tessellation.

209

Эти настройки похожи на параметры конвертации для операции Convert=>NURBS to Poly­ gons, и для каждого объекта их надо настроить индивидуально. Вы должны понимать, что именно эти настройки определят, насколько груб или гладко будет выглядеть ваш сплайновый объект И финальной картинке плюс от них зависит и время просчета этой картинки.

К сожалению, и родной майский рендерер и даже mental ray в текущей версии используют явное разбиение сплайновых поверхностей на полигоны перед просчетом (mental ray делает это достаточно интеллектуально, так что зачастую вам попросту не приходится заботится о настроках тесселяции). Поэтому необходимо держать в уме, что даже самая гладкая и «красивая» сплайновая модель с процессе рендеринга превращается в полигоны.

Теперь немного о конвертировании полигонов в сплайновые поверхности. Может так случиться, что вы, например, неожиданно выиграете в лотерею тысяч семьдесят долларов и купите на них хороший ЗD-сканер. Результат работы такого сканера - облако точек, которая как правило, довольно безболезненно превращается в густую полигональную сетку. Хитрыми методами количество вершин такой модели может быть снижено до адекватного числа, однако превратить такую полигональную сетку в сплайновую модель нажатием одной кнопки невозможно, Для этого существует целый класс программ, типа Paraform, интеллектуально «обтягивающих полигональную сетку набором сплайновых патчей, причем границы патчей задает вручную сам пользователь. Любые методы автоматической конвертации вряд ли принесут успех.

Возьмите полигональную сферу и удалите у нее половину граней, затем сконвертируйте этот огрызок в сабдивы с помощью Modify=>Convert=>Polygons to Subdiv.

А затем сконвертируйте получившийся сабдив в сплайновую модель: Modify=>Convert=> Subdiv to NURBS.

210

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