«В двух книгах Книга первая ООО Арт Хаус медиа Москва 2007 Цыпцын Сергей. Понимая MAYA Издательство ООО Арт Хаус медиа, 2007 В двух книгах/ М. Издательство ООО Арт Хаус медиа, 2007 1428 с. ISBN 978-5-902976-03-5 Эта ...»
Откройте Option Box инструмента CV Curve Tool и выберите там Curve Degree=1 Linear (это есть первую степень для рисования ломаных линий).
Затем поставьте всего две точки на цилиндре (этого достаточно, чтобы создать отрезок кривой первой степени). Одну внизу, другую вверху. Нажмите Enter.
А теперь попытайтесь осознать, что же вы натворили. На поверхности третьего порядка,вы нарисовали отрезок прямой линии! Причем MAYA даже не выругалась по ходу дела. Если осознать содеянное не удается, проделайте (можно мысленно) такой эксперимент.
Возьмите чистый лист бумаги. По краям нарисуйте две точки на разной высоте. Соедините их прямой линией. А теперь сверните лист в трубочку, так чтобы края соприкоснулись, выглядит прямая линия? Правильно, как кусок спирали.
Точно так же, построенная кривая является отрезком прямой на поверхности цилиндра.
Но поскольку цилиндр суть свернутая в трубку плоскость, мы видим кусок спирали. Кривая целиком лежит в поверхности цилиндра и соединяет кратчайшим путем две точки на цилиндре (в математике для взрослых такие кривые называются геодезическими).
Выберите верхнюю контрольную точку кривой. Подвигайте ее за манипулятор в горизонтальном направлении, вдоль края цилиндра. Если изловчиться, то можно «намотать»
конец кривой на цилиндр в несколько оборотов.
Когда устанете мотать, загляните в Channel Box, и там вы обнаружите строчку CVs (Click to show).
Щелкните по ней - увидите координаты выбранной контрольной вершины. Только координаты не в пространстве, а на плоскости цилиндра, типа широты и долготы. Также можно заметить, что координата Z равна нулю. Пытливые умы быстро сообразят, что X и Y соответствуют координатам U и V.
Вбейте для Y довольно большое значение, например, 64. Спираль намотается на цилиндр о о о восьми раз. Поэкспериментируйте со значением X и положением нижней точки.
Вдумайтесь еще раз: всего две точки определяют спираль, притом с произвольным количеством витков. Вспоминайте про лист бумаги (если будет совсем туго).
Недовольное примечание. То, что MAYA рисует построенную кривую в виде ломаной угловатой линии - это глюк последней версии программы, чья-то недоработка, чистая профанация или неуклюжее желание напомнить пользователю, что кривая имеет первую степень. На самом деле, такая кривая абсолютно точно лежит «в поверхности» и никоим образом не оттопыривается в виде ломаных уголков. (Ведь при сворачивании листа бумаги нарисованная линия не топорщится!) В версии MAYA 1.0, помнится, такого безобразия не было.
Чтобы завершить свой «психоделический эксперимент», выберите кривую на поверхности целиком и превратите ее в обычную трехмерную кривую с помощью операции Edit Curves=>Duplicate Mace Curves.
Возникнет новая обычная кривая третьей степени, которую можно оттащить в сторону и убедиться, что Construction History полностью сохраняется в ходе выполненной операции. Изменяя форму цилиндра, вы будете изменять форму спирали.
Дальше я изложу еще немного теории, предназначенной для взрослых мальчиков связанной с понятием «жесткости» точек (Multiplicity), их весами (CV weights) и определением граничных условий. В принципе изложенных сведений про кривые достаточно, чтобы начать с ними работать, особенно если ваши задачи лежат только в области создания органических форм Однако если вы намерены строить изощренные сплайновые модели или собираетесь заняться полупромышленным дизайном, деваться некуда - вы просто обречены на углубленное изучение свойств сплайновых объектов.
Небольшой раздел для взрослых. Multiplicity.
Концевые условия (End Conditions) MAYA позволяет притягивать кривую к контрольным точкам с помощью операции Еdit Curves=>CV Harden. (Не надо путать эту операцию с изменением весов контрольных точек, она оперирует таким понятием как CV Multiplicity.) Эта операция работает адекватно, только если включить опцию Keep Originals. В этом случае создается нода типа hardenPoint, у которой можно вручную задавать значение параметров multiplicity. В противном случае значение multiplicity всегда устанавливается равным степени кривой, то есть трём в нашем случае. Эта команда также работает только в том случае, если справа и слева от выбранной контрольной точки находятся по две точки со значением multiplicity равным единице. Иначе говоря, эта операция не работает на концах кривой.
Терминологический комментарий. Multiplicity можно перевести как «множественность» или, если уж совсем по-умному, «мультипликативность»
Этот термин указывает, сколько реально точек скрываются под одной видимой точкой. В случае, когда в одном месте пространства находятся несколько контрольных вершин, говорят про CV Multiplicity. Если совпадают несколько Edit Points, их называют multi-knot или multiple knot.
Аналогичного эффекта «множественности точек» можно достичь, вставляя в любом месте к и о ( том числе и в Edit Point) multiple knot при помощи операции Edit Curves=>lnsert Knot. В этом случае контрольная точка как бы притягивается к кривой и приобретает multiplicity равную трем. При перемещении ее также обнаруживается угол на кривой.
Если вы выберете Edit Point в этом углу и понажимаете стрелки вправо и влево, то увидите, что там, на самом деле, целых три точки. Правда, попытка таскать их индивидуально не будет успешной. В этом и состоит иллюстрация понятия multiple knot, то есть «множественный узел».
П и этом, контрольная вершина в углу одна, в чем также нетрудно убедиться, нажимая стрелки вправо-влево.
Нетрудно также убедиться, что на концах любой кривой всегда присутствуют «множественные» точки, то есть multiple knots. Однако команда Rebuild с опцией No Multiple Knots не «развязывает» эти узлы. Для того, чтобы удалить «множественность» на концах кривой нужно задать Rebuild Туре = End Conditions и установить End Conditions = No Multiple Knots.
Пытливые умы тут же вспомнят, что в иструментах создания кривых (CV/EP Curve Tool) была похожая опция, которая называлась Multiple End Knots, включенная по умолчанию.
Ел ее выключить, то создаваемые кривые не будут касаться своим концами первой и последней контрольной точки.
Такие кривые, конечно, не сильно удобно редактировать с помощью контрольных точек однако они обладают весьма замечательными свойствами.
Если вы построите и гладко состыкуете две обычных кривых, а потом примените к ним обоим любой деформер (например, Lattice или Bend), то в месте соединения кривых явно вылезет угол. Тоже самое будет и с поверхностями.
Однако если построить две кривые с выключенной опцией Multiple End Knots и гладко их состыковать (это очень легко сделать, просто «приснапив» три последние контрольные точки первой кривой к трем первым точкам второй кривой, причем можно это сделать прямо в процессе построения), то применение любого деформера не вызовет появления швов и углов между кривыми. (Пример применения bend деформера сохранен в файле endConditions.ma.) Можете также проверить это явление и для поверхностей, у которых края не являются «множественными».
Таким образом, кривые и поверхности без multiple knots на концах обладают весьма полезными свойствами, однако их применение совершенно не распространено в связи с трудностями контроля и редактирования границ объектов.
Веса контрольных точек (Weights) Теперь разберем, что такое веса контрольных точек. Особо эрудированные пытливые умы уже прослышали, что буква R в аббревиатуре NURBS, означает " r a t i o n a l ", что, в свою очередь, означает: веса контрольных точек кривых и поверхностей могут иметь значения, отличные от единицы, и пользователь может произвольно изменять их.
Совсем уж филологически подкованные умы спросят, а где же ratio (отношение! из слова rational? Ответ на это - сугубо математический: формула для NURBS может представлять собой отношение (частное) двух полиномов.
Изменение весов контрольных точек должно вести к изменению степени притяжения кривой или поверхности к этим контрольным точкам.
«И как будем менять?», спросите вы.
Легально никак! MAYA работает с rational-геометрией в режиме Read Only. То есть, она понимает такие объекты и корректно отображает их. Если вы, например, импортируете в MAYA сцену в формате IGES, созданную за пределами MAYA и содержащую геометрию с дробными весами, то M Y прекрасно ее скушает и даже позволит вам с нею работать. Но никаких стандартных инструментов для изменения значений весов в MAYA нет. И, похоже, не будет, так как MAYA позиционируется как пакет для анимации, а не для промышленного дизайна, и поэтому требования к точности построения онлайновых поверхностей не являются слишком строгими. Более того, MAYA имеет определенный набор инструментов, чтобы избавляться от rational-геометрии. В частности, в опциях операции Rebuild Surfaces есть метод Non-Rational, с помощью которого вычищаются все веса,отличные от единицы, и поверхность перестраивается в тип non-rational.
Однако, зная, как пользоваться языком MEL, и обладая известной сообразительностью, можно попробовать поиграть с весами точек. С помощью документации к ноде nurbsCurve=>curve Shape=>controlPoints выясняем, что представляет собой атрибут weights, который содержит веса точек.
Строим сплайновую окружность по умолчанию Create=>NURBS Primitives=>Circle.
• Script Editor выполняем команду getAttr,wt[0:7] Полученные единицы и есть веса восьми контрольных точек окружности. Пробуем изменить их командой setAttr.wt[0:7] 5 15 15 Получаем «угловатую окружность», притянутую к своим четным контрольным точкам.
Продолжим издевательства. Выполните команду Получим квадрат.
Таким образом, чтобы изменить вес контрольной точки кривой, надо знать ее номер и синтаксис команды setAttr. Для поверхностей все немного сложнее, так как номер точки зависит от количества столбцов и строк контрольных точек, однако вычисляется это без труда. На с й е www.highend3d.com находится некоторое количество скриптов с адекватными интерфейсами для редактирования весов точек. Однако я бы не советовал увлекаться rational-геометрией, так как многие операции работы с поверхностями не будут корректно работать с такими объектами.В частности, операция Align не обеспечит гладкую стыковку, а конвертирование таких поверхности в сабдивы просто игнорирует rational-геометрию.
Для любителей Безье Для неутомимых любителей кривых и патчей Безье могу предложить один инструмент, который, возможно, немного скрасит их ностальгию по «усикам» и «гантелькам». Но немного и ненадолго. Для кривых такой инструмент называется Edit Curves=>Curve Editing Tool. При помощи него можно выбрать любое место на кривой и отредактировать кривую в этом месте. В отличи от кривых Безье, этот инструмент позволяет редактировать кривую в любом месте, а не только на границах сегментов.
Манипулятор этого инструмента представляет собой «паровоз», который умеет ездить по кривой, может изменять положение любой точки кривой, а также величину и направление касательной в любой точке.
Просто щелкая в любое место кривой, вы можете потащить кривую за это место и при п м щ манипуляторов отредактировать касательную в этой точке. Коль скоро мы договорились не использовать острые углы, вопрос «ломания» касательной обсуждать не будем.
Две пунктирные линии позволяют сделать касательную к кривой вертикальной или горизонтальной. Часто это удобно делать для крайних точек кривой, когда надо «подвести» кривую к какой-нибудь границе строго вертикально или горизонтально.
Для поверхностей существует аналогичный инструмент по адресу Edit NURBS=>Surface Editing=>Surface Editing Tool. Он также позволяет перемещать любую точку поверхности и дополнительно редактировать направление нормали.
Лично мне редактирование кривых и патчей с помощью узлов и касательных, напоминает процесс создания скульптуры при помощи дощечек, надетых на руки. Представьте, что вам нужно получит нужную форму из пластилина, прикладывая такие дощечки в строго определенных местах и легонько их поворачивая.
В этом месте очень удобно сделать стремительный реверанс в сторону артизана. И заодно потихоньку перейти к работе с поверхностями.
Артизан. Воплощение в скульпуре Аргизан (Artisan) это название набора различных инструментов, использующих концепцию трехмерных кистей для выполнения разного рода задач, которые могут быть сведены к раскрашиванию поверхностей различными свойствами.
В приложении к моделированию Артизан имеет три воплощения. Это три инструмента: Edit NURBS=>Sculp Geometry Tool, Edit Polygons=>Sculp Polygon Tool и Subdiv Surfaces=>Sculp Geometry Tool Сразу оговорюсь: все они относятся к разряду инструментов абсолютно неточного моделирования. Их задача состоит в том, чтобы облегчить нормальному человеку (а не безумному инженеру) создание трехмерных форм привычными и интуитивно понятными способами. Дело в том, что на заре компьютерной графики координат точек приходилось набивать вручную и затем смотреть, что из зтого получалось Потом придумали манипуляторы и стало можно перетаскивать точки прямо на экране. Но если речь идет о скульптуре или лепке трехмерных моделей, а не конструировании, такой метод весьма далек от естественного. Чтобы хоть как-то адаптировать традиционные скульптурные методы, были разработаны инструменты Артизан для работы с поверхностями.
Инструменты основаны на концепции кистей, которыми можно надавливать (Push) вытягивать (Pull) или сглаживать (Smooth) поверхность прямо в трехмерной перспективной камере.
Эти инструменты подходят для создания базовых или грубых форм для дальнейшего редактирования. При работе с ними акцент делается не на детали, а на форму модели целиком на ее характер и общие очертания.
Использование этих инструментов вызывающе просто. Достаточно выбрать объект, з т м ае соответствующий инструмент, а далее желательно открыть Option Box этого инструмента, чтобы получить доступ ко всем его настройкам. Настройки всех артизановских инструментов практически идентичны, поэтому я буду пока говорить про Edit NURBS=>Sculp Surface Tool.
Совет. Можно быстро добраться до зтого инструмента с помощью меню на правой кнопке мыши, где нужно выбрать Paint->Sculpt.
Так как это инструмент (Tool), то курсор мыши принимает форму кисти, соответствущий этому инструменту, а дальше можно красить (или царапать мышью, если угодно) объект, с восхищением наблюдая происходящее на экране.
Настройки инструмента, хоть и многочисленны, но быстро осваиваются методом тыка, Первое, во что стоит потыкать, это радиус кисти и тип операции (Operation). Так как по кнопке Tool Help выскакивает очень понятная документация с картинками, нет смысла перечислять все параметры. Комментариев к некоторым из них и немного практических советов будет вполне достаточно.
Идеальным является наличие планшета при использовании Артизана. Наличие двух радиусов позволяет задать диапазон изменения радиуса кисти при нажатии на планшет. В случае использования мыши второй радиус игнорируется.
Совет. Используйте горячую клавишу 'Ь' для интерактивного изменения радиуса кисти (brush). Для этого нажимайте и удерживайте эту клавишу, при этом нажимайте и перемещайте левую кнопку мыши прямо в окне камеры.
Нажатая и удерживаемая кнопка 'и' показывает marking menu, «обслуживающее»
инструмент Артизан. В нем можно быстро выбрать операцию и другие Во время рисования удобно отключить сетку и назначить на поверхность бликующий материал. Отключение сетки делается в настройках инструмента, в разделе Display, с помощью выключения галки Show Wireframe.
Часто бывает необходимо рисовать сразу двумя кистями симметрично относительно какойнибудь оси. Это можно сделать в разделе Stroke, включив галку Reflection и выбрав ось.
Совет. Чтобы замаскировать часть поверхности, то есть защитить ее от рисования, выделите нужные контрольные вершины, а потом снова включите инструмент. Рисование будет производиться только по выбранным вершинам.
Следует отчетливо понимать, что результатом ваших безумных манипуляций с Артизаном будет банальное перемещение контрольных точек. Поэтому для адекватных результатов поверхность должна быть достаточно «плотная», то есть содержать приличное количество контрольных вершин.
Это плохо согласуется с инженерным подходом и советом экономить контрольные вершины, но чудес не бывает, и за удобство использования такого «человеческого» инструмента приходиться платить.
Совет. Если вы хотите начать красить другой объект, но не хотите при этом переключаться в Select Tool, выбирать объект и снова включать Артизан используйте пункт Select в контекстном меню, выпадающем над любым объектом Полезное применение Артизана заключается также в загрузке карты изображения прямо в выбранную операцию. Иначе говоря, выдавливание и вытягивание объекта целиком по карте изображения. Некий интерактивный displacement.
Для этого нужно выбрать операцию (например Pull), а затем в разделе Attribute Maps=>lmport нажать кнопку Import и выбрать нужный файл с изображением.
Но одно из самых полезных и не таких очевидных применений Артизана основано на его способности сглаживать поверхности. Дело в том, что операция Smooth предназначена не только для того, чтобы сглаживать ваши неуклюжие движения мышью. Ее можно применять для редактирования поверхностей, вообще не затронутых Артизаном прежде. Операция Smooth «расправляет» поверхность, более равномерно распределяя точки вдоль самой поверхности.
Это очень удобно, когда ваша поверхность в результате редактирования «запуталась», то есть ряды контрольных точек стали переплетаться или просто превратились в неравномерную сетку.
Применение операции 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-поверхность это всегда сетка, состоящая из двух семейств кривых-образующих, называемых изопармами. У каждого такого семейства есть свое направление, общее для каждого семейства. Направления эти обозначаются буквами 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.
Примечание. «Изопармы» можно перевести с русско-латинского как «линии одинакового значения параметра». Вдоль любой изопармы значение параметра U или V всегда остается одинаковым.
У поверхностей нет компонент типа Edit Points, но если вы хотите «схватить и потащить»
поверхность за произвольную точку, лежащую на поверхности, используйте Edit NURBS=>Surface Efting=>Surface Editing Tool. В этом же меню находятся операции Break Tangent и Smooth Tangent, позволяющие быстро «сломать» или наоборот «сгладить» поверхность в районе выбранной изопармы.
Совет. Ряды контрольных точек удобно выбирать при помощи компонента Hull. Строго говоря, Hull - не компонент, а просто экранная сетка, соединяющая контрольные вершины. С их помощью можно не только выбирать целые ряды точек в обоих направлениях, но и контролировать «запутанность» сетки контрольных Главное ограничение сплайновых поверхностей Еще раз напомню об одном недостатке сплайновых поверхностей, из-за которого и было придумано столько различных изощренных инструментов.
Любая сплайновая поверхность всегда является сеткой из изопарм. Даже сплайновая сфера представляет собой сетку из меридианов и параллелей, состоящую из прямоугольных ячеек. Сплайновую поверхность всегда можно развернуть в прямоугольную сетку-плоскость, или на оборот, свернуть из прямоугольной сетки. Об этом надо помнить всегда. Это природа сплайновых поверхностей и следствие их математического описания, и с этим ничего нельзя сделать. Напомню что обыкновенную руку можно представить как минимум одиннадцатью объектами: ладонь из сферы, пять пальцев из цилиндров и еще пять соединений-колец между ладонью и пальцами. Если пальцы и соединения-кольца еще можно пытаться «сшить» в один объект, то сферу с пальцами нельзя соединить в один объект в принципе.
Примечание. Конечно, можно взять сферу, задать ей 10000 контрольных вершин вытянуть из нее руку с пальцами. Это будет один объект, но подумайте о том как это можно сделать, и самое главное, на что сгодится такая поверхности ведь к анимации она будет явно непригодна.
Дело в том, что сплайновые поверхности присоединяются друг к другу краями (или границами). Операцию Attach Surfaces, «сшивающую» две поверхности в одну, всегда используют для присоединения края поверхностей. Нельзя объединить две поверхности в одну произвольным образом, можно только подтянуть их края друг к другу, а затем соединить их в новую сетку из изопарм. Перед применением операции Attach Surfaces всегда представляйте себе, как будед выглядеть сетка из изопарм для новой поверхности.
Кроме того, операция Attach Surfaces не работает с краями отверстий, вырезанных с помощью Trim Tool, поэтому объединять поверхности вы сможете, только соединяя их реальные границы.
Ограничением служит и то, вы не можете соединить только часть границы поверхности с другой поверхностью. То есть края объектов соединяются целиком.
Конечно, операции Align и Stitch, позволяют «подогнать» часть края одной поверхности к границе другой. Но они не объединяют две поверхности в одну, а речь сейчас идет именно об этом Но даже если края двух поверхностей находятся друг напротив друга и примерно совпадают и размеру, это еще не значит, что эти поверхности можно успешно «сшить» в один объект с тающью Attach Surfaces. Края поверхностей должны быть совместимы.
Совместимые края поверхностей Интуитивно понятно, что если вы собираетесь объединить две поверхности в одну Вдоль какого-нибудь края, то лучше будет, если количество сегментов вдоль этих краев будет одинаковым.
Дальше я вместо «количество сегментов» буду иногда употреблять выражение «количество нэопарм», хотя количество видимых изопарм на экране отнюдь не всегда совпадает с количеством сегментов на поверхности. Чтобы эти «количества» совпадали, то есть чтобы увидеть на экране «стоящее количество сегментов в виде изопарм, надо либо перейти в режим wireframe (клавиша 4) и нажать клавишу 1, либо включить в окне камеры режим Shading=>Shade Options=>Wireframe и Shaded.
Потренируйтесь на двух NURBS-плоскостях, применяя к ним операцию Attach Surfaces (включите Keep Originals, чтобы изменять исходные поверхности и тут же видеть результат).
Если вы соедините две плоскости, у которых количество сегментов вдоль границы, например 3 и 7, то на результирующей поверхности их будет 9, то есть возникают дополнительные ряды контрольных вершин, поверхность усложняется, и при этом новые изопармы расположены не самым удачным образом.
Если же количество сегментов на второй поверхности будет равным шести, то результат будет более «красивый» и будет иметь также шесть сегментов.
Выводы делайте сами. Могу лишь посоветовать: перед стыковкой поверхностей надо позаботиться о том, чтобы количество сегментов на объектах было хотя бы кратным одному или тому же числу.
Но это - самое простое, но далеко не последнее условие для успешного объединения поверхностей! Параметризация - ваш ночной кошмар должна быть проверена перед стыковкой и должна быть согласована на обеих поверхностях, даже если количество сегментов одинаково.
Совместимая параметризация Даже если на обеих поверхностях задана параметризация одного типа (Uniform), но на одной из них диапазон параметра определен от нуля до единицы, а на другой от нуля до количества сегментов (0 to #Spans), то вас поджидают различные неприятности (о том, что происходит при попытке объединить поверхности с Uniform и Chord Length параметризациями, можете посмотреть в упражнении ближе к концу этой главы).
Создайте две одинаковые (!) плоскости и перестройте одну из них так (с помощью Rebuilde Surfaces), чтобы задать Uniform-параметризацию типа 0 to #Spans. (По умолчанию диапазон параметра на примитивной плоскости изменяется от нуля до единицы).
Затем примените операцию Attach Surfaces. То, что изопармы немного «съедут» (если использовался метод Blend), не так страшно.
Попробуйте наложить текстуру типа Checker на поверхность - вы увидите, что она ляжет, мягко говоря, неравномерно.
Дело в том, что параметр совершенно неравномерно распределен вдоль поверхности. В одной половине поверхности, унаследованной от первой плоскости, параметр изменяется от нуля до единицы, а во второй половине начинает быстро изменяться от сегмента к сегменту. Выбери несколько изопарм и посмотрите в заголовке окна 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), поможет сэкономить вам массу времени, которое в противном случае придется затратить на устранение проблем.
Конвертирование сплайнов в полигоны и тесселяция Любую сплайновую поверхность можно превратить в полигональную. Обратное утверждение неверно. Полигональную поверхность можно пытаться представить в виде некоторого (обычно весьма большого) числа сплайновых патчей. Ниже я покажу, как.
Преобразование сплайнов в полигоны может понадобиться, например, для экспорта вашей модели в игровой движок или в систему рендеринга, не поддерживающую майские сплайны.
Конвертация сплайнов в полигоны производится с помощью операции 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.
Эти настройки похожи на параметры конвертации для операции Convert=>NURBS to Poly gons, и для каждого объекта их надо настроить индивидуально. Вы должны понимать, что именно эти настройки определят, насколько груб или гладко будет выглядеть ваш сплайновый объект И финальной картинке плюс от них зависит и время просчета этой картинки.
К сожалению, и родной майский рендерер и даже mental ray в текущей версии используют явное разбиение сплайновых поверхностей на полигоны перед просчетом (mental ray делает это достаточно интеллектуально, так что зачастую вам попросту не приходится заботится о настроках тесселяции). Поэтому необходимо держать в уме, что даже самая гладкая и «красивая» сплайновая модель с процессе рендеринга превращается в полигоны.
Теперь немного о конвертировании полигонов в сплайновые поверхности. Может так случиться, что вы, например, неожиданно выиграете в лотерею тысяч семьдесят долларов и купите на них хороший ЗD-сканер. Результат работы такого сканера - облако точек, которая как правило, довольно безболезненно превращается в густую полигональную сетку. Хитрыми методами количество вершин такой модели может быть снижено до адекватного числа, однако превратить такую полигональную сетку в сплайновую модель нажатием одной кнопки невозможно, Для этого существует целый класс программ, типа Paraform, интеллектуально «обтягивающих полигональную сетку набором сплайновых патчей, причем границы патчей задает вручную сам пользователь. Любые методы автоматической конвертации вряд ли принесут успех.
Возьмите полигональную сферу и удалите у нее половину граней, затем сконвертируйте этот огрызок в сабдивы с помощью Modify=>Convert=>Polygons to Subdiv.
А затем сконвертируйте получившийся сабдив в сплайновую модель: Modify=>Convert=> Subdiv to NURBS.
А теперь откройте Outliner и с удивлением поглядите на десятки мелких сплайновых поверхностей, созданных для того, чтобы повторить форму куска сферы. Таким образом, поверхность, представленная одним полигональным объектом, может быть воспроизведена лишь внушительным количеством сплайновых «кусков».
Теоретическая часть по сути дела исчерпана, поэтому вместо описания инструментов работы поверхностями, предлагаю сделать средних размеров практический пример, на основе которого окно будет обсудить особенности использования различных методов работы с поверхностями.
Паровозостроение Создайте новую сцену: File=>New.
Создайте NURBS-цилиндр: Create NURBS Primitive=>Cylinder.
Поверните и растяните его (rotateX=90; scale 2; 5; 2;).
Создайте NURBS-конус и расположите его над цилиндром (translate 0; 3.5; 3.5; rotateX=180;).
Выберите конус и цилиндр. Перейдите в режим F3-Modeling.
Выполните Edit NURBS=>Surface Fillet=>CircularFillet.
Примечание. Если в тексте не указано открытие Option Box для операции Сircle larFillet и последующих действий, подразумевается использование параметров по умолчанию. В случае, когда в Option Box ранее устанавливались другие параметры для этих операций, следует зайти в Option Box и установить параметры по умолчанию (Edit=>Reset Settings).
Похоже, что воротник для конуса великоват. Однако, чтобы не переделывать построен заново, можно воспользоваться тем, что MAYA для каждой операции моделирования создл специальную ноду, в которой запоминает параметры, с которыми эта операция применялась.
Выберите соединяющую поверхность.
В Channel Box щелкните на rbfSrfl и установите Primary/Secondary Radius=0.5;
Выберите конус. Отодвиньте его от края цилиндра (translateZ=3).
Поверхность сопряжения (Fillet Surface) последует за конусом и перестроится всоответствии с введенными значениями для радиусов. MAYA помнит, что поверхность была построена между конусом и цилиндром, и поэтому при перемещении конуса она перемещается и перестраивается "на ходу". Точно так же при изменении параметров построения поверхность "подстраивается" под новые параметры. Как я уже упоминал, такой принцип "запоминания истории" называется Construction History. В соответствии с этим принципом большинство параметров выполнения той или иной операции можно задавать не только в момент построения (через Option Box), но и изменять впоследствии, как параметры элемента истории в Channel Box в разделе INPUTS.
Закроем дырку на переднем крае цилиндра.
Нажмите правую кнопку мыши на цилиндре и укажите Isoparm, затем выберите крайнюю изопарму и выполните Surfaces=>Planar Вообще-то, использование поверхностей типа Planar дурной тон. Прежде всего потому, что они совершенно непригодны для редактирования. Кроме того, для их построения требуются исключительно плоские замкнутые кривые и любая попытка пошевелить исходную поверхность или кривую, через которую был построен Planar, приводит к исчезновению последнего.
Попробуйте потаскать крайние контрольные вершины цилиндра и посмотрите на результат и на всяческую «ругань» в Script Editor.
Контрольные точки самой Planar-поверхности отнюдь не представляют собой ряды «ружностей. Более того, взглянув на них, пытливые умы без труда определят, что это просто прямоугольная плоскость, их которой вырезали нужную форму, определяемую кривой.
Мы однако оставим эту поверхность жить, и даже проделаем несколько операций с ней.
в аа надо знать в лицо и лучше знать, какие сюрпризы он может приготовить.
А пока сделаем шапку для трубы.
Нажмите правую кнопку мыши на конусе и укажите Isoparm, затем выберите крайнюю крхнюю изопарму и выполните Surfaces=>Bevel.
В Channel Box откройте bevell и установите следующие атрибуты Width=0.3; Depth=0.5;
Bevel Shape Type=Curve Out.
Операция Bevel применяют обычно для камуфлирования открытого края поверхноcти когда надо «снять фаску» с этого края. Правда, мы воспользовались ею для построения целого «продвинутого цилиндра».
Добавим декоративную деталь.
Создайте NURBS-сферу.
Приподнимите ее: translateY=2.5.
Выберите сферу и цилиндр.
Выполните Edit NURBS=>Surface Fillet=>CircularFillet.
Выберите соединяющую поверхность.
В Channel Box откройте раздел rbfSrf2 и установите Primary/Secondary Radius=0.3;
Бесполезный номентарий. Совершенно непонятно, почему операции построения поверхностей типа Fillet находятся в меню Edit NURBS, в то время как они явно создают новые поверхности.
Сохраните сцену (train01.ma).
Выберите все поверхности прямо на экране и сдвиньте их вправо.
Все разъехалось... Это не глюки новой версии, это вышеупомянутый Double Transformation, или двойные перемещения, вызванные тем, что некоторые объекты (например, шапка конуса и крышка цилиндра) двигаются и сами по себе (так, как они выбраны), и еще дополнительно, из за того, что смещаются «породившие» их объекты. Эти перемещения просто складываются. Все это проделки Construction History, которую самое время уничтожить, если мы удовлетворены внешним видом поверхностей и не собираемся анимировать, например, перемещения конуса вдоль поверхности цилиндра.
Удаляем историю для всех объектов во всей сцене.
Edit=>Delete All by Type=>History Закруглим край цилиндра.
Выберите Edit NURBS=>Round Tool.
Коль скоро это инструмент (Tool), MAYA ждет от нас активнейших действий, о которых можно и нужно прочитать в HelpLine.
Курсор при этом принимает хищную форму, призывая нас быть предельно внимательными.
Подсказка гласит, что надо выбрать ровно два края соприкасающихся поверхностей (Round Tool:
Select a pair of surface edges that meet).
Поэтому лучше переключится в режим Wireframe и подъехать поближе к краю цилиндра.
Теперь следует выбрать вместе и край цилиндра и край " к р ы ш к и ", но не задевая продольных изопарм, иначе вы получите сообщение, что выбрали слишком много кривых.
При помощи появившегося желтого манипулятора задайте радиус скругления около 0, Точное значение для радиуса также можно ввести в Channel Box. Нажмите Enter для завершения работы с инструментом Round Tool и построения поверхности.
Развернутое примечание. Для всех, кто невнимательно прочитал главу про интерфейс, ниже, на всякий случай, повторю вкратце концепцию инструментов и операций, уже для конкретного контекста.
Все действия, производимые в MAYA через главное меню, можно разделить на две категории: инструменты и операции (Tools и Actions).
Для выполнения операции, как правило, необходимо выбрать какие-либо объекты или компоненты и применить к ним некоторое действие, то есть пункт меню Action.
Примером является операция Circular Fillet, перед применением которой следует выбрать два объекта, а потом выполнить соответствующий пункт меню.
Если в названии пункта меню присутствует слово Tool (например, Round Tool или TrimTool этот пункт соответствует инструменту.
Работа с инструментами (Tools), в общем случае, не требует предварительного выбора объектов: после выбора нужного инструмента из меню курсор меняет форму (то есть инструмент становится активным) и пользователь должен выполнить некоторое количество действий, завершаемых, как правило, нажатием клавиши Enter. После чего активным становится последний инструмент трансформаций.
Пока инструмент активен, в строке Help Line содержатся инструкции по выполнению необходимых действий для правильного завершения работы инструмента.
Вас наверняка смутит внешний вид появившихся объектов. Лихорадочное нажатие клавиш 1,2 и 3 немного улучшает картину, но смущение все равно не проходит, особенно в режиме Shaded Ничего страшного, просто для отображения Planar-поверхности на экране рисуется недостаточно полигонов. (Напоминаю: даже сплайновые объекты, отрисовываются на экране в виде полигонов, так как видеокарта ничего не знает и знать не хочет про любые поверхности, кроме полигональных).
Увеличить качество отображения и количество полигонов для отрисовки этой поверхности индивидуально можно в Attribute Editor раздела NURBS Surface Display.
Выделите торец паровоза и установите значение атрибута Crv Presicion Shaded равным 20, ч о ы щели на корпусе паровоза вас больше не смущали.
Заглянем в Outliner:
Полный ужас! Несмотря на то, что на экране можно увидеть восемь законопослушных поверхностей, весь Outliner кишит какими-то объектами-мутантами.
Лихорадочно убиваем историю, для всех объектов.
Не сильно помогает... NurbsCylinderl вообще превратился в пустой объект (вообще-то у него просто выключен атрибут visibility для shape-ноды). Похоже на вирусы. Будем лечить.
Лечение заключается в том, что надо удалить остатки операции Circular Fillet и применение инструмента Round Tool. (Наличие таких отходов производства хороший повод научиться не использовать эти операции...) Однако вы должны быть готовы к тому, что побочные объекты могут возникать в процессе применения некоторых операций сплайнового моделирования.
Выберите все объекты прямо на экране и сгруппируйте их, нажав Ctrl-g.
В Outliner появится новая группа, в которую войдет все выбранные на экране объект все мутанты останутся за бортом.
Теперь мутантов можно выделить прямо в Outliner и с удовольствием и отвращением удалить. Новую группу назовите Base и сохраните сцену (train02.ma).
Какой же паровоз не любит «быстрой звезды»? Той самой, которая красуется у него на носу и летит впереди паровоза... Вопрос в том, как сделать хорошую звезду? Например, пятиконечную конечно, особо извращенные умы возьмут в руки калькулятор и начнут высчитывать значения углов между соседними кривыми, через которые надо провести лофт, который нужно потом замкнуть, и т.д., и т.п.
Мы пойдем другим, менее извращенным путем.
Создайте NURBS-конус.
В Channel Box установите Degree=Linear, a Sections=10.
Сдвиньте его по оси Z, так, чтобы он не пересекался с другими объектами (translateZ=10).
П р й ие в камеру top и нажмите Т. Затем выберите контрольные точки по краю конуса в любом еедт направлении, но строго через одну.
Можно заметить: pivot выделения не находится точно по центру конуса, из-за того, что пять выбранных точек не симметричны относительно оси X.
Выберите Scale Tool, нажмите Insert и с помощью привязки к сетке установите pivot точно по центру. Нажмите Insert снова и сожмите к центру выделенные точки. Звезда почти готова!
Осталось перейти в перспективную камеру, выбрать сам конус, сжать его вдоль вертикали и поставить на место. (translateZ=5, rotateX=90, rotateZ=18).
Пытливые умы могут самостоятельно догадаться, что 18 - это 360/10/2.
Теперь можно удалить с конуса историю и «забросить» его средней кнопкой мыши в группу Base в окне Outliner.
Займемся кабиной.
Создайте NURBS-куб. Передвиньте и отмасштабируйте его, чтобы создать "кабину", (translate 0; 1.5; -6; scale 5; 8; 2; ) Примечание. Перемещать и масштабировать куб необходимо, выбрав группу nurbsCube1. Дело в том, что примитивный сплайновый кубик состоит из шести сгруппированных плоскостей, так как в силу топологических ограничений не может быть представлен единой поверхностью с одинаковой топологией граней. Если вы хотите выбирать куб на экране, а не в Outliner, не забывайте нажимать стрелку В Outliner выберите группу Base. Спрячьте ee(Ctrl-h).
Займемся окнами.
Перейдите в камеру front.
С помощью CV Curve Tool нарисуйте замкнутую кривую.
При установке последней точки используйте привязку к точками (клавиша 'v'), чтобы «приснапить» ее к первой точке кривой. Рисуйте кривую напротив правой половины кабины,так как окон будет два.
Тот факт, что первая и последняя точки кривой совпадают, еще не делает кривую замкнутой. Можете убедиться в этом в Attribute Editor, посмотрев на атрибут Form. Кривую надо замкнуть вручную.
Возмущенное примечание. То что написано в Attribute Editor для атрибута Form - сущая профанация! Кривая может быть либо замкнутая (periodic), либо незамкнутая (open). Добавление типа Closed можно рассматривать как диверсию против процесса понимания MAYA. Если вы создадите априори замкнутую окружность (Circle) и «разорвете» ее в любом месте с помощью операции Detach, то полученная кривая, как следует из Attribute Editor, будет принадлежать к типу Closed. Однако вы легко можете добраться до первой или последней точки и потянуть ее в сторону, разомкнув совпадение концов. Тип кривой, тем не менее, останется Closed!!
Самое интересное впереди: если удалить историю, то тип кривой послушно меняется на Ореn, однако, если три-четыре раза нажать Undo, то та же самая кривая, которая только что идентифицировалась как Closed, теперь упорно представляется как Open.
Вывод следующий: тип Closed и Open это просто одно и тоже. MAYA не всегда может правильно распознать совпадение концов кривой и установить нужный тип. Кроме того, совпадения концевых точек недостаточно для замкнутости, или лучше сказать, периодичности кривой. Для этого нужно, чтобы совпадали по три контрольные точки с каждого конца, то есть необходим «терехпест». Чтобы сделать такой перехлест и замкнуть кривую существует операция Open/Close Curves.
Замкните построенную кривую.
Выберите ее.
Зайдите в Option Box операции Edit Curves=> Open/Close Curves и выберите Shape=lgnore.
Нажмите Open/Close.
При помощи Undo можете поэкспериментировать и с другими опциями замыкания.
Blend аналогичен такому же из настроек операции Attach, и используется он в основном в таких случаях, когда концы кривых уже хорошо «пригнаны» друг к другу.
Теперь осталось «отмирорить» кривую (это реально используемый термин!!), то есть получить копию объекта, зеркально отраженную относительно какой-нибудь координата плоскости. Однако в MAYA нет операции mirror для сплайновых объектов. Вместо этого применяет) трюк с отрицательным масштабированием.
Скопируйте кривую с установками по умолчанию (Edit=>Duplicate).
И сразу установите scaleX=-1 для получившейся кривой.
Для наглядности можете подергать манипулятор Scale Tool, для лучшего понимания того что такое отрицательный масштаб объекта.
Здесь важно помнить о том, что pivot построенной кривой, как и любого другого вновь создаваемого объекта, находится в начале координат, а масштабирование происходит, конечно относительно pivot'a.
Примечание. То, что pivot вновь создаваемых геометрических объектов по умолчанию попадает в начало координат - это чудовищно удобно! Дале вы всегда можете сделать с pivot'ом что хотите, однако с точки зрения nocтроения симметричных, «отзеркаленных» и просто аккуратных моделей, расположение pivot 'а в нуле координат - безусловный плюс.
Совет. Старайтесь моделировать объект и детали «около» или «относительно»
начала координат. Вкупе с привязкой к сетке это сэкономит вам массу времени и сил. Закончив предварительное создание и редактирование, вы всегда сможете отодвинуть объект в нужное место, причем позднее будет несложно вернуться по необходимости к центру просто обнулив атрибуты translate. Пользователь искалеченные привычкой рисовать кубики в произвольном месте экрана возможно не сразу оценят преимущества такого подхода, однако со временем наименее упрямые начнут работать около центра.
С помощью двух Э Т И Х кривых мы будем «резать» окна в кабине. Для начала спроектируем кривые на стенки куба, чтобы получить контуры для вырезания.
Вернитесь в перспективную камеру.
Выберите обе кривые, переднюю и заднюю стенки кабины (curvel, curve2, leftnurbsCube1, rightnurbsCube1).
Откройте Option Box операции Edit NURBS=>Project Curve On Surface.
Установите Project Along=Surface Normal.
Это определит направление проектирования. Здесь мы воспользовались тем, что стенки кабины плоские и нормаль к ним совпадает с предполагаемой линией проектирования Аналогичного результата можно было достичь, выбрав направление проектирования вдоль линии взгляда (Active View) и перейдя в камеру front.
Нажмите Project.
На обеих сторонах кабины появятся новые спроектированные кривые. Если выбрать Move Tool, то выяснится, что у таких кривых «не хватает одной оси» манипулятора.
Кроме того, эти кривые не появляются в Outliner. Очевидно, что это «кривые на поверхности», о которых говорилось выше в этой главе. В данном случае они используются для того, чтобы определить на поверхности кабины замкнутые области, используемые для вырезания отверстий.
Можно брать в руки автоген и резать окна. Автоген в MAYA представлен инструментом Trim Tool. Выберите переднюю стенку куба.
Далее выполните Edit NURBS=>Trim Tool.
Курсор принимает агрессивную форму, приглашая нас производить неистовые действия, а поверхность разбивается на области, разграниченные замкнутыми кривыми на поверхности и краями поверхности. Щелкните мышкой в средней части плоскости, выбирая часть поверхности, которую следует сохранить, а части, которые будут вырезаны, остаются отмечены пунктирной
ШТРИХОВКОЙ
Нажмите Enter, как и положено при работе с большинством инструментов.Повторите вырезание для задней стенки куба.
Для улучшения отображения краев отверстий на экране, увеличьте в Attribute Editor значение атрибута Crv Presicion Shaded - в разделе NURBS Surface Display.
Примечание. Для успешной работы с инструментом Trim Tool, необходимо, чтобы кривые на поверхности были замкнутыми.
ЕСЛИ нажать правую кнопку мыши над стенками кабины, то можно увидеть, что тримированные поверхности имеют новый тип компонент Trim Edge. Их нельзя перемещать или вращать непосредственно, но можно использовать для построения новых объектов.
Нажмите правую кнопку мыши над передней стенкой и выберите тип Trim Edge.
Выберите край правого отверстия.
Затем нажмите правую кнопку мыши над задней стенкой и снова выберите тип Trim Edge.
Нажмите Shift и выберите край правого отверстия в задней стенке Выполните Surfaces=>Loft.
Проделайте аналогичные операции со вторым окном. Коль скоро мы не удаляли историю, посмотрим, как ее можно использовать.
Выберите кривые curve1 и curve2. Перемещайте их по вертикали. Убедитесь, что Construc tion History обновляет положение отверстий на поверхностях куба.
Нажмите Undo, если необходимо. Здесь нужно помнить, что при перемещении кривых происходит «закадровое» перепроектирование их на плоскости, перетримирование и перестройка обоих лофтов. И все это происходит практически мгновенно (в зависимости от начинки компьютера) или по крайней мере интерактивно. Если вы собираетесь анимировать, например, подмигивание паровоза левым окном, можете просто проанимировать форму кривой (к примеру, с помощью blendshape). Construction History позволить передать анимацию формы кривой на изменение ф р ы окна.
Мы, правда, не собираемся делать подмигивающий паровоз, поэтому можете просто подкорректировать форму окон, редактируя исходные кривые.
Теперь удалите историю для всей кабины и также удалите исходные кривые.
Судя по форме окошек, паровоз скорее всего будет водоплавающим, поэтому получившиеся форточки должны напоминать иллюминаторы.
Быстро сделаем крышу и передохнем немного от сплайновых объектов.
Создайте полигональный куб и сделайте крышу кабины Переместите куб наверх (translate 0; 6, -6; scale 6; 1; 4 ) Особенно эстетствующие умы могут схватить верхние точки кубика и с помощью Move Scale Tool сделать на крыше козырек. А экономные пользователи могут удалить верхнюю плоскость кабины, находящуюся под крышей и поэтому совершенно бесполезную.
Совет. Прячьте или удаляйте объекты, которые заведомо не попадут в облость видимости, зто сокращает время рендеринга и экономит память.
В Outliner выберите все объекты, относящиеся к кабине.
Еще раз удалите историю и сделайте новую группу (Edit=>Group).
Назовите ее Cabin.
Спрячьте ее (Ctrl-h).
Сохраните сцену (trainCM.ma).
На экране должно быть пусто, так как спрятаны обе группы. Самое время заняться колесами Перейдите в камеру front. Зайдите в Option Box инструмента CV Curve Tool и установите там Сurve Degree=Linear, чтобы рисовать ломаные кривые первой степени. Активно пользуясь привязкой к сетке, нарисуйте в верхней части окна L-образный профиль будущего колеса.
Выберите кривую, нажмите 'f'.
Немного сгладим профиль. Для этого воспользуемся операцией Fillet.
Нажмите правую кнопку мыши над кривой, выберите Curve Point.
С помощью Shift отметьте две точки на профиле.
Откройте Option Box операции Edit Curves=>Curve Fillet и установите Trim=on, Join=On, Construction=Freeform. Это означает, что после построения сглаживающего участка остаток угла будет отрезан и удален, а новый участок будет присоединен к исходной кривой. После построения можете поэкспериментировать с типами сглаживаний в Attribute Editor.
При желании закруглите другие углы и не забудьте удалить историю.
Вращаем профиль вокруг оси X.
Выберите построенную кривую. Для этого откройте Option Box для Surfaces=>Revolve, задайте Axis Preset=X и нажмите Revolve.
В Outliner выберите кривую профиля и удалите ее.
Для создания спиц колеса создайте NURBS-цилиндр.
В Channel Box можете установить Degree=Linear и наиболее понравившееся вам экзотическое количество spans. Например, три. Переместите и отмасштабируйте цилиндр, чтобы пострить подобие спицы.
Размножим спицу вдоль внутри колеса.
Необходимо сделать так, чтобы новая копия поворачивалась относительно предыдущей!
45 градусов. Всего будет восемь спиц, одна уже есть, поэтому надо сделать еще семь копий.
Зайдите в Option Box для Edit=>Duplicate.
Установите Rotate Х=45, Number of Copies=7.
Мы забыли сместить pivot!
Жмите Undo и срочно редактируйте положение pivot'a.
Нажмите Insert и, с помощью привязки к сетке, установите pivot в начало координат. (Не забудьте снова нажать Insert, чтобы вернуться в нормальный режим).
Снова жмем Apply для копирования и, если все в порядке, сбрасываем параметры в значения по умолчанию (Edit=>Reset Settings), а затем закрываем Option Sox.
Создайте NURBS-сферу и поместите ее в центр колеса. Эстетствующие маргиналы могут развернуть ее вокруг оси Z на 90 градусов и установить Degree=Linear для makeNurbsSphere. Совсем уж дизайнеры могут также задать spans=3 и rotateY=22.5.
В Outliner выберите все объекты, относящиеся к колесу, и удалите историю.
Сделайте новую группу (Edit=>Group).
Переименуйте ее в Wheel_1.
Теперь надо поставить колесо на место.
В Outliner выберите группы Base и Cabin.
В Channel Box установите Visibility=on.
Выберите группу W h e e l l, отмасштабируйте и переместите на место первого колеса.
Теперь перед нами стоит задача размножить колесо вдоль паровоза, не зная заранее расстояния между соседними копиями.
Нажимаем Ctrl-d и сдвигаем полученную копию на новое место.
Чтобы получить следующую копию с таким же смещением, нужно воспользоваться операцией Edit=>Duplicate with Transform.
Смысл этой операции состоит в создании копии объекта и применении к нему всех трансформаций, которые были произведены над исходным объектом с момента последнего копирования. Эта операция незаменима при изготовлении всяких лестниц, спиралей и прочих декораций.
Теперь надо получить симметричный ряд колес. Быстрее всего это сделать при помощи дополнительной группировки и отрицательного масштабирования, пользуясь тем, что pivot новой группы по умолчанию устанавливается в начало координат.
Объедините все три группы (Wheel1, Wheel2, Wheel3) в новую группу и назовите ее WheeLsLeft. Скопируйте ее (Edit=>Duplicate).
В Channel Box задайте scaleX=-1 и переименуйте группу в WheelsRight.
Все хорошо, однако некоторые дотошные умы, смущенные отрицательным масштабом могут заметить, что если выбрать два симметричных колеса и попытаться их покрутить, то направления вращения у них будут разные.
Это и есть следствие махинаций с масштабом. Для того, чтобы избавиться от «вывернутости»
масштаба, надо применить к группе WheelsRight операцию Freeze, которая сбрасывает все значения атрибутов translate, rotate и scale, оставляя при этом объект на месте, как будто бы он только что был создан в такой позиции и с таким размером. (Подробнее о Freeze Transformations и ResetTrans formations читайте во главе про изнанку MAYA.) Выберите группу WheelsRight и выполните Modify=>Freeze Transformations. Это решит проблему отрицательных вращений.
Объедините все четыре группы (Base, Cabin, WheelsRight, WheelsLeft) в новую группу назовите ее Train.
Сохраните файл (train05.ma).
Паровоз готов, займемся железной дорогой.
Спрячьте группу Train.
Выберите Option Box для CV Curve Tool и установите Curve Degree=3 Cubic.
Постройте кривую пути для паровоза.
По поводу прокладывания пути для железной дороги есть весьма поучительная история из реальной жизни.
Мой хороший друг Олег Булгак поехал работать по распределению в Новый Уренгой.
Работать ему пришлось на разных объектах, в том числе и на строительстве железной дороги.
И котя в его обязанности никак не входили задачи проектирования, однажды он был застигнут неопределенного рода начальством с безапелляционным предложением проложить маршрут для очередного участка железной дороги между местных болот. На робкие возражения, что, мол, не обучен и, типа, некомпетентен, последовал убойный аргумент: «Вы там штаны протирали пять лет, вот и покажите, на что способны! А то кому же еще план рисовать да бумагу марать, инженеры разные!" Вместо «разныя» подставлялись различные прилагательные, характеризующие степень компетентности в инженерном деле. Выхода не было, дело пахло скандалом, начальство пахло перегаром, и Олег, просидев несколько часов над секретным планом окрестных топей и болот, начертал дрожащей рукой кривую третьего порядка, ставшую впоследствии следующим участком железнодорожной магистрали. Дождаться конца строительства Олегу, к счастью, не довелось, и скоро он вернулся в менее сибирскую Молдавию. Однако через несколько лет ему пришлось ехать по той самой железной дороге. Всю дорогу скорый поезд мчался среди безлюдной местности, практически обгоняя свой собственный шум. Однако в районе знакомых болот состав вдруг сбросил скорость и стал медленно и осторожно красться между кустиков осоки и кочек моха, подобно змее, подбирающейся к добыче. Добыча, видать, была пугливая, потому что тащился поезд довольно долго. Однако затем, как ни в чем не бывало, весело рванул в направлении пункта назначения. Бывалый Олег связал было такое странное поведение поезда с состоянием здоровья машиниста и его помощника, однако все-таки поинтересовался у соседей о причинах столь значительной задержки. Соседи в незатейливых выражениях быстро объяснили, что пару лет назад какой-то шибко умный инженер из Москвы проложил здесь железнодорожный маршрут ТАК, что любой поезд сходит с рельс, если движется быстрее пешехода. Далее следовали слова благодарности этому инженеру и его родителям. Олег скромно промолчал, избегая лучей славы, однако поклялся больше не заниматься железнодорожным делом.
История не только реальная, но и поучительная, притом применительно к компьютерной графике. Если вы рисуете траекторию движения или, тем более, путь для паровоза, избегайте внезапных поворотов и резких изгибов. Вращение объекта на таких поворотах будет дерганым.
Кроме того, при попытке сделать копию кривой с отступом (offset curve), внутри резких изгибов будут появляться острые углы. Поэтому старайтесь рисовать траектории движения максимально падкими, если только это не противоречит замыслу «жесткого» движения.
Выберите построенную кривую и выполните Edit Curves=>Offset=>Offset Curve.
Это создаст кривую, «отступающую» от исходной на фиксированное расстояние (в данном случае, distanced, как следует из Channel Box). Такую копию невозможно получить, просто масштабируя кривую, так как точки новой, «отступающей» кривой сдвигаются по нормали к исходной, а не относительно центра масштабирования.
Снова выберите первую кривую и снова выполните Edit Curves=>Offset=>Offset Curve.
В Channel Box установите distance=-1. Это создаст «отступ» в другую сторону.
Направляющие для рельс готовы, осталось изготовить профиль и запустить его по направляющим.
Перейдите в камеру front.
Откройте Option Box для CV Curve Tool и установите Curve Degree=Linear.
Постройте профиль вокруг начала координат с помощью привязки к сетке.
Уменьшите кривую. Установите scale=0.2; 0.2;0. Выберите построенную кривую профиля, а потом одну из полученных через Offset криви (порядок выбора, как обычно, важен).
Откройте Option Box для Surfaces=>Extrude.
Установите параметры по «правилу правой руки» - для первых четырех параметров должны быть установлены крайние правые опции (Tube, At Path, Component, Profile Normal). В этом случае получается «хороший» и предсказуемый extrude.
Нажмите Apply.
Снова выберите кривую профиля и вторую кривую и снова нажмите Apply. Закройте Option Box. Профиль слишком велик. Воспользуемся Construction History.
Снова выберите профиль и установите все scale-атрибуты в 0.1.
Если вас устраивает размер полученных объектов, спрячьте профиль.
Займемся шпалами.
Лучшая шпала в мире - это полигональный куб. Создайте его и задайте приблизительные Предварительные размеры (Scale = 0.3; 0.8; 3.0).
К сожалению, «прогнать» поверхность вдоль пути с помощью операции Extrude невозможно.
Необходимо размножить поверхность вдоль пути. Такая задача решается с помощью анимации. То есть сначала надо запустить шпалу вдоль пути, а потом в каждом втором или третьем кадре снять с нее копию. В этом случае некоторые методы анимации можно рассматривать как инструменты моделирования.
Установите на Range Slider диапазон анимации равным 100 кадрам.
Выберите шпалу, а затем кривую между рельсами (порядок, как ни странно, опять важен В основном меню выберите Animate=>Motion Paths=>Attach to Motion Path.
Шпала «насадилась» на путь и при нажатии кнопки Play на TimeLine весело бегает по пути Недостаток один - она насадилась на путь своим pivot'OM, который расположен прямо в центре шпалы. Попробуем сдвинуть pivot прямо на анимированной шпале.
Нажмите Insert и тяните pivot вверх!
Чтобы скомпенсировать смещение вверх вынужденного оставаться на пути пивота, ш а а пл смешается вниз.
Загнав шпалу под рельсы, снова нажмите Insert.
Теперь осталось снять копию шкалы в каждом третьем кадре. Трудолюбивые умы могут сделать это и вручную, однако мы воспользуемся операцией Snapshot.
Выберите шпалу.
Откройте Option Box для Animate=>Create Animation=>Snapshot.
Установите диапазон Time Range=Time Slider. Это определит диапазон выполнения копирования равным диапазону анимации.
Задайте параметр Increment=3, это установит каждый третий кадр для копирования анимированного объекта.
После выполнения операции Snapshot вдоль пути возникнет последовательность из шпал, а в Outliner появится snapshot1 Group.
Коль скоро мы вооружились передовыми знаниями по запусканию объекта вдоль пути, поставим паровоз на рельсы. Залезем немного в анимацию.
В Outliner выберите группу Train и покажите ее (например, установите visibility=on).
(масштабируйте паровоз приблизительно так, чтобы он вставал на рельсы. (Пользуйтесь только центральным манипулятором). Не обязательно точно подбирать размер, это можно сделать позже.
Перемещать паровоз тоже необязательно: MAYA сама сделает это.
Выберите группу Train, затем центральный путь.
Выполните Animate=>Motion Paths=>Attach to Motion Path.
Засада! Паровоз, конечно, бодро ездит по пути. Но как-то... боком.
Очевидно мы использовали установки по умолчанию и запустили паровоз по пути «носом вперед». Правда, не определили, где у него «нос». Глядя на манипулятор Scale Tool, можно понять, что локальная ось X паровоза направлена вбок, а ось Z - в «нос».
В Attribute Editor можно разыскать закладку для ноды motionPath1, отвечающей за присоединение паровоза по пути. Там можно определить, какой локальной осью объект поедет вперед по пути. Установите Front Axis=Z. Паровоз встанет в правильную стойку.
С помощью махинаций с pivot'OM и регулировки размера паровоза установите его на рельсы окончательно.
Запустите анимацию, откиньтесь на спинку кресла и скажите: «Волшебно!». Или «Омерзительно!». В зависимости от настроения. Если вас не веселит безумная шпала, носящаю по пути вместе с паровозом, спрячьте ее.
Пытливые умы, дожившие до запуска паровоза по пути и сохранившие ясность ума, воскликнут:
- А мы же не удаляли историю с тех пор, как строили путь! А если сейчас поредактировать центральную кривую?». Действительно, от центральной кривой зависит множество объекта и рельсы (через offset и extrude), и шпалы (через snapshot) и паровоз (через анимацию). Если в режиме Wireframe выбрать центральную кривую, то на экране порозовеют все объекты. Это означает их зависимость от выбранного объекта.
Попробуйте слегка потащить вверх или вниз несколько контрольных точек центральной кривой. Перестроятся рельсы, обновится путь для паровоза. Только вот шпалы останутся HА местах.
Дело в том, что обновление всей группы скопированных шпал дело непростое и по умолчанию интерактивно не обновляется. Однако вы можете выбрать любую шпалу и выполнить Ammate=>Update Motion Trail/Snapshot, чтобы поставить шпалы на место.
На этом первое сражение с NURBS-поверхностями и кривыми закончено. Нетерпеливые умы, которым очень хочется перейти к анимации или к полигонам, могут пропустить следующую часть битвы. Тем более, что она будет страшно занудная. Однако основные прелести, грабли для наступания, неприятности и ограничения, возникающие при работе со сплайнами будут описаны как раз ниже.
Продвинутое паровозостроение Если вы подумали, что на этом построение паровоза заканчивается, вы, извините, ошиблись. До сих пор было ознакомление с инструментами и операциями моделирования, в духе «ваш первый паровоз в MAYA». Теперь посмотрим, как можно улучшить нашу модель в соответствии в практическими рекомендациями лучших паровозоводов.
А практические рекомендации следующие:
• Избегайте острых углов между поверхностями. Для реалистичной визуализации.
• Старайтесь не применять Trim и Planar (в пределах разумного, без фанатизма), в основном из-за потенциальных дырок на швах.
• Не оставляйте видимыми открытые края поверхностей. Они выглядят как острые грани и режут глаз. Загните или закамуфлируйте их чем-нибудь.
• Не используйте Round Tool и Circular Filet. Они работают медленно, создают тяжелую геометрию, а результат не всегда предсказуем.
Далее следуют некоторые инструкции по улучшению некоторых частей модели. Они призваны продемонстрировать некоторые хитрости сплайнового моделирования и не могут быть рассмотрены как руководство к полной сборке паровоза. Я лишь попытался обозначить часто встречающиеся проблемы и привести методы их решения.
Начнем с котла. То есть с цилиндра. Цилиндр проще создать заново или можно выбрать его и выполнить Edit NURBS=>Untrim.
Закрытие дырки при помощи Planar и Round Tool и борьба с объектами-мутантами - это неспортивно. Закрываем дырку вручную. Сначала вставим несколько (а именно, пять) изопарм на краю цилиндра.
Выберем крайнюю изопарму и одну изопарму недалеко от края и применим операцию In sert Isoparm с опцией Between и количеством, равным четырем.
Получим пять дополнительных изопарм и, соответственно, столько же рядов контрольных точен.
Дальше нам предстоит таскать и масштабировать ряды контрольных точек. Это удобно делать в камере side, выбирая ряды точек с помощью компонентов Hull. Будьте внимательны таскать будем только по оси Z, а масштабировать строго за центральный манипулятор.
Выбираем крайний ряд точек и сжимаем его.
При помощи стрелки вправо выберите второй ряд точек. Нажимите «х» для привязки к сетке и тащите второй ряд влево, пока он не прилипнет к сетке в том же месте, где находится первый ряд.
Масштабируйте его так, чтобы верхняя точка была немного ниже края цилиндра.
Выбирайте следующий ряд и проделайте с ним аналогичные действия, только сжимами поменьше.
Следующий ряд просто выбираем и сдвигаем влево, не масштабируя. При этом уже возникав довольно хороший скругленный угол.
Выбрав следующий ряд и придвинув его (без привязки) к краю, можно отрегулировать степень скругления.
Дальнейшую настройку скругления можно производить при помощи двух рядов точек «справа» от угла (их нужно перемещать) и двух рядов «внутри» угла (их надо масштабировать).
Совет. Часто бывает полезно включить опцию отображения изопарм в закрашенном, или текстурированном режиме Это можно сделать с помощью меню в понели камеры Shading =>Shade Options= >Wireframe on Shaded.
Продолжим работу с конусом. В прошлый раз мы использовали Circular Fillet и могли регулировать только радиус без возможности контролировать положение границ «воротника»
между конусом и цилиндром. Сейчас пришьем конус к цилиндру при помощи Freeform Fillet. Эи способом часто пришивают конечности к туловищу (точнее пришивали, пока сплайны не вышли из моды в области органического моделирования).
Берем конус (translateX=3.5, translateZ=3.5, rotateX=180).
Выбираем изопарму в том месте, где будет начинаться сочленение, и применяем Ей NURBS=>Detach Surfaces.
Удаляем нижнюю часть.
Несмотря на это, для верхней половины можно изменять «линию отреза» с помощью атрибута Parameter ноды detachSurface.
Наметим границу на цилиндре, к которой будем пришиваться. Выберите нижнюю изопарму на остатке конуса и выполните Edit Curves=>Dupticate Surface Curves. Это создаст копию изопармы как обычную кривую, которую мы тут же спроектируем на цилиндр. Если кривая выбрана, выберите дополнительно цилиндр. Перейдите в камеру top и выполните Edit NURBS=>Project Curve on Sur face с установками по умолчанию.
В перспективной камере на цилиндре появятся две кривые, сверху и снизу. Нижнюю кривую нужно удалить. Теперь надо выбрать оставшуюся спроектированную на цилиндр кривую и дополнительно нижнюю изопарму остатка конуса, а затем выполнить Edit NURBS=>Surface Filet=>Freeform Fillet.
Freeform Fillet подобно операции Loft создает поверхность, проходящую через де в кривые. Однако исходные кривые для Freeform Fillet должны быть «поверхностными кривыми»
(изопармами, краями тримированных дырок и т. д.) и поэтому, в отличие от Loft, результирующая поверхность гладко подходит к кривым.
Пытливые умы могут выбрать в Outliner кривую, скопированную с нижней изопармы конуса, отцентрировать ей pivot (Modify=>Center Pivot) и отмасштабировать ее, влияя таким образом на радиус нижнего сочленения.
Понятно, что можно даже придать ей любую форму, которая через проекцию будет влиять на нижнюю границу.
Некоторые неутомимые умы, глядя на то, как хорошо совпадают сетки конуса и «воротника», могут вознамериться применить операцию Attach к этим двум поверхностям. Однако результат применения этой операции с опцией Blend приводит к плачевным результатам.
Последствия параметризации Виной тому странная параметризация поверхности сочленения (ее можно наблюдать в At tribute Editor). Дело в том, что операции, создающие Fillet, порождают параметризацию Chord Length, и попытка сшить такую поверхность с другим объектом не приводит к успеху. Надо просто изменить параметризацию поверхности на Uniform.
Для этого достаточно применить к ней Rebuild Surfaces с опциями Rebuild Type=Uniform, Parameter Range=0 to #Spans, Keep=CV.
После этого применение операции Attach (с опциями Blend, Insert knot=On, Parameter=0.5, Keep 0riginal=Off) проходит совершенно безболезненно для конуса и «воротника».
У получившейся поверхности довольно богатая Construction History. Например, можно разыскать в Attribute Editor ноду ffFiletSrf, отвечающую за построение Freeform Filet и отредактировать атрибуты Depth и Bias, корректирующие форму сочленения.
Иногда требуется вырезать дырку под конусом, но в нашем случае это будет лишней работой. Это несложно сделать, так как замкнутая кривая на цилиндре уже существует и операция Trim выполняется в один щелчок мыши.
Как и раньше, если вы удовлетворены результатом, Construction History можно удалить вместе с кривой для проектирования.
Займемся шапкой для трубы. Как и раньше, выделите верхнюю изопарму конуса.
Заходите в Option Box операции Surfaces=>Bevel Plus.
В разделе Outer Bevel Style выберите Convex Crease, а в закладке Output поставьте Output Geometry=Nurbs. Нажав кнопку Bevel, получите шапку для конуса, причем форму шапки можно менять в Attribute Editor, но с одним условием: никаких острых углов.
Шапку надо пришить к конусу. Выбираем обоих.
Далее Attach (Method=Blend, Insert knot=On, Parameter=0.1, Keep Original=Off).
Совет. Не оставляйте открытые края поверхностей видимыми. Если вы знаете, что в процессе анимации открытый край поверхности попадет в камеру, обработайте его, Загните его, запустите вдоль края что-нибудь типа трубки, в общем, прикройте его любым способом.
Воспользуемся этим советом. Край трубы надо утащить внутрь.
Выбирайте верхнюю, последнюю изопарму.
Скопируйте ее: Edit Curves=>Duplicate Surface Curves.
Выполните Modify=>Center Pivot.
Сожмите окружность немного.
Теперь вместе с окружностью выберите верхнюю крайнюю изопарму и выполните iurfaces=>Loft. В Attribute Editor или Channel Box задайте для Loft атрибут Section Spans равным пяти, это добавит объекту гибкости.
Удалите внутреннюю кривую, а затем при помощи Hull постепенно утаскивайте вниз кольцевые ряды контрольных точек, начиная с внутреннего.
Если попытаться опять сшить при помощи Attach две оставшиеся поверхности, то MAYA запутается в краях поверхностей.
Помогите ей: выберите примыкающие друг к другу изопармы на обеих поверхностях (используя Shift и перетаскивание мышкой) и выполните Attach с прежними установками.
Труба готова. Аналогичные действия по разрезанию и «приклеиванию» сферы предоставляются вам для самостоятельной работы. Сохраненный на этом этапе файл называется trainNew1.ma.
Займемся звездой. Звезда нас, в принципе, устраивает. Но если рассматривать ее выпуклые ребра как жесткие, то могу предложить оригинальный способ их сгладить. Напомню, что звезда была сделана из конуса первой степени. Для сглаживания надо перевести этот объект в поверхность третьей степени.
Выберите звезду и откройте Option Box операции Rebuild.
Установите Rebuild Туре в Bezier, остальные параметры оставьте по умолчани Результирующая поверхность будет иметь то же количество изопарм, но каждая из них будет иметь multiplicity=3, потому что выбран тип Bezier и степень поверхности установлена в Cubic.
После операции Rebuild контрольные точки и Hulls равномерно покрывают поверхность.
Идея состоит в том, чтобы по обеим сторонам жестких ребер надо вставить дополнительные изопармы, а «жесткую» изопарму удалить.
Если выбрать изопарму, идущую вдоль ребра, то в Script Editor, можно увидеть запротоколированную команду типа select-г nurbsCone2.v[25.2] ;
Имя конуса, естественно, может отличаться от вышеприведенного. Число 25.2 соответствует значению параметра V, определяющему именно эту изопарму.
Если же выбрать две изопармы рядом с предыдущей, то в Script Editor появятся команды типа Если мы хотим строго симметрично выбрать две таких изопармы рядом с угловой, мы должны отредактировать и выполнить эти две команды, так, чтобы значения в квадратных скобках были «симметричны» относительно 25.2. Например 25.2±0.05.
Выделяем две последние команды в верхней части Script Editor и перетаскиваем их в нижнюю часть Script Editor.
Редактируем:
И выполняем (Ctrl+Enter).
После этого выполняем операцию Insert Isoparm (At Selection, Set to, Multiplicity=1).
Теперь можно поднаехать на ребро, выбрать при помощи Hull угловой ряд точек и удалить его. Ряд точек удаляется просто нажатием клавиши Delete.
В результате, ребро сгладится, а аналогичную операцию придется проделать еще с четырьмя ребрами. Возможно, вам понадобится калькулятор.
На данном этапе сцена сохранена как trainNew2.ma.
Поработаем с историей.
Надо заметить, что заглянув в Outliner можно обнаружить некоторое количество пустых групп, оставшихся от Bevel и других операций. Однако эти группы, несмотря на отсутствие видимых форм внутри них, не пустые. Они содержат так называемые intermediate objects, то есть невидимые промежуточные объекты, не удаленные ради сохранения Construction History.
Примечание. В Attribute Editor в разделе Object Display для ноды nurbsSurface есть атрибут определяющий «промежуточность» объекта. Не надо его трогать! Он устанавливается автоматически.
Если удалить историю для всех объектов в сцене, а это то, что мы хотим сделать прямо сейчас (Edit>>Delete All by Type=>History), все пустые группы исчезнут автоматически. Если что-то и останется, можно «добить» это вручную. Останется всего четыре поверхности и д е в «поверхностные» кривые, которые тоже следует удалить.
Это несколько проще (по крайней мере понятнее), чем борьба с объектами-мутантами, порождаемыми Round Tool и Circular Fillet.
Сцена после удаления Construction History сохранена как trainNew2noHistory.ma.
Перейдем к кабине. Сделать NURBS-кубик с скругленными краями в MAYA - это довольно веселое занятие, в ходе которого вылезают все прелести ограничения NURBS-поверхностей на произвольную топологию.
Наверное, проще сделать кубик в отдельном файле, а потом использовать его как заготовку для будущих кубических объектов. Если вы очень торопитесь, можете пропустить этот тип теоретический пример. Тем более, что с помощью полигонов такая задача решается в десять р з а быстрее.
Моделирование хорошего сплайнового куба Данный пример носит академический характер и служит не столько для изготовления реальной заготовки для кабины паровоза, а для обсуждения возможностей и ограничений некоторых инструментов сплайнового моделирования. Построить куб со сглаженными краями и углами можно десятком способов, причем предназначение и дальнейшее использование такой модели могут определять способ ее изготовления с точки зрения экономии временных затрат, хотя практическая задача состоит обычно в том, чтобы модель хорошо выглядела в конкретной сцене или в конкретном ракурсе, теоретическая задача этого раздела состоит в построении куба со сглаженными краями с возможностью независимого изменения размеров куба и радиуса скруглений. И с сохранением Construction History и контролем непрерывности на швах между поверхностями.
Предвижу упреки в непрактичности. Как можно тратить на простой кубик десятки страниц Может, лучше построить человеческую голову?
Во-первых, лучше кубик.
Во-вторых, кубик совсем непростой.
В-третьих, вы можете прочитать документацию и даже сделать массу упражнений на применение операций Fillet или Square, однако вы практически нигде вы не обнаружите акцентирование на информации о том, что первая создает кривую параметризацию, а вторая не обеспечивает произвольную точность. Или сведений о том, как с этим бороться.
Создайте NURBS-куб по умолчанию. Напомню, что это - группа из шести плоскостей.
Выберите шесть плоскостей прямо на экране.
Выполните Modify=>Center Pivot.
Выберите Scale Tool и сожмите немного все плоскости одновременно.
Далее надо сделать Freeform Fillet между всеми соседними краями плоскостей.
Для того, чтобы удобно было выбирать соседние изопармы, нажмите F8, отключите выбор точек в Selection Masks и включите выбор изопарм.
Выбирайте последовательно пары соседниех изопарм и применяйте к ним операцию Freeform Fillet.
Меню Edit NURBS=>Surface Fillet удобно при этом оторвать.
Старайтесь двигаться по часовой стрелке и от боковых граней к горизонтальным для единообразного направления поверхностей.
Для закрытия «уголков» используется операция построения поверхности Square.
Эта поверхность использует три или четыре пересекающихся кривых и натягивает на них «каркас». Особенность этой поверхности заключается в том, что если кривые-образующие являются «поверхностными» кривыми (типа изопарм), то Square гладко стыкует края с окружающими поверхностями.
Выбирайте изопармы на краях «уголков» и применяйте Surfaces=>Square.
Особенность построения состоит в том, что построение Square зависит от порядка выбора кривых. Иногда поверхность просто «переглючивает» (точнее, перекручивает). В этом случае надо просто выбрать изопармы в противоположном направлении. Кроме того, методом тыка старайтесь выбирать изопармы так, чтобы поверхность строилась полюсом вверх. (Я выбирал, начиная c левой изопармы, по часовой стрелке для верхних углов и против часовой стрелки, для нижних).
В принципе куб готов. Благодаря Construction History, можно даже регулировать радиус скругления и размер куба.
В Outliner выберите шесть плоскостей входящих в группу куба и при помощи Scale Tool порегулируйте зазор между плоскостями и, как следствие, радиус склеивания. Если же выбрать куб как группу, то можно менять размеры и пропорции самого куба.
Однако если вы сделали зазор слишком маленьким, все угловые Square-поверхности вдруг, начинают исчезать с истошными сообщениями об ошибке. Дело опять в параметризации.
Дело в том.что операция Freeform Fillet создает поверхности с Chord Length параметризацией.
Поэтому значение параметра для крайних изопарм Fillet-поверхностей, по которым строится Square, постоянно меняется при масштабировании плоскостей. Construction History не может работать в таких постоянно меняющихся условиях. Рецепт состоит в том, чтобы перестроить все Fillet-поверхности и задать им Uniform параметризацию. К сожалению, все «уголковые» Squareповерхности не выдержат такого обращения и их придется удалить и построить заново.
Выбираем все Fillet-поверхности и делаем Rebuild (Uniform, Keep CV, Parameter Range=0 to #Spans), чтобы задать Uniform-параметризацию, не трогая контрольные вершины.
Теперь крайние изопармы этих поверхностей имеют всегда фиксированной значение.
Постройте заново все угловые Square-поверхности.
Теперь при масштабировании плоскостей все остается в порядке. Если вдруг на совсем узких зазорах углы начинает «скручивать», это можно исправить уменьшением значения атрибута End Point Tolerance (точность построения) ноды squareSrf.
Итак, построенный куб состоит из шести плоскостей, двенадцати Fillet-скруглений, к которым применена операция Rebuild, и восьми Square-уголков, проведенных через края округлений. Construction History не удалена и позволяет регулировать зазор и масштаб куба.
Сохраняем файл как roundedCubel.ma.
Казалось бы, все. Можно импортировать сделанный куб в сцену с паровозом, задавать размеры и положение, резать дырки и т.д. Те, кто устал от параметризации и прочих нехудожественных подробностей, могут так и сделать и перейти к следующему разделу (главе, книге). Однако для пытливых умов - еще немного деталей.
Если отрендерить крупным планом угол такого куба, то обнаружатся некоторые дырки на швах между поверхностями.
Дело в том, что при рендеринге все NURBS-поверхности разбиваются на полигоны. Эо процесс называется теселяцией. При моделировании в сплайнах часто приходится помнить и следить за тем, как поверхности теселируются.
Кстати, Maya Software Render и Mental Ray for Maya используют различные методы теселяции объектов. Mental Ray производит более интеллектуальный анализ кривизны поверхности, и зачастую дополнительное вмешательство не требуется.
Однако необходимо уметь контролировать и влиять на процесс теселяции для того, чтобы иметь представление, как сплайновая модель будет выглядеть на финальном изображении.
Совет. При слишком близких подъездах к объекту MAYA начинает отсекать детали, находящиеся очень близко к камере. Точнее отсекать начинает сама камера, которая имеет соответствующие атрибуты, определяющие дальнюю и переднюю плоскости отсечения. Чтобы видеть близлежащие детали, выберите камеру, откройте Attribute Editor и в закладке для shape, уменьшите значение Полигоны, на которые NURBS-объект разбивается при рендеринге, можно увидеть прямо на экране. Для этого в Attribute Editor надо открыть во второй закладке раздел Tesellation и ВКЛЮЧИТЬ галку Display Render Tessellation. К сожалению, отображаются только полигоны для Maya Software Render. Для каждого объекта, степень теселяции задается индивидуально, то есть локально Чтобы определить критерии разбивки на полигоны для всей сцены целиком, то есть глобально есть пункт меню Render=>Set NURBS Tessellation.
По умолчанию, для каждого объект качество теселяции, то есть степень подробности разбиения на полигоны, задается в условных единицах «лучше-хуже», определяемых атрибутами UV Division Factor, а необходимость добавлять больше полигонов в местах большей кривизны управляется предустановками атрибута Curvature Tolerance. (Mental Ray использует только этот атрибут).
Можно пытаться «задирать» эти атрибуты вверх, чтобы получить настолько плотные сетки, ч о дырки на швах перестанут быть видны, но такой подход нельзя назвать особо эффективным и экономным, особенно при работе с мелкими деталями.
Для того, чтобы управлять, как именно происходит разбиение на полигоны, можно включить метод неавтоматической теселяции (раздел Advanced Tessellation, галка Enable Advanced Tessel lation). Используя этот метод, можно задать, на сколько полигонов разбивается каждая ячейка сетки из изопарм. Другими словами, на сколько отрезков разбивается каждый сегмент между соседними изопармами. (Дополнительные подразбиения производятся после этого на основе критериев из раздела Secondary Tessellation Attributes.) В нашем случае поверхности будем называть их теперь Fillet (продольные скругления) и Square(углы) построены таким образом, что изопармы соседних объектов как бы «втекают»
друг в друга. Это показатель хорошего качества стыковки поверхностей, и надо всегда стремиться обеспечить такое совпадение изопарм на краях.
Поэтому если для каждой поверхности задать одинаковое количество отрезков, на которые разбиваются сегменты между изопармами, то полигоны на краях будут просто иметь одинаковые ребра.
Будем использовать число 3 по умолчанию для атрибутов Number U/V, поэтому просто включите галку Enable Advanced Tessellation для всех поверхностей.
Теперь при рендеринге исчезнут дырки, возникающие в результате различной теселяции на краях.
Совет. Чтобы быстро установить значение атрибута, доступного только в Attribute Editor сразу для многих поверхностей, можно использовать редактор Window=>Ceneral Editors=>Attribute Spread Sheet.
Артефакты, различимые на нижней границе «уголков», связаны с математической точностью построения поверхности Square, которой недостаточно для точного совпадения границ поверхностей. В этом можно убедиться, включив режим отображения контрольных точек и сильно «наехав» на границу между поверхностями.
Очевидно, что контрольные точки не совпадают, следовательно не совпадают и края поверхностей. Операция Square не идеальна и тоже имеет свои маленькие слабости.
Дело в том, что по умолчанию края соседних поверхностей подгоняются друг к другу так, чтобы касательные к поверхности на этих краях совпадали. Если вы откроете Attribute Editor, то в закладке для squareSrf1, вы можете найти раздел Continuity (непрерывность, гладкость), в котором задаются условия гладкой стыковки краев поверхности.
По умолчанию, метод вычисления гладкости стыковки (Continuity Туре) определен как Tangent. Этот метод «честно» пытается гладко состыковать края поверхностей, причем ему это не всегда удается, так как условие гладкости на стыках является довольно сильным. Об этом свидетельствуют галки в разделе Continuity Passed (Выполнение условия гладкости), показывающие, на каких краях поверхности Square удалось добиться выполнения гладкой стыковки. В нашем случае галка напротив Continuity Passed 2 отсутствует, что означает: на второй (нижней) границе MAYA не смогла (ну, не смогла, и все тут!..) идеально точно состыковать края поверхностей. Можно дополнительно увеличить точность вычислений вдоль границ путем увеличения атрибута Curve Fit Checkpoints, однако добиться полного успеха все равно не удастся, и кроме того, это повлечет за собой появление дополнительных изопарм, повлияет на тесселяцию и пр.
В данном случае имеет смысл изменить метод стыковки на более простой и установкить для всех трех границ Continuity Туре = Implied Tangent (неявный тангенс). Этот метод более прост и стыкует поверхности не так математически строго, как метод Tangent, но визуально вполне приемлемо. Кроме того, он позволяет избежать разъезжания границ и появления артефактов.
Примечание. Если вы собираетесь использовать Renderman for Maya для просчета сцены, то вам не надо заботиться о тесселяции, так как последний не использует полигоны при просчете сплайновых поверхностей. Однако точность прилегания краев поверхностей друг к другу необходимо обеспечивать, поэтому для бесшовности картинки придется применять метод Continuity Туре = Implied Tangent.
В большинстве практических случаев на все эти мелкозернистые детали можно закрыть глаза. И поэтому можно подвести промежуточный итог, и сказать, что практически идеальный куб встроен, Construction History по-прежнему позволяет менять зазор, масштабируя первоначальные стенки куба, теселяция на швах выбрана адекватным образом.
Проверяем. В Outliner выбираем первоначальные грани куба и неистово масштабируем их.
Кубик не должен разъезжаться. Рендерим. Если дырок нет, сохраняем файл (результат в roundedCube2.rna). Если дырки есть, моем руки и делаем все заново.
Осталось подготовить файл для будущего использования.
Выберите все построенные Fillet и Square и сгруппируйте их. Назовите группу Corners.
После этого перетащите средней кнопкой группу Corners и бросьте ее на группу nurbsCube1. Теперь группа nurbsCube1 содержит в себе все поверхности и полностью управляет нашим кубом. Попробуйте масштабировать группу nurbsCube1. Засада! Все разъехалось.
Это, естественно, происки Construction History. Угловые поверхности получают двойное масштабирование - от плоскостей и от себя лично.
А жаль. Так хорошо было бы иметь одну группу для всей модели.
Ищем решение. Оно скрывается в 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.
Закройте 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поверхностями.