Первые шаги в Maya. Урок 6. Основы NURBS-моделирования. Часть 1

Светлана Шляхтина

Элементы NURBS-модели

   NURBS-примитивы

   NURBS-кривые и NURBS-поверхности

Методы NURBS-моделирования

   Метод вращения

   Метод получения плоских поверхностей

   Метод выдавливания со скосом

Как уже отмечалось, большинство создаваемых в Maya моделей строится при помощи полигональных сеток и NURBS-поверхностей. Последние интерполируют заданную форму в интерактивном режиме и идеальны для генерирования совершенно гладких поверхностей. Моделирование на основе NURBS-кривых отличается большей гибкостью и позволяет создавать любые самые причудливые модели. Вместе с тем NURBS-модели более массивны, сложны в редактировании и дольше визуализируются. С основами использования полигональных сеток вы уже знакомы, а в этом и следующем уроках рассмотрим простые приемы моделирования NURBS-поверхностей.

Элементы NURBS-модели

Любая NURBS-модель представляет собой некий набор NURBS-поверхностей, образованных NURBS-кривыми. Последние, в свою очередь, являются неоднородными рациональными сплайнами Безье (Non-Uniform Rational Bezier Splines, NURBS). Данные кривые описываются математическими формулами — в итоге отпадает необходимость запоминать каждую точку кривой, достаточно знать координаты ее начала и конца и математическую формулу, описывающую кривую. Это позволяет создавать сложные криволинейные поверхности с небольшим числом управляющих вершин (рис. 1) и легко избавляться от грубой огранки объектов, придавая им плавную искривленную форму путем простого увеличения детализации.

Рис. 1. Уровень детализации полигонального шара (слева) и NURBS-шара (справа) — видно, что число вершин у первого шара на порядок больше

Рис. 1. Уровень детализации полигонального шара (слева) и NURBS-шара (справа) — видно, что число вершин у первого шара на порядок больше

Основой NURBS-поверхности являются сплайны, называемые изопараметрическими кривыми (isoparms — изопармы). Данные кривые определяют кривизну поверхности и внешне представляют собой разнообразные линии (как прямые, так и разного рода кривые, а также контуры текстовых символов), форма которых определяется положением управляющих вершин, через которые она проходит  (рис. 2). Основными элементами таких кривых являются управляющие вершины и редактируемые точки (рис. 3). Управляющие вершины задают форму кривой и именно их чаще всего создают при формировании кривой — эти вершины обычно немного отстоят от поверхности и их можно перемещать, вращать и т.д. Первая вершина, обозначающая начало кривой отмечается кубиком, конечная вершина (последняя точка, в которой завершается создание кривой) никакой отличающей маркировки не имеет. Кроме того, при помощи маркера в виде маленькой буквы «u» отображается направление кривой (указывается не во всех проекциях), которое важно знать при выполнении ряда операций моделирования. При необходимости можно ограничить перечень отображаемых элементов NURBS-поверхности, если воспользоваться командой Display=>NURBS Components (Отображение=>NURBS-компоненты).

Рис. 2. NURBS-поверхность с отображением изопараметрических кривых и управляющих вершин

Рис. 2. NURBS-поверхность с отображением изопараметрических кривых и управляющих вершин

 

Рис. 3. Основные элементы кривой

Рис. 3. Основные элементы кривой

 

Для работы с NURBS-кривыми и NURBS-поверхностями предназначены командные меню Edit Curves, Edit Nurbs и Surfaces: первая позволяет редактировать кривые, вторая — создавать из кривых NURBS-поверхности, а третья — редактировать и преобразовывать их.

В начало В начало

NURBS-примитивы

Самый простой вид NURBS-поверхностей — это NURBS-примитивы, представленные объектами Sphere (Сфера), Cube (Куб), Cylinder (Цилиндр), Cone (Конус), Plane (Плоскость) и Torus (Topус). Как и другие типы примитивов, NURBS-примитивы обычно используются в качестве основы для формирования более сложных моделей и создаются командой Create=>NURBS Primitives либо выбором нужного примитива на вкладке Surfaces (Поверхности) панели Shelf. Выполнение многих операций редактирования NURBS-примитивов на уровне объектов очень сильно напоминает соответствующие действия в отношении других типов примитивов, хотя списки параметров для NURBS-примитивов более обширны, да и часть параметров отличается. Для примера сравните списки параметров для полигонального и NURBS-торусов (рис. 4):  для последнего дополнительно можно установить значения параметров Start Sweep и End Sweep (определяют, все ли возможные фрагменты примитива будут созданы), параметра Degree (позволяет выбрать между линейным и криволинейным отображением фрагментов поверхности) и т.д.

Рис. 4. Сравнение параметров торусов: полигонального (слева) и NURBS-торуса (справа)

Рис. 4. Сравнение параметров торусов: полигонального (слева) и NURBS-торуса (справа)

Более существенные отличия наблюдаются при редактировании примитивов на уровне подобъектов, так как деформация полигональных моделей в первую очередь связана с изменением ориентации граней, а изменение формы NURBS-поверхностей основано на интерполяции кривых. Для примера попробуем создать яйцо, вначале взяв за основу NURBS-шар, а затем полигональный шар. Создайте NURBS-шар, не снимая выделения, перейдите в режим редактирования вершин, нажав клавишу F9, выделите в проекции Side все вершины сечений, расположенных в верхней половине объекта, и инструментом Move Tool переместите их вверх (рис. 5), а затем инструментом Scale Tool слегка уменьшите радиус соответствующих сечений (рис. 6). Сократите число выделенных сечений на одно снизу и вновь проведите те же самые операции перемещения и масштабирования. Результатом станет получение объекта, по форме близкого к яйцу (рис. 7). А теперь попробуем добиться того же результата, но уже на базе полигонального шара. Создайте такой шар и переключитесь в режим редактирования вершин, нажав клавишу F9. Выделите все вершины сечений, расположенных в верхней половине объекта, и переместите их вверх (рис. 8), затем масштабируйте сечения (рис. 9). Уменьшите число выделенных сечений на одно снизу и вновь проведите те же самые операции перемещения и масштабирования (рис. 10). Если после этого провести рендеринг (рис. 11), то форма объекта получается недостаточно гладкой, хотя деформации  были незначительными. До получения формы яйца также еще далеко — придется  дальше кропотливо двигаться, сокращая число сечений и применяя к выделенным подобъектам операции перемещения и масштабирования, а по окончании еще и дополнительно сгладить полученную поверхность. Так что даже на примере столь простого объекта становится очевидным, что применение NURBS-примитивов существенно снижает трудоемкость моделирования гладких поверхностей.

Рис. 5. Перемещение вершин NURBS-шара

Рис. 5. Перемещение вершин NURBS-шара

 

Рис. 6. Масштабирование вершин NURBS-шара

Рис. 6. Масштабирование вершин NURBS-шара

 

Рис. 7. Яйцо

Рис. 7. Яйцо

 

Рис. 8. Первое перемещение вершин полигонального шара

Рис. 8. Первое перемещение вершин полигонального шара

 

Рис. 9. Первое масштабирование вершин полигонального шара

Рис. 9. Первое масштабирование вершин полигонального шара

 

Рис. 10. Результат повторного выполнения операций перемещения и масштабирования полигонального шара

Рис. 10. Результат повторного выполнения операций перемещения и масштабирования полигонального шара

 

Рис. 11. Визуализированная сцена после двукратного перемещения и масштабирования вершин полигонального шара

Рис. 11. Визуализированная сцена после двукратного перемещения и масштабирования вершин полигонального шара

В случае если речь идет о моделировании объекта с четкими гранями, NURBS-примитивы не помогут — тут требуются приемы полигонального моделирования. Вспомним, например, рассмотренный в 3-м уроке способ моделирования плитки шоколада из полигонального куба, когда достаточно было создать куб (правда, с определенными параметрами — рис. 12), выделить в режиме редактирования граней грани верхней поверхности и применить операцию по их выдавливанию (команда Edit Poligons=>Extrude Face — Редактирование полигонов=>Выдавливание граней) — рис. 13.

Рис. 12. Исходный полигональный куб

Рис. 12. Исходный полигональный куб

 

Рис. 13. Плитка шоколада

Рис. 13. Плитка шоколада

 

Если для достижения той же цели взять за основу NURBS-куб с теми же исходными параметрами, то все окажется совсем не так, поскольку граней у него не существует — вместо них вершины и изопараметрические кривые. Любые манипуляции с вершинами приведут к формированию гладкой поверхности (рис. 14), что не подходит для решения задачи. Если перейти к изопармам, к которым может быть применена операция выдавливания со скосом Bevel (Скос), то результат также будет далек от желаемого (рис. 15 и 16), так как выдавливаться будут изопараметрические кривые, а не внутренние фрагменты плоскости, соответствующие граням. Поэтому выбирать тип примитивов  (равно как и подход к моделированию) нужно в зависимости от типа поверхности (гладкая или ограненная), которую требуется получить.

Рис. 14. Результат перемещения нескольких вершин верхней поверхности объекта

Рис. 14. Результат перемещения нескольких вершин верхней поверхности объекта

 

Рис. 15. Выделение изопараметрических кривых

Рис. 15. Выделение изопараметрических кривых

 

Рис. 16. Результат применения операции Bevel к изопармам верхней плоскости куба

Рис. 16. Результат применения операции Bevel к изопармам верхней плоскости куба

В начало В начало

NURBS-кривые и NURBS-поверхности

Чаще всего NURBS-поверхности моделируются из NURBS-кривых, которые обычно формируются путем последовательного определения вершин или точек редактирования, хотя есть и другие способы — можно получить кривые из дуг, созданных на основе двух или трех указанных вершин (команда Create=>Arc Tools), или применить команду Create=>Text, поскольку текст также может создаваться как NURBS-кривая. Независимо от способа создания кривые не визуализируются, так как применяются только для создания и редактирования поверхностей.

Учитывая, что в большинстве случаев кривые получают посредством определения их вершин или редактируемых точек, то именно данный способ мы и рассмотрим подробнее. Он предполагает использование одного из следующих инструментов, вызываемых из меню Create (Создать):

  • CV Curve Tool (Кривая по управляющим вершинам) — устанавливает управляющие вершины кривой точно в тех точках, где был сделан щелчок мышью, точки редактирования  создаются автоматически на основании управляющих вершин;
  • EP Curve Tool (Кривая по точкам редактирования) — формирует точки редактирования кривой точно там, где были сделаны щелчки мышью; управляющие вершины создаются автоматически на базе точек редактирования;
  • Pencil Curve Tool (Карандашная кривая) — позволяет рисовать кривую, перетаскивая мышь, данный тип кривой отличается созданием очень большого количества точек редактирования и управляющих вершин, что может приводить к сложностям при редактировании.

Построение кривых с помощью первых двух из названных инструментов осуществляется практически одинаково: нужно последовательно указать точки (управляющие вершины или точки редактирования), при этом установка каждой следующей вершины будет приводить к появлению очередного участка кривой. Завершается создание кривых нажатием клавиши Enter. Карандашные кривые создаются путем перемещения мыши при нажатой левой кнопке (форма кривой будет полностью повторять траекторию движения мыши); отпускание кнопки автоматически означает окончание текущей кривой, и при следующем нажатии будет формироваться уже новая кривая. Довольно часто карандашные кривые содержат слишком много лишних точек,  поэтому их приходится упрощать (то есть сокращать количество управляющих вершин), применяя команду Edit Curves=>Rebuild Curve (Редактировать кривые=>Перестроить кривую). Данная команда может быть применена к любым типам NURBS-кривых.

Особенности создаваемых при помощи названных инструментов кривых определяются параметрами Curve Degree и Knot Spacing. Первый параметр задает степень кривизны кривой, второй указывает интервал между узлами и может быть определен только для кривых типов CV Curve Tool или EP Curve Tool. По умолчанию для данных параметров установлены значения, оптимальные для построения большинства кривых, однако при необходимости они могут быть изменены, для чего, выбирая инструмент построения кривой, нужно щелкать на квадратике, находящемся справа от имени инструмента. Независимо от выбора типа инструмента при создании NURBS-кривой следует ограничиваться необходимым минимумом точек (это значит, что если дуга может быть создана тремя точками, значит, именно на трех точках и следует остановиться), в противном случае редактирование моделей может стать затруднительным, а то и невозможным.

Для наглядности попробуем создать кривую инструментом CV Curve Tool (построение кривых другими инструментами осуществляется примерно так же). Перейдите в режим работы с одной из ортогональных проекций (например, с проекцией Front) и примените команду Create=>CV Curve Tool (Создать=>Кривая по управляющим вершинам). Щелкните в определенной точке для создания первой управляющей вершины, которая отобразится маленьким кубиком, обозначающим начало кривой, укажите местоположение второй управляющей вершины и т.д. — обратите внимание, что сегменты кривой появятся только после указания четвертой вершины (рис. 17). Если очередная вершина поставлена неудачно, то ее можно удалить нажатием клавиши Backspace и продолжить создание кривой. Кроме того, в любой момент можно прервать процесс добавления новых вершин и переключиться в режим редактирования, нажав клавишу Insert (о смене режима работы будет сигнализировать изменения вида манипулятора), в котором любая из вершин может быть перемещена. Переместите вершины примерно так, как показано на рис. 18, а затем вернитесь к процессу создания вершин, вновь нажав Insert, и дополните кривую еще несколькими вершинами (рис. 19), завершите процесс нажатием клавиши Enter. Форму кривой с таким же успехом можно изменить и после завершения ее создания, для чего достаточно выделить ее, переключиться в режим редактирования вершин, нажав клавишу F9, и инструментом Move Tool изменить положение тех вершин, что были поставлены неудачно (рис. 20). Кроме того, можно удалить любой из сегментов кривой, выбрав отвечающую за него управляющую вершину или точку редактирования и нажав клавишу Backspace.

Рис. 17. Появление сегментов кривой

Рис. 17. Появление сегментов кривой

 

Рис. 18. Перемещение вершин в процессе создания кривой

Рис. 18. Перемещение вершин в процессе создания кривой

 

Рис. 19. Созданная кривая

Рис. 19. Созданная кривая

 

Рис. 20. Перемещение управляющей вершины

Рис. 20. Перемещение управляющей вершины

Созданные NURBS-поверхности в зависимости от установок, могут отображаться с разным уровнем сглаживания. Он определяется в меню Display=>NURBS Smoothness (Отображение=> NURBS-сглаживание)  только для выделенных объектов. Всего предусмотрено четыре типа сглаживания: Hull, при котором отображается только каркас, Rough,  обеспечивающий грубый набросок модели, а также Medium и Fine, отображающие объекты со средним и высоким уровнем детализации. Для трех последних режимов имеются горячие клавиши — 1, 2 и 3 соответственно. Для примера попробуйте сгладить форму созданной выше кривой, применив команду Display=>NURBS Smoothness=>Fine (Отображение=> NURBS-сглаживание=>Высокое) — рис. 21. При необходимости возможна более тонкая настройка уровня сглаживания при помощи команды Display=>NURBS Smoothness=>Custom (Отображение=> NURBS-сглаживание=>Пользовательское) — рис. 22.

Рис. 21. Результат сглаживания формы кривой

Рис. 21. Результат сглаживания формы кривой

 

Рис. 22. Настройка параметров сглаживания

Рис. 22. Настройка параметров сглаживания

 

Помимо вышеназванных способов коррекции NURBS-кривых имеется еще масса команд для их редактирования, доступных из меню Edit Curves. Основными среди них можно назвать следующие:

  • Add Points Tool — добавление вершин в конец кривой;
  • Reverse Curve Direction — смена направления кривой; на противоположное, что необходимо, когда требуется добавить новые управляющие точки не в конец, а в начало кривой;
  • Insert Knot — добавление указанного числа вершин в середине кривой; количество вставляемых вершин и принцип их добавления регулируются параметрами команды;
  • Curve Editing Tool — включение режима редактирования, позволяющего управлять степенью кривизны сегментов кривой;
  • CV Hardness — заострение сегментов, соответствующих выделенным точкам кривой;
  • Attach Curves — объединение выделенных кривых в одну кривую с формированием связующего их отрезка;
  • Detach Curves — разделение кривой на части в выделенной точке;
  • Open/Close Curves — открытие/закрытие кривой.

Попробуем немного поэкспериментировать с обычной плоскостью и попытаемся так деформировать ее, чтобы после текстурирования она могла быть использована в качестве куска лежащей складками ткани. Создайте обычную NURBS-плоскость и переключитесь в режим редактирования вершин (клавиша F9) — изначально количество ее управляющих вершин невелико и в нашем случае недостаточно (рис. 23). Поэтому вернитесь в режим работы на уровне объекта (клавиша F8) и добавьте еще группу вершин, применив команду Insert Knot (Вставить узлы), — рис. 24. Отрегулируйте положение вершин при помощи инструментов Move Tool и Scale Tool, руководствуясь видом имеющейся текстуры ткани со складками и тем, как планируете разложить эту ткань (рис. 25 и 26). Пока это будут лишь начальные прикидки, так как вид плоскости зависит также  от поверхности, на которую ткань будет положена, а данной поверхности у нас еще нет.

Рис. 23. Исходная плоскость

Рис. 23. Исходная плоскость

 

Рис. 24. Добавление новых вершин

Рис. 24. Добавление новых вершин

 

Рис. 25. Результат деформации плоскости

Рис. 25. Результат деформации плоскости

 

Рис. 26. Визуализация деформированной плоскости

Рис. 26. Визуализация деформированной плоскости

Теперь набросим ткань на некоторую поверхность, например на обычный куб (рис. 27). Создайте куб, откорректируйте в сцене положение обоих объектов, а затем подрегулируйте положение управляющих точек плоскости ткани так, чтобы создавалось ощущение, что ткань ниспадает с поверхности куба (рис. 28 и 29).

Рис. 27. Появление куба

Рис. 27. Появление куба

 

Рис. 28. Окончательный вид деформированной плоскости

Рис. 28. Окончательный вид деформированной плоскости

 

Рис. 29. Ниспадающая ткань

Рис. 29. Ниспадающая ткань

В начало В начало

КомпьютерПресс 1'2007


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует