Первые шаги в Maya. Урок 9. Моделирование с применением подразбиваемых поверхностей

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

Теоретические аспекты

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

Принципы моделирования на базе Subdiv Surfaces

Особенности работы с подразбиваемыми поверхностями

Примеры создания Subdiv-поверхностей

Чемодан

Морская звезда

Рыбка

Ослик

Как мы уже отмечали, большинство создаваемых в Maya моделей строится при помощи NURBS-поверхностей и полигональных сеток. Первые идеальны для генерирования совершенно гладких поверхностей, а вторые больше подходят для моделирования поверхностей, имеющих достаточно выраженные твердые края и грани. Однако существует и третий вид поверхностей — подразбиваемые поверхности, или поверхности с иерархическим разбиением (Subdivision Surfaces). Данный вид объединяет в себе лучшие черты полигональных и NURBS-поверхностей и прекрасно подходит для создания самых разных персонажей, так как позволяет получить объекты с гладкими поверхностями (что характерно для NURBS-моделей), сохранив возможность создавать их вытягиванием из полигональных примитивов, как это принято в полигональном моделировании. Поэтому моделирование на базе подразбиваемых поверхностей зачастую оказывается более предпочтительным, чем традиционное NURBS- и полигональное моделирование, тем более что выбор оптимального типа моделирования (NURBS или полигонального) не всегда очевиден на начальных этапах разработки модели.

Теоретические аспекты

Поверхность с иерархическим разбиением (Subdivision Surface) — это гладкая поверхность, генерирующаяся по некоторой управляющей полигональной сетке, которая может принимать произвольную топологическую форму, как любой полигональный объект, но при этом остается идеально гладкой почти во всей своих точках, как NURBS-поверхность.

Основным преимуществом Subdivision Surfaces по сравнению с NURBS- поверхностью является способность принимать произвольную топологическую форму, при этом поверхность остается единой и имеет сравнительно небольшое количество базовых контрольных вершин. Это достигается благодаря тому, что подразбиваемые поверхности за счет своей внутренней иерархической структуры позволяют динамически увеличивать и уменьшать детализацию моделируемых поверхностей лишь на тех участках, где это необходимо (рис. 1). Таким образом, более сложные в моделировании области с множеством мелких деталей могут иметь больше контрольных вершин, а значит, более тщательно прорабатываться, в то время как однородные плоские области будут ограничены гораздо меньшим числом вершин. Для сравнения стоит напомнить, что для увеличения детализации сплайновых поверхностей приходится вставлять дополнительные изопармы (например, в области глаз при моделировании лица), которые проходят через всю поверхность. Это приводит к добавлению большого количества контрольных вершин не только в тех областях, где это необходимо, но и в других, где это совершенно не требуется, — в итоге модель усложняется. В Subdiv-моделях увеличение детализации производится не путем добавления изопарм, а за счет появления дополнительных управляющих вершин, которые добавляются лишь внутри указанной области.

 

Рис. 1. Фрагмент модели руки, созданной на базе Subdivision Surface и имеющей в различных областях разный уровень детализации

Рис. 1. Фрагмент модели руки, созданной на базе Subdivision Surface и имеющей в различных областях разный уровень детализации

 

Вторым важным преимуществом Subdiv-поверхностей является то, что они позволяют создавать сложные модели в виде полностью непрерывных поверхностей, без швов (одна модель из одной поверхности), в то время как при NURBS-моделировании модель сшивается из отдельных NURBS-поверхностей, что требует немало времени и приводит к ряду проблем, особенно при анимации.

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

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

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

Интуитивно представить математическую модель Subdivision Surface можно, взяв полигональный объект и многократно (в идеале бесконечное число раз) применив к нему операцию сглаживания (команда Polygons=>Smooth — Полигоны=>Сгладить). Полученный результат будет примерно напоминать подразбиваемую поверхность, соответствующую данному полигональному объекту (рис. 2), так как Subdivision Surface считается математическим пределом бесконечного количества полигональных сглаживаний.

 

Рис. 2. Пример дважды сглаженной полигональной модели (слева) и соответствующей ей поверхности с иерархическим разбиением

Рис. 2. Пример дважды сглаженной полигональной модели (слева) и соответствующей ей поверхности с иерархическим разбиением

 

Математически поверхности с иерархическим разбиением содержат бесконечное число контрольных вершин, причем на разных уровнях детализации количество вершин различно и уже конечно (рис. 3). Это означает, что можно воздействовать на модель через разные наборы контрольных вершин (свои для каждого из уровней детализации) — при этом перестраивать поверхность не требуется, достаточно указать лишь нужный набор контрольных точек (соответствующий определенному уровню иерархии). Использование таких иерархических уровней позволяет работать как с грубой аппроксимацией модели, использующей сетку с низким разрешением (базовую сетку), так и с ее более подробными модификациями, базирующимися на сетках с высоким разрешением. С одной стороны, это позволяет выполнять некоторые операции (например, привязку к скелету или определение общих контуров модели) при минимальной детализации, что проще, так как число управляющих точек на базовом уровне невелико, а сделанные изменения гладко интерполируются на другие уровни. С другой стороны, появляется возможность проводить любое сколь угодно мелкое редактирование, пользуясь нужными уровнями детализации отображения данных фрагментов модели на экране. При моделировании переключиться с одного уровня иерархии на другой можно в любой момент.

 

Рис. 3. Вершины поверхности с иерархическим разбиением на разных уровнях детализации: слева — базовый уровень (Level 0), в центре и справа — более детализированные уровни Level 1 и Level 2 соответственно

Рис. 3. Вершины поверхности с иерархическим разбиением на разных уровнях детализации: слева — базовый уровень (Level 0), в центре и справа — более детализированные уровни Level 1 и Level 2 соответственно

По умолчанию Subdiv-поверхность имеет либо один (базовый Level 0), либо два иерархических уровня — Level 0 и Level 1, что зависит от варианта создания поверхности. По мере работы над моделью появляются новые уровни иерархии — всего может быть создано до 14 иерархических уровней (от 0 до 13), но чаще всего достаточно использовать лишь низкие уровни — с 0-го по 3-й. За увеличение уровня иерархии на единицу отвечает команда Refine Selected Components (Повысить детальность выделенных компонентов) из меню SubdivSurfaces или дублирующая ее команда Refine Selected (Повысить детальность) из контекстного меню.

Установка требуемого иерархического уровня осуществляется при помощи команды DisplayLevel (Отображение уровня) из контекстного меню либо через окно каналов (ChannelBox) или редактор атрибутов (AttributeEditor), где за выбор уровня отвечает одноименное поле, — в обоих случаях нужный уровень выбирается из списка уровней (рис. 4). Одновременно редактироваться могут только подобъекты текущего уровня.

 

Рис. 4. Выбор уровня иерархии

Рис. 4. Выбор уровня иерархии

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

Принципы моделирования на базе Subdiv Surfaces

Теоретически можно выделить три метода построения моделей с применением подразбиваемых поверхностей. Самый простой — воспользоваться Subdiv-примитивами: Sphere (Сфера), Cube (Куб), Cylinder (Цилиндр), Cone (Конус), Plane (Плоскость) и Torus (Topус). Как и другие типы примитивов, Subdiv-примитивы обычно используются в качестве основы для формирования более сложных моделей и создаются командой Create=>Subdiv Primitives либо выбором нужного примитива на вкладке Subdivs (Поверхности) панели Shelf.

Однако гораздо чаще грубая основа объекта строится вытягиванием полигонов из полигональных примитивов, а затем при помощи команды Modify=>Convert=>Polygons to Subdiv (Преобразовать=>Конвертировать=>Полигональную сетку в Subdiv-поверхность) преобразуется в поверхность с иерархическим разбиением, отдельные участки которой детализируются и дорабатываются. Правда, стоит иметь в виду, что не любая полигональная сетка может быть преобразована в подразбиваемую поверхность. Например, нельзя создать поверхность с разбиением из полигональной поверхности, которая имеет свободные точки, плавающие ребра или внутренние вершины с двумя совпадающими ребрами, не имеет согласованных нормалей, отличается слоистой топологией (присутствуют грани, расположенные друг над другом и имеющие более двух общих вершин или более одного ребра) и т.д.

Кроме того, можно конвертировать подразбиваемые поверхности из NURBS-объектов, полученных, например, в ходе таких преобразований, как Revolve (Вращение), Loft (Лофтинг), Extrude (Выдавливание), Boundary (Граница), Birail (Поверхность по двум направляющим) и др. Подобное конвертирование осуществляется командой Modify=>Convert=>NURBS to Subdiv (Преобразовать=>Конвертировать=>NURBS-поверхность в Subdiv-поверхность) и может осуществляться по-разному. Самое простое — прямое конвертирование NURBS-модели, но в таком случае полученная Subdiv-модель нередко содержит слишком много полигонов. Кроме того, NURBS-модели часто состоят из нескольких фрагментов, которые не могут быть объединены, — прямое конвертирование их в поверхность с разбиением приводит к созданию нескольких поверхностей, которые потом придется объединять. Поэтому довольно часто вначале все NURBS-фрагменты комбинируются в одну полигональную модель (команды Modify=>Convert=>NURBS to Polygons и Polygons=>Combine), которая после этого упрощается путем уменьшения количества полигонов и слияния внутренних ребер (Edit Polygons=>MergeMultipleEdges). А затем упрощенная полигональная модель преобразуется в поверхность с разбиением. Стоит иметь в виду, что нежелательно конвертировать в поверхности с разбиением NURBS-поверхности с полюсами (например, примитив Sphere), так как получаются поверхности с пропадающими в точках полюсов нормалями — при их рендеринге в области полюсов будет наблюдаться темное пятно.

Довольно часто полученная путем Subdiv-моделирования модель по окончании формирования преобразуется обратно в полигональную сетку или в NURBS-поверхность, для чего используются команды Modify=>Convert=>Subdiv to Polygons и Modify=>Convert=>Subdiv to NURBS соответственно.

При создании поверхностей с иерархическим разбиением необходимо выполнять следующие правила:

  • Начинать построение Subdiv-модели лучше с простой базовой сетки, так как получить грубую аппроксимацию модели на базе полигональной поверхности с небольшим числом полигонов гораздо быстрее, нежели добиться того же результата на сложной полигональной сетке. Как правило, данное условие выполняется автоматически при конвертировании в Subdiv-модель несглаженных полигональных поверхностей или в случае создания ее на базе Subdiv-примитивов. Однако бывают ситуации, когда требуется применить Subdiv-моделирование для уже существующей довольно сложной модели (например, представленной NURBS-поверхностями), тогда перед созданием поверхности с иерархическим разбиением исходную NURBS-модель по возможности упрощают.
  • Создавая исходную модель, которую в дальнейшем предполагается переконвертировать в подразбиваемую поверхность, желательно использовать в ней только четырехугольные полигоны. Дело в том, что в противном случае на нулевом уровне Subdiv-поверхности появятся экстраординарные вершины, в которых сходятся не четыре ребра, а либо большее, либо меньшее их количество (рис. 5), что чревато появлением на поверхности нежелательного рельефа.
  • Необходимо контролировать положение ребер и вершин в исходной геометрии, стараясь располагать их на участках предполагаемого усложнения геометрии объекта, что существенно облегчит дальнейшую работу с моделью. Например, наличие ребер желательно там, где предполагается создавать глаза и рот персонажа, складки на одежде и т.п.

 

Рис. 5. Результат Subdiv-конвертирования модели с четырехугольными (слева) и различными по числу ребер полигонами

Рис. 5. Результат Subdiv-конвертирования модели с четырехугольными (слева) и различными по числу ребер полигонами

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

Особенности работы с подразбиваемыми поверхностями

Предусмотрены два режима редактирования разбиваемых поверхностей (рис. 6): StandardMode (Стандартный режим) и PolygonProxyMode (Режим замещающего полигона). Первый из них позволяет манипулировать (поворачивать, масштабировать, перемещать, анимировать и т.д.) вершинами, ребрами и гранями на любом уровне иерархии. Выбор нужного типа подобъектов осуществляется нажатием следующих клавиш: F9 — для перехода в режим редактирования вершин, F10 — редактирования ребер и F11 — граней, а возврат к режиму редактирования на уровне объекта — F8. Кроме того, в данном режиме возможно увеличение уровня иерархии любого участка поверхности путем создания на нем дополнительных ребер и вершин. Однако следует учитывать, что история создания поверхности в данном режиме не поддерживается.

Переключение во второй режим, PolygonProxyMode, приводит к генерации связанного с Subdivision Surface полигонального объекта, совпадающего с базовой сеткой подразбиваемой поверхности, который можно использовать для косвенного редактирования базовой сетки точно так же, как редактируются обычные полигональные объекты, например можно экструдировать (рис. 7) или удалить грань. История создания поверхности в данном режиме поддерживается.

 

Рис. 6. Представление Subdiv-поверхности в режимах StandardMode (слева) и PolygonProxyMode

Рис. 6. Представление Subdiv-поверхности в режимах StandardMode (слева) и PolygonProxyMode

 

Рис. 7. Экструдирование граней в режиме PolygonProxyMode

Рис. 7. Экструдирование граней в режиме PolygonProxyMode

 

За переключение между данными режимами отвечают команды StandardMode и PolygonProxyMode из меню SubdivSurfaces, предназначенного для управления подразбиваемыми поверхностями. Среди прочих команд данного меню наиболее важны следующие:

  • Full Crease Edge/ Vertex — создать полную складку вершин/ребер; полная складка представляет собой острый выступ на выбранной грани или шип на выбранной вершине;
  • Partial Crease Edge/ Vertex — создать частичную складку вершин/ребер; частичная складка отличается от полной гораздо меньшим перемещением поверхности и применяется для моделирования слабо выраженных складок (например, для очерчивания края губ персонажа);
  • UncreaseEdge/Vertex — удалить складку ;
  • Mirror — зеркально отразить поверхность; используется для получения обычной или зеркальной копии подразбиваемой поверхности с отражением ее по осям X, Y или Z;
  • Attach — объединить выделенные поверхности; объединяемые поверхности на границе слияния должны иметь одно и то же число ребер базовой сетки, в противном случае они скомбинируются, но не объединятся;
  • MatchTopology — сопоставить топологию, что означает подготовку подразбиваемых поверхностей к смешиванию посредством команды Deform=>Create Blend Shape (Деформация=>Создать Blend-форму) — это актуально, например для анимации мимики персонажа;
  • CleanTopology — очистить топологию; данная операция применяется по окончании моделирования и заключается в удалении лишних, неиспользуемых подобъектов на высоких уровнях иерархии, что полезно в плане ускорения работы программы и сокращения размера файла с моделью;
  • Convert Selection to Faces/ Convert Selection to Edges/ Convert Selection to Vertices — конвертировать выделение в грани, ребра или вершины, что удобно для переключения с одного типа подобъектов на другой без длительного повторного выделения;
  • Component Display Level — отобразить следующий (Finer), предыдущий (Coarser) или базовый (Base) уровень иерархии.

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

Для редактирования подразбиваемых поверхностей используются стандартные средства Maya, такие как инструменты Move Tool (Перемещение), Rotate Tool (Поворот) и Scale Tool (Масштабирование). При этом низшие уровни иерархии переносят детализацию на высшие, что позволяет глобально изменять поверхность без потери ее детализации.

Для примера создайте Subdiv-шар, применив команду Create=>SubdivPrimitives=>Sphere (Создать/Subdiv-примитивы/Сфера), — сначала его вид будет далек от шара, так как по умолчанию объект отображается с низким уровнем сглаживания Rough. Поэтому установите средний, а затем высокий уровень сглаживания, последовательно нажимая клавиши 2 и 3 соответственно (рис. 8).

 

Рис. 8. Вид Subdiv-шара при разной степени детальности: слева — грубая, в центре — средняя, справа — высокая

Рис. 8. Вид Subdiv-шара при разной степени детальности: слева — грубая, в центре — средняя, справа — высокая

По умолчанию для Subdiv-поверхностей устанавливается базовый уровень иерархии, в чем несложно убедиться по значению 0 в поле DisplayLevel окна каналов (рис. 9). При помощи команды DisplayLevel (Отображение уровня) из контекстного меню установите иерархический уровень Level 1 — число контрольных вершин увеличится (рис. 10). Следующие уровни иерархии уже придется создавать — попробуйте создать новый иерархический уровень, выделив все вершины объекта и применив команду Refine Selected (Повысить детальность) из контекстного меню (рис. 11).

 

Рис. 9. Шар в режиме редактирования на базовом уровне (Level 0)

Рис. 9. Шар в режиме редактирования на базовом уровне (Level 0)

 

Рис. 10. Вершины, соответствующие иерархическому уровню Level 1

Рис. 10. Вершины, соответствующие иерархическому уровню Level 1

 

Рис. 11. Вершины, соответствующие иерархическому уровню Level 2

Рис. 11. Вершины, соответствующие иерархическому уровню Level 2

Для отдельных вершин или ребер Subdiv-поверхностей можно формировать складки. Для экспериментов сделайте две копии Subdiv-шара. Чтобы оценить, насколько сильно влияние полных складок на поверхность, проведем следующий опыт. Выделите первый шар, нажмите клавишу F9 и произвольным образом перетащите одну из вершин — образуется тупообразный шип. Выделите второй шар, нажмите клавишу F9, выделите произвольную вершину и создайте для нее полную складку, выбрав в меню Subdiv Surfaces команду Full Crease Edge/ Vertex (Полная складка вершин/ребер), — на первый взгляд ничего не изменится, хотя при рендеринге можно будет заметить некоторую шероховатость. Перетащите вершину со складкой — появится острый (а не тупообразный, как ранее) шип (рис. 12), что связано с наличием складки.

 

Рис. 12. Сравнение вариантов создания шипа: слева — шип, полученный только перемещением вершины, справа — с дополнительным формированием складки

Рис. 12. Сравнение вариантов создания шипа: слева — шип, полученный только перемещением вершины, справа — с дополнительным формированием складки

Теперь разберемся с зеркальным отображением и объединением подразбиваемых поверхностей. Сформируйте Subdiv-конус и нажмите клавишу «3» для придания его поверхности более округлой формы (рис. 13). Нажмите клавишу F9, выделите верхнюю вершину конуса и создайте для нее полную складку (команда Subdiv Surfaces=>Full Crease Edge/ Vertex) — рис. 14. Нажмите клавишу F10, выделите четыре нижних ребра и масштабируйте их (рис. 15). Отрегулируйте положение верхней вершины так, чтобы конус напоминал верхнюю половину детского волчка (рис. 16). Переключитесь в режим редактирования на уровне объекта (F8), выделите конус и примените к нему команду Mirror (Зеркало) из меню SubdivSurfaces — будет создана его зеркальная копия (рис. 17). Заметим, что зеркальное отображение можно было получить и простым дублированием с отрицательным масштабированием, но для Subdiv-поверхностей это чревато проблемами при дальнейшем их редактировании по причине не всегда корректного направления нормалей. И напоследок объединим две созданные поверхности в единый объект. Для этого включите для копии высокую детальность отображения (клавиша «3»), отрегулируйте положение объектов друг по отношению к другу, выделите их и воспользуйтесь командой SubdivSurfaces=>Attach. Результатом станет генерация модели, объединяющей оба исходных объекта (рис. 18) и напоминающей детский волчок.

 

Рис. 13. Исходный конус

Рис. 13. Исходный конус

 

Рис. 14. Результат создания складки для верхней вершины

Рис. 14. Результат создания складки для верхней вершины

 

Рис. 15. Масштабирование нижних ребер

Рис. 15. Масштабирование нижних ребер

 

Рис. 16. Окончательный вид конуса

Рис. 16. Окончательный вид конуса

 

Рис. 17. Появление зеркальной копии

Рис. 17. Появление зеркальной копии

 

Рис. 18. Объединенная модель

Рис. 18. Объединенная модель

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

Примеры создания Subdiv-поверхностей

Чемодан

Создайте Subdiv-куб и отмасштабируйте его по размеру предполагаемого чемодана (рис. 19). При выделенном кубе нажмите клавишу F9 для перехода в режим редактирования на уровне вершин — это приведет к отображению вершин 0-го уровня детализации, что видно по значению 0 в поле DisplayLevel окна каналов (рис. 20). Выделите диагональные вершины и, применив масштабирование, отодвиньте их ближе к внешней границе чемодана для придания краям чемодана требуемой формы (рис. 21). Примерно схожим образом отрегулируйте положение вершин верхней и нижней поверхностей чемодана, чтобы эти поверхности стали почти плоскими (рис. 22).

 

Рис. 19. Исходный куб

Рис. 19. Исходный куб

 

Рис. 20. Куб в режиме редактирования вершин базового уровня

Рис. 20. Куб в режиме редактирования вершин базового уровня

 

Рис. 21. Масштабирование диагональных вершин

Рис. 21. Масштабирование диагональных вершин

 

Рис. 22. Корректировка положения вершин верхней и нижней поверхностей

Рис. 22. Корректировка положения вершин верхней и нижней поверхностей

 

Теперь хотелось бы сделать углы боковых поверхностей более острыми, но для этого потребуется создать первый уровень иерархии. Нажмите клавишу F11 для перехода в режим редактирования граней, выделите все грани боковой поверхности объекта (рис. 23) и воспользуйтесь командой Refine Selected (Повысить детальность) из контекстного меню. Это приведет к созданию вершин иерархического уровня Level 1 и к соответствующему переразбиению граней (рис. 24). Выделите по четыре центральные грани на вертикальных фрагментах боковой поверхности и при помощи масштабирования слегка переместите их внутрь для небольшого заострения краев поверхности (рис. 25). При необходимости проведите аналогичную операцию для центральных граней горизонтальных поверхностей, а по окончании нажмите клавишу «3» для придания поверхности более округлой формы. Дополните чемодан произвольной ручкой и настройте материалы — возможный окончательный вид сцены показан на рис. 26.

 

Рис. 23. Выделение граней боковой поверхности

Рис. 23. Выделение граней боковой поверхности

 

Рис. 24. Результат переразбиения граней

Рис. 24. Результат переразбиения граней

 

Рис. 25. Масштабирование граней

Рис. 25. Масштабирование граней

 

Рис. 26. Получившийся чемодан

Рис. 26. Получившийся чемодан

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

КомпьютерПресс 4'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
Популярные статьи
КомпьютерПресс использует