Первые шаги в Maya. Урок 3. Основы полигонального моделирования
Методы и принципы полигонального моделирования
Моделирование при помощи вершин
Моделирование при помощи ребер
Моделирование при помощи полигонов
ольшинство создаваемых в Maya моделей строится при помощи NURBS-поверхностей и полигональных сеток. Первые интерполируют заданную форму в интерактивном режиме и идеальны для генерирования совершенно гладких поверхностей, а вторые прорисовывают геометрию вплоть до контрольных вершин и больше подходят для моделирования поверхностей, имеющих выраженные твердые края и грани. Это разделение условно, так как в большинстве случаев основой для любой модели могут служить как полигональные сетки, так и NURBS-поверхности. Однако между данными типами моделирования есть весьма принципиальные различия. Так, моделирование на основе NURBS-кривых отличается большей гибкостью и позволяет создавать самые причудливые модели, но они более массивны, сложны в редактировании и дольше визуализируются. В свою очередь, полигональные модели описываются меньшим числом данных, обрабатываются с высокой скоростью и проще в освоении. Поэтому мы начнем изучение основ моделирования с рассмотрения приемов работы с полигональными моделями.
Теоретические аспекты
Типы подобъектов
Любой полигональный объект задается набором полигонов (иначе именуемых полигональными гранями) и потому объединяет множество таких однотипных элементов, или подобъектов, как вершины (Vertex), ребра (Edge) и грани (Face):
- вершины (рис. 1) — это точки, в которых сходится и соединяется друг с другом любое число ребер;
- ребра — это линии границы грани. Ребра могут быть видимыми, если соседние грани не лежат в одной плоскости, в противном случае они невидимы;
- грани (полигоны) — это участки плоскости треугольной или четырехугольной формы, представляющие собой элементарные ячейки сетки. В одной плоскости объекта может находиться множество граней, которые внешне будут совершенно неразличимы.
Рис. 1. Представление вершин, ребер и граней
Редактирование полигональных объектов можно производить как на уровне объекта в целом, так и на уровне подобъектов: граней, ребер или вершин. Чтобы объект стал редактируемым на уровне подобъектов и превратился в полигональную сетку, необходимо нажать клавишу F8, которая также отвечает за возврат к обычному редактированию на уровне объекта. Подобъекты можно вытягивать, масштабировать, вращать и деформировать, удалять, объединять, добавлять и применять к ним множество других операций, изменяя таким образом исходный объект, например обычный примитив, до полной неузнаваемости.
Выбор нужного типа подобъектов осуществляется нажатием клавиши F8, подсвечиванием нужного уровня и блокированием ненужных в строке состояния (по умолчанию в ней устанавливается выбор вершин). Или сразу нажатием клавиш F9 —для перехода в режим редактирования вершин, F10 — ребер и F11 — граней (рис. 2). Выделение интересующих подобъектов производится обычными инструментами выделения Select Tool и Lasso Tool. Кроме того, выделение объектов по щелчку выполняется и в случае применения инструментов Move Tool, Rotate Tool и Scale Tool. При необходимости последовательного выделения нескольких подобъектов при выделении удерживают нажатой клавишу Shift. Узнать общее число имеющихся в объекте подобъектов, а также количество выделенных вершин, ребер и граней довольно просто — достаточно включить режим отображения информации, применив команду Display=>Heads Up Display=>Poly Count (Отображение=>Отображение основных элементов=>Число полигонов) — рис. 3. Основное назначение данного режима — контроль количества выделенных подобъектов.
Рис. 2. Исходный объект (слева вверху) и представление его в виде подобъектов: вершин (справа вверху), ребер (слева внизу) и граней (справа внизу) — отдельные подобъекты выделены
Рис. 3. Отображение статистической информации о подобъектах
Методы и принципы полигонального моделирования
Теоретически можно выделить три метода построения полигональных моделей, которые могут применяться как в чистом виде, так и в разнообразных комбинациях. Модель может строиться:
- вытягиванием из одного-единственного исходного полигона, при этом каждый новый полигон вытягивается из предыдущего и, в ряде случаев, сваривается с каким-то соседним полигоном через вершины;
- на основе полигональных примитивов, когда берется примитив (куб, сфера и т.п.), а затем из него вытягиваются те или иные подобъекты и при необходимости делятся отдельные грани. Данный метод пользуется наибольшей популярностью;
- модель создается с нуля, а входящие в нее полигоны не вытягиваются, а рисуются вручную.
Для создания и редактирования полигональных моделей предназначены командные меню Polygons и Edit Polygons, содержащие очень большое количество команд. Однако самыми важными в полигональном моделировании являются команды:
- Split Polygon Tool (Разбить полигон) из меню Edit Polygons — приводит к разбиению каждой грани на несколько новых граней, что реализуется путем создания новых ребер;
- Extrude Face/Extrude Edge/Extrude Vertex (Выдавить грань/Выдавить ребро/Выдавить вершину) из меню Edit Polygons — обеспечивает перемещение выделенных граней, ребер и вершин и изменение в итоге формы модели;
- Smooth (Сгладить) из меню Polygons — увеличивает детализацию объекта благодаря переразбиению на большее число граней; может выполняться как для всего объекта в целом, так и для его отдельных подобъектов.
Чтобы результат моделирования оказался удачным, стоит придерживаться следующих правил:
- многие модели симметричны, поэтому, как правило, создается лишь одна их половина, а затем генерируется ее зеркальная копия (команда Polygons=>Mirror Geometry — Полигоны=>Зеркальная геометрия), по окончании обе половинки модели сшиваются, например путем булева объединения, а затем полученная модель сглаживается;
- модели не должны иметь в своем составе лишних подобъектов, которые не нужны для формирования задуманной поверхности, — это лишь усложняет модель и может стать причиной неправильного выполнения тех или иных операций. Поэтому от лишних подобъектов нужно сразу же избавляться — например для уничтожения лишних вершин достаточно переключиться в режим редактирования вершин и удалить ненужные;
- нередко воспользоваться нужным инструментом не получается, например при попытке создания новой грани не удается провести новое ребро от ребра A к ребру B. Причиной возникновения таких ситуаций является невозможность выполнения операции в данном конкретном случае, так как происходит нарушение существующей полигональной системы плоскостей. Можно попытаться провести ту же операцию, но в обратном порядке, то есть соединить ребро B с ребром A, иначе придется придумывать какое-то иное решение;
- операция сглаживания (Smooth) существенно увеличивает количество полигонов модели, поэтому не стоит злоупотреблять ею — в противном случае модель может стать слишком сложной: из-за большого числа полигонов с ней трудно будет работать, время визуализации сильно вырастет, а недостаточно мощный компьютер может при ее обработке зависать.
Моделирование при помощи вершин
Вершины являются основным элементом редактирования сетки — достаточно нескольких манипуляций с вершинами, и стандартный примитив можно будет превратить в совершенно другой объект.
Для примера создайте полигональный куб (рис. 4), не снимая выделения, установите режим редактирования вершин, щелкнув на клавише F9. Активизируйте инструмент Move Tool и последовательно перетащите вершины его верхней грани так, чтобы куб превратился в усеченную пирамиду (рис. 5). Кстати, того же самого результата можно достичь путем масштабирования инструментом Scale Tool выполненного сразу для всех вершин верхнего сечения, что в данном случае было бы гораздо разумнее, так как позволяет не потерять симметричность формы.
Рис. 4. Исходный объект
Рис. 5. Результат перемещения вершин верхней грани
Вершины можно не только перемещать, но и поворачивать инструментом Rotate Tool (рис. 6). А можно свести выделенные вершины в одну точку и сварить, применив команду Edit Polygons=>Merge Vertices (Правка полигонов=>Соединить вершины) — рис. 7. Правда, нужно иметь в виду, что будут ли сварены вершины в данном конкретном случае, зависит от значения параметра Distance, задающего радиус, в пределах которого производится сваривание выделенных вершин.
Кроме того, для вершин существует интересный способ их стесывания (своеобразный аналог фаски) командой Edit Polygons=>Chamfer Vertex (Правка полигонов=>Стесать вершины), что приводит к созданию из одной грани сразу нескольких новых граней за счет того, что вершины как бы срезаются (рис. 8). После этого к новым вершинам можно применить какие-либо преобразования, например вытянуть из них новые грани, применив команду Edit Polygons=>Extrude Vertex (Выдавить вершину) — рис. 9.
Рис. 6. Поворот вершин верхнего основания усеченной пирамиды
Рис. 7. Результат сведения вершин в одну точку
Рис. 8. Стесывание вершин
Рис. 9. Результат двукратного стесывания вершин с последующим их вытягиванием
Моделирование при помощи ребер
Как и вершины, ребра можно перемещать, поворачивать, масштабировать и вытягивать. Для проведения экспериментов создайте полигональный куб и установите для него режим редактирования ребер, нажав клавишу F10. Попробуйте вытянуть противоположные ребра верхней грани куба (рис. 10) — возможный результат показан на рис. 11. Если аналогичную операцию провести в отношении двух других ребер куба и удалить верхнюю грань (перейти в режим редактирования граней, выделить грань и нажать клавишу Del), то последний станет напоминать открытую коробку (рис. 12).
Рис. 10. Исходный объект
Рис. 11. Вытягивание двух противоположных ребер куба
Рис. 12. Открытая коробка
Можно добавить к выбранным ребрам фаску, что может пригодиться, например, при создании ограненных моделей. Для примера возьмите обычный шар, нажмите клавишу F10, выделите все ребра и примените команду Edit Polygons=>Bevel (Правка полигонов=>Фаска) — гладкий шар станет граненым (рис. 13).
Рис. 13. Исходный шар (слева) и граненый шар (справа)
Моделирование при помощи полигонов
Для экспериментов создайте полигональный куб и, не снимая выделения, переключитесь в режим редактирования полигонов, щелкнув на клавише F11. Полигональные грани в этом режиме при желании можно перемещать, поворачивать и масштабировать обычным способом (рис. 14). Кроме того, для них возможно еще множество интересных преобразований, доступных через меню Polygons и Edit Polygons.
Рис. 14. Исходный объект (слева вверху) и перемещение (справа вверху), поворот (слева внизу) и масштабирование (справа внизу) одного из его полигонов
Вначале попробуем разбить одну из граней куба на две, то есть создать новое ребро. Выберите команду Edit Polygons=>Split Polygon Tool (Правка полигонов=>Разбить полигон) — вид указателя мыши изменится и станет напоминать острие ножа, которым и нужно указать обе вершины создаваемого ребра (рис. 15). После этого следует выйти из режима Split Polygon, щелкнув на любом другом инструменте. Разбиение грани позволит применить к созданному ребру любые трансформации — его можно переместить, повернуть, масштабировать и т.д.
Рис. 15. Разбиение грани (новые вершины обведены красными кружками)
Но самое главное — две новые грани также можно подвергнуть разным трансформациям, поскольку они совершенно независимы. Для примера переключитесь в режим редактирования граней и примените команду Edit Polygons=>Extrude Face (Правка полигонов=>Выдавить грань) — появится окно с параметрами команды и управляющие векторы. Стоит заметить, что в отличие от операции Extrude Vertex команда Extrude Face (как, впрочем и Extrude Edge) управляется не только посредством настройки параметров в соответствующем окне, но и с помощью управляющих векторов. Данные векторы позволяют перемещать подобъекты (как отдельно по одной из осей X, Y или Z, так и сразу по всем трем осям), масштабировать их и поворачивать. Для перемещения по осям подсвечивают одну из стрелок или активируют центр манипуляторов в случае перемещения сразу по всем трем осям, масштабирование регулируется через цветные квадратики, а поворот — посредством голубой окружности (рис. 16).
Рис. 16. Управляющие векторы операции Extrude Face
Щелкните по одному из кубиков управляющих векторов (это приведет к переходу в режим масштабирования) и равномерно немного уменьшите в размере преобразуемую грань. Затем, используя стрелки манипулятора инструмента, передвиньте грань влево (рис. 17). Выдавливать можно не только одну, но и сразу несколько граней. Попробуйте выделить две рядом расположенные грани (рис. 18) и вытянуть из них новые полигоны вышеописанным способом — результат будет напоминать рис. 19. Однако он может быть и совершенно иным, так как особенности вытягивания смежных полигонов также регулируются флажком Keep Faces Together из меню Polygons=>Tool Options (Полигоны=>Настройка опций). По умолчанию данный флажок выключен, что означает независимое вытягивание полигонов. Если его включить, то полигоны будут вытягиваться как единое целое, а результат будет напоминать рис. 20.
Рис. 17. Выдавливание грани
Рис. 18. Выделение двух граней
Рис. 19. Выдавливание двух граней, флажок Keep Faces Together выключен
Рис. 20. Выдавливание двух граней, флажок Keep Faces Together включен
Можно добавить к выбранным граням прямую фаску, что осуществляется путем вставки плоскостей вместо общих ребер выделенных граней и необходимо при ручном сглаживании формы модели. Для добавления фаски выделите весь объект или его отдельные грани, щелкните на квадратике справа от команды Edit Polygons=>Bevel (Правка полигонов=>Фаска) и в открывшемся окне установите размер фаски (рис. 21).
Рис. 21. Результат добавления к объекту фаски
Любые грани несложно удалить, выделив их и нажав клавишу Del. Попробуем воспользоваться удалением граней для превращения обычного закрытого куба в полый, что позволит применить его для имитации некоторого замкнутого пространства. Создайте обычный куб (рис. 22), нажмите клавишу F11 для перехода в режим редактирования граней, выделите две его передние грани и верхнюю грань (рис. 23). Удалите их и увидите, что оставшаяся часть куба вполне может послужить основой для моделирования помещения-комнаты с полом и стенами (рис. 24). Дополните сцену несколькими произвольными примитивами и разместите их так, чтобы они находились на полу импровизированной комнаты, — возможный вид сцены представлен на рис. 25.
Рис. 22. Исходный куб
Рис. 23. Выделение граней куба
Рис. 24. Результат удаления граней
Рис. 25. Комната с примитивами
С помощью команды Edit Polygons=>Extract (Правка полигонов=>Извлечь) можно извлекать из модели одну или даже много граней, разбивая ее таким образом на отдельные объекты. Попробуйте создать обычный куб, нажать клавишу F11, выделить его любую грань, щелкнуть на команде Extract и при помощи управляющих векторов перетащить данную грань в любом направлении, что приведет к извлечению грани и ее перемещению (рис. 26). Ту же операцию можно выполнить сразу в отношении множества граней — возьмите сферу, в режиме редактирования граней выделите все грани, находящиеся в верхней трети сферы, и щелкните на команде Extract. Потом нажмите клавишу F8, перетащите и поверните извлеченную часть сферы обычным образом примерно так, как показано на рис. 27.
Рис. 26. Исходный куб (слева) и куб с извлеченной и перемещенной гранью (справа)
Рис. 27. Исходная сфера (слева) и сфера с извлеченными гранями (справа)