ГЛАВА 14

ГЛАВА 14

Лоскутное (patch) моделирование

Моделирование с помощью лоскутов Безье представляет собой полную альтернативу традиционному каркасному редактированию. Компьютерные программы моделирования имеют тенденцию использовать каркасный (mesh), лоскутный (patch), nurb (NURB - Non-Uniform Rational B-spline) или монолитный (solids-based) подход. 3D Studio MAX несколько выделяется тем, что дает возможность существовать объекту любого класса и представляет основы лоскутного редактирования через модификатор EditPatch и класс Patch. Хотя лоскутное редактирование может быть предельно артистичным и органичным, но по общему мнению оно ограничено. Лоскутную функциональность, включенную в настоящее время в 3DSMAX, лучше считать солидной основой, на которой строятся другие разработки. Однако благодаря своей основательности, многое из этого нового мира лоскутного моделирования можно изучить уже сейчас и применить позже, когда представится случай.

Несмотря на то, что 3DS МАХ определяет лишь основы лоскутного моделирования, с имеющимися инструментами можно создать весьма впечатляющие работы. В настоящей главе рассказывается о лоскутном моделировании и освещаются следующие его аспекты:

  • Характеристики лоскутных моделей и типов лоскутов в 3DS МАХ
  • Способы определения кривых Безье, а также их соотношение с лоскутным редактированием Безье
  • Использование лоскутов, сформированных множеством методов: примитивами, Extrude, Lathe и каркасами
  • Технология применения модификатора EditPatch и уровней Vertex (вершина), Edge (ребро) и Patch (лоскут) для подобъектного лоскутного моделирования
  • Процедуры для сохранения модели в виде лоскутов без конвертирования в каркас до тех пор, пока это не понадобится.

Основные сведения о типах лоскутов

В 3DS МАХ в настоящее время существует два типа лоскутов: QuadPatch (Quad - четырехугольный участок) и TriPatch (Tri - треугольный участок). Оба типа лоскутов базируются на кривых Безье. Примитивы QuadPatch и TriPatch (их можно найти под Patch Grids в выпадающем списке Geometry в Create Panel) создают отдельные лоскуты соответствующего типа, к которым посредством модификатора EditPatch можно добавлять дополнительные лоскуты. Модификаторы, подобные Lathe и Extrude, могут экспортировать свои объекты в виде лоскутов, а каркасы несложно преобразуются в лоскутные объекты. Важно осознавать, что различные методы создания порождают лоскуты либо Tri, либо Quad, и данные два типа при редактировании дают разные результаты. На рисунке 14.1 показаны два лоскута и их результирующая форма после нескольких основных коррекций. Вершинные и тангенциальные (касательные) ручки обоих лоскутов были позиционированы одинаково. Легко заметить, что объектный каркас TriPatch сгибается постепенно, во многом подобно листу бумаги. Объект QuadPatch сгибается больше похоже на резину, а не на бумагу. Дело в том, что QuadPatch оказывает влияние на четверку смежных управляющих вершин - вершины по диагонали влияют на поверхности друг друга. По контрасту TriPatch влияет только на вершины, не затрагивая при этом разделяющие ребро и поверхность диагональных вершин.

Опции отображения лоскутов

Лоскутные объекты определяются решеткой (lattice), которая порождает поверхность (surface). Решетка представляет из себя сетку из управляющих вершин, векторных ручек и промежуточных вершин (см. рис. 14.2). Существует выбор, отображать ли решетку, поверхность или и то и другое. На практике при работе на уровне Vertex решетка скрывается и показывается лишь на уровнях Edge или Patch.

Edge и Patch "видны" только на самой решетке. При работе на уровнях Edge или Patch все произведенные выделения указываются на решетке и на поверхности ничего не отображается. Если решетки не видно, то выделения по-прежнему делаются, но они невидимы (ситуация довольно опасная). Элементы управления отображением решетки и поверхности обеспечиваются на всех уровнях, поскольку во время работы их постоянно приходится включать и отключать.

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

Понимание кривых Безье

Лоскуты Безье ведут себя во многом подобно сплайнам (spline - кусочно-полиномиальная функция) Безье. Классический сплайн Безье использует четыре точки для определения своей кривой. Кривая проходит через первую и последнюю точки и интерполируется между двумя средними точками. Рисунок 14.3 показывает, что для лоскутов вершины являются конечными управляющими точками сплайна, а векторы лоскута определяют промежуточные управляющие точки.

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

Ребра лоскута охватывают его по периметру независимо от того, какой это лоскут - Tri или Quad, и имеют три соединенных сегмента линии. Хотя ребра могут выглядеть несколько странными, на самом деле они соединяют четыре определяющие точки кривой Безье. Каждое ребро начинается и завершается вершиной с сегментами, определенными положением векторных ручек. Таким образом, лоскуты состоят из трех или четырех ребер, в зависимости от своего типа - TriPatch или QuadPatch. Эти ребра определяют сплайны Безье, которые в свою очередь определяют лоскут.

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

ПРИМЕЧАНИЕ

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

Внутренние вершины

Другие линии решетки лоскута пересекают лоскут. Эти внутренние "ребра" оканчиваются у векторных ручек и проходят через то, что носит название внутренних вершин. Внутренние вершины на самом деле являются вторичными управляющими ручками, которые влияют на кривизну лоскута. (Называть их "вершинами" исключительно некорректно и лучше всего представлять их как внутренние ручки или внутренние управляющие точки). Данные внутренние управляющие вершины ведут себя очень похоже на векторные ручки, более тонко управляя кривизной Безье. Обратите внимание на то, что хотя ребра лоскута формируют настоящие сплайны Безье (проходящие через вершины лоскута), но внутренняя решетка сплайнов не формирует, поскольку их конечные точки являются ручками вектора, который не обязан быть на поверхности.

Внутренние вершины важны, поскольку предоставляют возможность искажать одиночный лоскут таким образом, который бы в отсутствие внутренних вершин потребовал бы дополнительных вершин и, следовательно, большего количества лоскутов. Рисунок 14.4 показывает, как настройка внутренних вершин деформирует единственный лоскут так, что обычно для этого требуется вершины четырех лоскутов.

Внутренние вершины/управляющие ручки

Хотя внутренние вершины и полезны, однако получить их достаточно затруднительно. При первом редактировании лоскута он находится в режиме Auto Interior и внутренние вершины невидимы, поскольку внутренние управляющие точки при настройке векторных ручек, ребер и лоскутов перемещаются. Внутренние вершины не появляются до тех пор, пока режим лоскута не изменится на Manual Interior. Для изменения режима следует, находясь на уровне выбора подобъекта Patch, щелкнуть на лоскуте правой кнопкой мыши.

После перевода лоскута в режим Manual Interior визуально ничего не происходит до тех пор, пока не будет осуществлен возврат на уровень Vertex. После этого все внутренние вершины появятся желтыми (четыре вершины для QuadPatch и три для TriPatch). Это касается всех лоскутов, которые в настоящее время находятся в режиме Manual Interior (см. рис. 14.4). В отличие от векторных ручек вы не должны выделять внутренние вершины прежде чем с ними манипулировать - они доступны для манипуляций всегда.

То, что не совсем очевидно - это влияние, который режим Manual Interior оказывает на редактирование Edge и Patch. При работе в режиме Auto Interior внутренние вершины перемещаются при манипулировании ребрами и лоскутами. Режим же Manual Interior замораживает внутренние вершины на своих начальных местах. Теперь их можно редактировать только вручную на уровне Vertex. Рисунок 14.5 демонстрирует перемещение ребра в Auto Interior и в Manual Interior.

Редактирование вершин в режиме Manual Interior также выполняется по-другому, нежели в режиме Auto Interior. Внутренние вершины уже больше не стянуты вместе. На рисунке 14.6 показано редактирование одной и той же вершины в обоих режимах. Перемещение вершин без своих внутренних соседних вершин приводит к появлению заостренных поверхностей. Конечно, как показывает рисунок 14.7, редактирование только внутренних вершин дает в результате в равноценные полезные поверхности.

Трансформация лоскута или ребра изменяет вершины и ручки ребра или лоскута, но не затрагивает внутренние вершины. Хотя это и полезно, но для неподготовленного человека может оказаться непонятным. Будучи готовым к такому результату, можно с большей пользой применять режим Manual Interior.

ПРИМЕЧАНИЕ

Изменение режима лоскута с Manual Interior на Auto Interior прерывает все редактирование, произведенное для внутренних вершин. (К счастью это поправимо, если перейти снова в режим Manual Interior). Если вы начинаете манипулировать внутренними вершинами, для сохранения манипуляций следует оставить лоскут в режиме Manual Interior.

Деление и распространение

Деление лоскута делит каждый выделенный лоскут на четыре. Новые лоскуты, независимо от их типа - Quad или Tri, имеют ребра в средних точках ребер исходного лоскута. Как показывает рисунок 14.8, это не означает, что учетверяется целый объект. Делятся только лоскуты, которые граничат с делящимися ребрами, и многие делятся только один раз.

Опция Propagate обеспечивает деление лоскутов так, чтобы поддержать последовательность вершин и ребер. Если только вы не желаете получить визуального разрыва модели, то при делении должны всегда распространять деления лоскута. Без распространения через ребро нельзя будет продолжить сглаживание. Причина проста - новым вершинам не с чем соединяться. Визуальным эффектом будет гребень на шве, поскольку сглаживание не может быть продолжено через ребро. Это сделает область похожей на "клапан", который вот-вот будет сорван. Как показано на рисунке 14.9, соседние лоскуты при этом остаются нетронутыми.

Создание лоскутов

Лоскуты создаются множеством способов. Можно создать их как исходные прямоугольники, направить на лоскуты вывод Extrude или Lathe, конвертировать в лоскуты ЗО-примитивы. Наконец, 3DS МАХ дает возможность преобразовать в лоскут любой произвольный каркасный элемент. Это достигается при помощи двух разных типов лоскутов Безье - прямоугольного (бикубического) и треугольного. Данные базовые формы обеспечивают взаимное преобразование лоскутов и каркасов.

Использование лоскутов, полученных из примитивов

Достаточно часто будет возникать необходимость работать с различными типами лоскутов. Когда каркасы конвертируются в лоскуты (через добавление модификатора EditPatch), они всегда превращаются в TriPatch, даже если их топология ближе к четырехугольникам. Более предпочтительные QuadPatch формируются как результат параметра создания. Большая часть стандартных примитивов, как и сплайны, полученные из моди-фикаторов Extrude или Lathe, порождают QuadPatch. Рисунок 14.10 показывает результирующую геометрию лоскута сразу после придания примитивам модификатора EditPatch.

СОВЕТ

Создание примитивов с отрицательной высотой порождает лоскуты с реверсированными нормалями. Это может оказаться весьма удобным методом создания лоскутных объектов для контейнеров, сосудов и комнат из Box, Cylinder, Tube и Cone.

Как показывает рисунок 14.10, каждый примитив, за исключением Sphere и GeoSphere, преобразуется в QuadPatch. Сферы конвертируются в TriPatch ввиду того, что QuadPatch "прищипывает" полюса (условие, которое можно воспроизвести за счет вращения полукрущ как лоскута). Лоскутная плотность примитивов фиксирована. Ее можно увеличить с использованием функции Subdivide из EditPatch вместе с опцией Propagate. Это не должно вызывать неудобств благодаря тому, что EditPatch должен добавляться в начале преобразования примитивов в лоскуты.

Использование лоскутов из Extrude и Lathe

И Extrude, и Lathe имеют опции для вывода лоскутов вместо каркасов. В этой связи они становятся двумя наиболее удобными способами начала лоскутного моделирования. Рисунок 14.11 показывает лоскутные модели, начинавшиеся как сплайны и превращенные в QuadPatch посредством Extrude и Lathe.

Сплайны являются естественными стартовыми точками для лоскутных моделей, поскольку оба их типа основываются на одной и той же геометрической форме - сплайне Безье. Сплайны можно преобразовать в лоскуты за счет применения модификаторов Extrude или Lathe. Lofter, к сожалению, лоскутов не порождает.

СОВЕТ

По иронии судьбы в 3D Studio Release 4 лоскутные объекты можно создавать из loft-объектов. Как показано на рисунке 14.12, SDS-модели, созданные модулем 3DSR4 3D Surfer, при импорте в 3DS МАХ транслируются в лоскуты.

Модификатор Lathe очень полезен при создании базовых форм для лоскутного моделирования. Lathe (получение объектов за счет вращения) можно рассматривать как гончарный круг, вытачивающий сплайн в мягкой, податливой глине лоскута. При работе с Lathe сложно направлять его нормали. В отличие от каркасов, перенаправить нормали лоскута нельзя. Если нормали лоскута показывают не в ту сторону, необходимо либо изменить способ создания нормалей, либо переориентировать существующий лоскут, либо использовать двусторонний материал. Последнего следует избегать, поскольку отключение Backface Cull затрудняет все, в особенности базовое редактирование лоскута.

Покрывание (capping) лоскутов

Лоскутные объекты, сформированные через Extrude и Lathe, покрывать не так просто, как их каркасные эквиваленты. Если конечное покрытие (cap) является трехсторонним, оно выполняется с TriPatch, если четырехсторонним - с QuadPatch. Если покрытие имеет большее число сторон, что вероятнее всего, должен проводиться более тщательный анализ с учетом следующих правил:

  • Вложенные формы покрывать нельзя (например, вытянутые пончики).
  • Должна существовать чистая линия зрения от каждой вершины к центру формы.

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

Для более изощренных форм, таких как рука на рисунке 14.14, покрывание следует выполнять вручную. В данном случае к видимым ребрам добавлялись лоскуты (с помощью функции Add Quad из EditPatch) и затем вершины новых лоскутов объединялись с вершинами напротив. Подобный подход предпочтителен для органических форм, поскольку имеется контроль за тем, где проходят линии лоскутов и какой тип лоскутов генерируется (автоматическое покрывание обычно продуцирует TriPatch). Еще важнее то, что добавляемые лоскуты и швы на поверхности объекта имеют непрерывное сглаживание - как раз то, что не происходит с автоматически покрытыми ребрами. В следующем разделе покрывание ребер обсуждается более детально.

Непрерывность сглаживания

Тип вершины сплайна оказывает существенное влияние на результирующее сглаживание вытянутых (extrude) или полученных за счет вращения (lathe) лоскутов. Хотя типы вершин Smooth или Bezier превращаются в гладкие лоскуты, но типы вершин Corner или Bezier Corner превращаются в отчетливые ребра, через которые невозможно продолжить сглаживание. Данная ситуация похожа на описанную для примитивов, хотя в отличие от примитивов можно возвратиться к EditSpline и изменить вершины на Smooth или Bezier (см. рис. 14.15). Если разрушить стек до лоскутного объекта, созданного через Extrude или Lathe, непрерывность сглаживания объекта будет фиксированной и неизменяемой. Таким образом модели следует тщательно анализировать на предмет выяснения, нуждаются ли вершины сплайна в переклассификации, прежде чем выполнять разрушение.

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

СОВЕТ

Если требуется продолжить сглаживание через ребро покрытия Extrude или Lathe, удалите вначале покрытие либо убрав лоскуты, либо убрав опцию покрытия в модификаторе. Затем добавьте лоскуты к ребрам, вытяните открытые вершины к противоположным ребрам и выполните объединение.

Лоскуты, сгенерированные стандартными примитивами, имеют свойство, которое нельзя продублировать каким-либо другим лоскутным моделированием и которое, к сожалению, невозможно изменить. Примитивы, начинающиеся с покрытий (отчетливых, жестких ребер, подобных вершине цилиндра или стороне коробки), поддерживают эти жесткие ребра в течение всей жизни лоскута. В отличие от ребер покрытия Extrude или Lathe, лоскуты, добавленные к примитивам вдоль первоначально покрытых ребер, всегда представляются как ребра. Рисунок 14.16 рассматривает ситуацию, при которой вершина цилиндра была удалена и вновь показавшимся ребрам даны QuadPatch. Поскольку вершина цилиндра изначально была "жесткой", ребро существует даже несмотря на дальнейшее объединение с лоскутными вершинами. Данная ситуация является уникальной, поскольку прерывистость сглаживания нельзя ни ввести для других лоскутов, ни устранить для этих. Памятуя о вышесказанном, прерывистость можно избежать или использовать для своей выгоды, когда требуется представить разрыв в сглаживании, но вы не хотите конвертировать лоскутную модель в каркасную (вынужденно добавляя модификатор Smooth или EditMesh).

Применение EditPatch

EditPatch является основным инструментом редактирования лоскутов. Концептуально EditPatch подобен EditMesh и EditSpline, хотя по общему мнению менее живуч. Как и EditSpline, EditPatch сохраняет каждое выполненное редактирование. Это означает, что чем дольше вы работаете с модификатором, тем больше будет файл (и больше потребность в RAM). Достигнув состояния, когда полученная модель устраивает, определенно стек лучше разрушить. Модели с длинной историей редактирования могут иметь файл, длиннее обычного в 100 и более раз. До тех пор, пока не будет включен модификатор, преобразующий модель в каркасную, результат разрушения стека является объектом Patch, к которому можно применить модификатор EditPatch и вернуться к лоскутному моделированию.

EditPatch является единственным инструментом для установки выборок лоскутных подобъектов. В отличие от каркасного моделирования, модификатор Volume Select для случая лоскутов не работает. К сожалению, он преобразует лоскуты в каркасы и анимации подобъектов должны устанавливать свои выборки при помощи EditPatch. Учитывая накладные расходы, выборки лучше всего определять в модификаторах EditPatch, которые не выполняют никакого редактирования, а применяются только для выбора. Добавление специальных модификаторов выборки EditPatch должно стать стандартным приемом.

Добавление EditPatch в качестве самого первого объекта в историю редактирования примитива преобразует последний в лоскутный объект. Примитив остается лоскутом до тех пор, пока не будет добавлен модификатор, который требует преобразования в каркас (например, Normal или Volume Select). Добавление любого модификатора, отличного от EditPatch, в качестве самого нижнего модификатора стека, преобразует примитив в каркас и удаляет любое лоскутное редактирование, которое могло производиться при помощи последующих модификаторов EditPatch. Для добавления UVW Map (например) перед первым EditPatch, следует прежде добавить EditPatch.

Навигация EditPatch очень похожа на навигацию с другими модификаторами Edit. Следующих четыре раздела описывают настройку объекта EditPatch и использование инструментов, находящихся на трех уровнях выборки EditPatch.

Работа с лоскутами на уровне Object

Уровень Object модификатора EditPatch (см. рис. 14.17) предоставляет возможность добавления других лоскутных объектов и сохранения управления плотностью каркаса всего лоскутного объекта. При моделировании на других уровнях принято часто возвращаться на уровень Object с целью настройки параметра Steps для более быстрого или более точного моделирования вершин.

ПРИМЕЧАНИЕ

В отличие от EditSpline или Edi+Mesh, ни на одном из уровней EditPa+ch клонирование не поддерживается. При лоскутном редактировании можете забыть о клавише Shift. Единственным способом создания чего-то, похожего на клон, является отсоединение лоскутов при помощи опции Copy.

Топология лоскута

Параметр Steps влияет на то, сколько делений делается внутри всех лоскутов объекта. Как и со всем в 3DS МАХ, для целей визуализации геометрия должна преобразовываться в грани. Параметр Steps диктует, сколько делений и тем самым, сколько граней, порождается внутри каждого лоскута объекта. Это во многом похоже на параметр шагов для примитивов сплайнов, где установка шагов делает сплайн более округлым. Однако в отличие от сплайна, лоскуты всегда позволяют управлять шагами, даже после того, как они были разрушены. Просто добавьте модификатор EditPatch и всегда сможете установить шаги лоскута в данный момент времени (см. рис. 14.18). Это один из самых мощных аспектов лоскутного моделирования, поскольку имеется возможность установки сложности модели (и результирующих требований к RAM). Поскольку это анимируемый параметр, плотность лоскутной модели может настраиваться по мере изменения значимости модели для сцены.

Объем дискового пространства для лоскутной модели не зависит от параметра Steps. Однако объем RAM для отображения и визуализации - зависит. Для каждого лоскута генерируется (Steps + I)2 граней. При потере бдительности большие значения параметра Steps могут поставить систему на колени. Максимальное значение для Steps составляет 100. При этом для модели создается более двух миллионов граней. Во время настройки счетчика Steps не прибегайте к помощи ускоряющей клавиши Ctrl!

Присоединение лоскутов

Присоединение предоставляет возможность добавить дополнительный лоскутный объект в одно и то же определение лоскутного объекта. Обычно это производится для целей объединения лоскутов вместе, поскольку объединение может происходить только в рамках одного лоскутного объекта. Присоединяемые объекты, которые не являются лоскутными, транслируются в них во время присоединения. Рисунок 14.19 демонстрирует цилиндрический примитив, конвертируемый в лоскут как часть присоединения. Следует быть особенно внимательным в случае присоединения больших каркасных объектов, у которых параметр Steps установлен в большое значение. Такое присоединение существенно раздувает размер модели.

В отличие от EditMesh, но подобно EditSpline, функция Attach обеспечивает опцию Reorient. Если опция включена, выделенный объект переориентируется так, чтобы подходить к объекту EditPatch (см. рис. 14.19). Опция Reorient центрирует выделенный объект в соответствии с его центром создания и совмещает с центром создания активного объекта. Значения вращения и масштабирования активного объекта просто копируются в присоединяемый объект. Для вращения такое копирование имеет эффект выравнивания присоединяемого объекта, что обычно и желательно. Этого нельзя сказать о трансформации масштаба, которая оказывает влияние на геометрию модели. Для предотвращения такого изменения масштаба следует использовать модификатор XForm, а не трансформацию для выполнения масштабирования базового объекта.

ПРИМЕЧАНИЕ

Иногда опция Reorient преподносит сюрпризы, поэтому советуем использовать функцию Align для центрирования объектов перед присоединением. Это будет гарантировать корректность результата переориентации.

Лоскутное моделирование на уровне Patch

Уровень Patch (см. рис. 14.20) обеспечивает основы управления лоскутом. Здесь можно производить различные трансформации, изменять состояние внутренних вершин и "хирургически" отсоединять, удалять и делить. Интересно, что некоторые операции уровня лоскута (подобные удалению и делению) оказывают куда меньшее влияние, чем трансформации на уровне вершины или ребра. На практике уровень Patch используется в основном для отсоединения и деления лоскутов, а также определения статуса внутренних вершин.

Трансформация лоскутов

При перемещении, вращении или масштабировании лоскута на самом деле трансформируются все его вершины. В общем случае работа на уровне Patch ограничена начальной широкой настройкой. Более тонкие детали обеспечиваются на уровне Edge и особенно на уровне Vertex. Удаление на уровне Patch является наиболее управляемым методом удаления лоскутов, поскольку удаляется только то, что выделено - лоскуты, которые совместно используют ребра, остаются.

ПРЕДУПРЕЖДЕНИЕ

Лоскуты используют локальную систему координат в качестве мировой и всегда поворачивают и масштабируют вокруг начальной точки мировых координат. Таким образом использование локальной системы координат на уровне Patch не поощряется.

При трансформации лоскутов следует внимательно следить за статусом внутренних вершин. При использовании метода по умолчанию Auto Interior внутренние вершины всегда перемещаются с лоскутом. В случае активности Manual Interior внутренние вершины замораживаются на месте и перемещаться не могут. Рисунок 14.21 показывает эффект масштабирования лоскутов, у которых для внутренних вершин установлен режим Manual Interior.

ПРЕДУПРЕЖДЕНИЕ

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

Отсоединение лоскутов

В отличие от EditMesh отсоединение лоскута всегда приводит к созданию нового объекта. Отсоединение является единственным способом "клонировать" лоскут из модели, поскольку стандартное клонирование модификатором EditPatch не поддерживается. В отличие от EditMesh опция сохранения нового лоскута как элемента недоступна. Если необходимо, чтобы новый лоскут был частью того же самого объекта, следует использовать Attach на уровне Patch Object.

Подобно Attach Detach обеспечивает опцию Reorient, которая пытается переместить отсоединяемый объект в выровненную позицию на активной сетке. Однако благодаря природе лоскутов результат использования Reorient обычно нежелателен и вместо опции Reorient лучше применять стандартную функцию Align.

Лоскутное моделирование на уровне Edge

Работа с ребром лоскута подобна одновременному манипулированию двумя вершинами. Ребра бывает трудно идентифицировать, поскольку практически всегда требуется видеть решетку, чтобы убедиться в правильности выбора ребра. Обратите внимание на то, что на рисунке 14.22 нет функции Delete, поскольку удалять на уровне Edge нельзя. На практике уровень Edge обычно используется для добавления новых лоскутов.

ПРЕДУПРЕЖДЕНИЕ

Использование клавиши Delete с выбранным Edge удаляет весь лоскутный объект, так как функция Delete не определена и клавиша Delete в этом случае применяется на объектном уровне.

Трансформирование ребер лоскутов

Вы удивитесь, что можно сделать путем трансформирования и особенно вращения ребер. На рисунке 14.23 показано формирование волн на гладкой ленте простым поворотом ребер как индивидуальных выборок. В данном случае не переместилась ни одна вершина - они все еще сохраняются на исходной гладкой плоскости. Однако внутренние вершины сместились благодаря самой природе лоскутов Безье.

Как и лоскуты, ребра не могут влиять на внутренние вершины, которые находятся в режиме Manual Interior. Данные вершины остаются вне трансформации ребра. Перевод лоскута в режим Auto Interior возвращает внутренние вершины к их положениям по умолчанию и трансформации ребер теперь будут оказывать на них влияние.

ПРЕДУПРЕЖДЕНИЕ

Ребра лоскута рассматривают локальную систему координат в качестве мировой и всегда поворачивают и масштабируют вокруг начальной точки системы World. Таким образом использование локальной системы координат на уровне Edge не поощряется.

Добавление лоскутов

Главная причина перехода на уровень Edge заключается в добавлении лоскутов. Добавление ребер является единственным способом расширения границы лоскутного объекта, который отличается от объединения. Добавляемые ребра объединяются с выбранным ребром. Оставшиеся вершины нового лоскута (две для Quad или одна для Tri) свободны для манипуляций. В большинстве случаев они объединяются с другими лоскутами.

Добавление ребер не является столь уж фундаментальным изменением, как это может вначале показаться. После выделения ребра вы щелкаете на Add Tri или Add Quad для выбора типа лоскута. Неочевидно то, что каждое выбранное ребро получает лоскут. Это может оказаться проблемой в случае создания дублирующих лоскутов там, где кажется имеется только один. Рисунок 14.24 демонстрирует типичную ситуацию, при которой случайно добавились лишние лоскуты из-за того, что было выбрано слишком много ребер. Как показывает нижнее правое видовое окно, дублирующиеся ребра можно отделить друг от друга для просмотра дубликатов.

Корректный метод добавления лоскутов во внутренние углы заключается в выделении единственного ребра (смотрите нижнее левое видовое окно на рисунке 14.25). После добавления новых лоскутов вернитесь на уровень Vertex, выполните Select All и объедините весь лоскут так, чтобы вновь добавленные лоскуты разделяли смежные ребра. При добавлении лоскутов к внешним ребрам не требуется настоль большого внимания. Обычно места для размещения новых лоскутов очевидны. Рисунок 14.26 показывает добавление TriPatch к QuadPatch и затем перемещение вершин для создания начальных штрихов цветка.

Новые лоскуты добавляются к лоскутам, принадлежащим выбранному ребру, по касательной (тангенциально). При добавлении лоскутов к более органическим моделям (рис. 14.26) результирующие лоскуты могут легко проектироваться под странными углами. Когда вы закрываете прорехи или сшиваете части, направление диктует ребро, выбранное для получения нового лоскута. К счастью не имеет значения, какое ребро будет выделяться, поскольку при объединении с существующим лоскутом новый лоскут перенимает непрерывность. Выбор ребра для добавления лоскута должен основываться на том, что обеспечивает наиболее приемлемый результат. Если лоскут появляется под острым перекошенным углом, отступите назад и выберите для добавления другую сторону. Обычно цель заключается в создании лоскута, имеющего легко выбираемые вершины для последующей трансформации или операции объединения.

Как указывалось в начале главы, тип добавляемого лоскута влияет на то, как он деформируется и как себя ведет. Хотя это вполне законно, но следует быть особенно внимательным при смешивании двух типов лоску-тов, поскольку методы редактирования в модели будут отличаться. Например, закрывая органический объект, основанный на QuadPatch, может показаться, что в каких-то соединениях проще применить TriPatch. В результате появляются очень трудные для сглаживания области, так как различные лоскуты по разные стороны ребра сгибаются фундаментально разными способами. Рисунок 14.27 показывает ситуацию, где TriPatch был добавлен посреди QuadPatch. В результате появилось ребро, которое для сглаживания гребня все еще нуждается в определенной настройке векторной ручки вершины.

Лоскутное моделирование на уровне Vertex

Уровень Vertex (см. рис. 14.28) - это то, где происходит большая часть лоскутного моделирования. Дело в том, что Vertex является единственным уровнем, на котором доступны критические тангенциальные вектора. В отличие от каркасных вершин лоскутные вершины и их вектора оказывают значительное влияние на окружающую поверхность. Фактически настройка вершин одного лоскута похожа на трансформацию вершин одного каркасного элемента с опцией Affect Region.

СОВЕТ

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

Плотность лоскута, управляемая на объектном уровне параметром Steps, не оказывает влияния на редактирование вершин. Низкое значение количества шагов может испортить эффект редактирования, так как граней для показа результирующей кривизны окажется недостаточно. Проводя окончательное редактирование модели, следует увеличить Steps так, чтобы теневые нюансы, диктуемые касательными, во время редактирования были видны. Помните, что параметр Steps всегда без вреда можно уменьшить. Высокие значения параметра не оказывают влияния на размер файла, изменяется только требуемый объем RAM.

Фильтры вершин весьма полезны, хотя их флажки могут сбивать с толку. Когда включены обе опции (состояние по умолчанию), можно выделять ручки как вершин, так и векторов. Щелчок на Vertex отфильтровывает вершины таким образом, что можно выделять только векторные ручки, а щелчок на Vectors отфильтровывает векторы так, что можно выбирать только вершины. Несколько странное переключение опций предотвращает отфильтро-вывание и векторов и вершин, поскольку в этом случае выбирать было бы нечего. Но даже, если перед выбором фильтровать Vertices, нет возможности влиять на векторы, потому что они отображаются только тогда, когда их вершины выбраны. Для работы только с векторными ручками следует выполнить Select All и затем установить Filter Vertices. В основном фильтры используются тогда, когда векторные ручки совпадают или находятся близко к вершинам и требуется гарантировать выбор чего-то одного.

Трансформация ручек вершин и векторов

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

При настройке тангенциальных ручек вершин важно помнить, что с ними нельзя выполнить анимацию. Лоскутная анимация подобъектов всегда имеет место с модификаторами XForm или Linked XForm и оба видят только вершины. При разработке лоскутной модели для анимации вышесказанное следует принимать во внимание. Если необходимо выполнить анимацию векторной ручки, можно поделить лоскут и выполнить анимацию результирующих вершин. Вы обнаружите, что новые вершины реагируют подобно ручкам. Можно выполнить анимацию всех векторных ручек вершин, применив масштаб XForm или вращение одной вершины. После этого вектора масштабируются и вращаются вокруг вершины унифицированным способом, не затрагивая самой вершины.

СОВЕТ

Вновь введенные модификаторы FFD (Free Form Deformation - свободная деформация формы) могут выполнить анимацию поверхности лоскутов способом, который очень похож на настройку тангенциальных ручек. Модификаторы FFD сохраняют модель как лоскут и являются в высшей степени полезными инструментами для манипулирования лоскутными моделями.

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

СОВЕТ

Для перемещения одной векторной ручки в точности вдоль вектора масштабируйте ручку и она будет двигаться коллинеарно родительской вершине. #PЩелкнув на вершине правой кнопкой мыши или выбрав вершины, вы получаете возможность редактировать тип их вектора. Данная процедура похожа на соответствующую процедуру для сплайновых вершин, за исключением того, что существуют только две опции - coplanar и corner. Опция Corner предоставляет возможность настраивать каждый вектор независимо, при этом редактирование одного вектора не оказывает влияния на остальные. Подобная настройка не затрагивает гладкость пути или непрерывность. Опция Coplanar настраивает ручки Vertex на копланарность друг с другом и затем замыкает вектора так, чтобы они поддерживали свои копланарные отношения. Удивительным может показаться то, что копланарная настройка не гарантирует и не порождает тангенциальное затрагиваемых лоскутов. Она только выравнивает векторные ручки на общей плоскости.

В случае применения опции Coplanar при манипулировании одной ручкой все ручки изменяются для поддержания копланарных отношений. Единственный способ перемещения одной ручки и не затрагивания других заключается в масштабировании. Вершины, которые имеют только два вектора (находящиеся во внешних углах) всегда обрабатываются как Corner, поскольку для определения плоскости требуется три точки. Хотя изменение вершины с Corner на Coplanar часто незначительно меняет кривизну, изменение с Coplanar на Corner не оказывает никакого начального эффекта на поверхность лоскута.

СОВЕТ

При моделировании органических форм, очевидно, будут применяться вектора Corner и затем перед самым завершением работы они изменятся на Coplanar. Такой прием дает большую свободу в манипулировании каждой вершиной и сосредоточенности на форме.

Когда используется локальная система координат, трансформация вершин лоскутов отличается от трансформации лоскутов или ребер. Если Local активна, вершины вращаются и масштабируются вокруг локальных осей, которые выровнены так же, как и сам объект. Это не зависит от опции текущей точки вращения. Сказанное означает, что при использовании с вершинами локальной системы координат, опция Use Selection Center эффект не оказывает. Несмотря на свою сложность, данная возможность позволяет независимо вращать или масштабировать вершины - с эффектом, который заключается в том, что векторные ручки вращаются и перемещаются к и от статических вершин. Если их требуется вращать относительно общего центра, то выберите другой тип системы координат (например, Parent).

Опция Lock Handles блокирует ручки так, что настройка одной влияет на другую. Только когда ручка двигается вдоль своего вектора (масштабируется), другие остаются без влияния. Lock Handles является глобальным параметром для лоскутного объекта, который идентичен по своему воздействию на ручки установке параметра Coplanar. На практике, вероятно, данные параметры включаться не будут. Их основное применение состоит в настройке вершин Corner, которые требуют, чтобы их ручки поддерживали постоянные взаимоотношения.

Объединение

Объединение вершин представляет собой метод соединения лоскутов или "спайка" разомкнутых ребер вновь добавленных лоскутов. Объединение работает в сочетании с пороговым значением Threshold. Значение порога указывает дистанцию, на которой вершины должны находиться друг от друга для того, чтобы успешно объединиться. Вершины, находящиеся в пределах пороговых значений друг от друга, перемещаются в новые усредненные положения. В отличие от каркасных вершин для объединения вершин лоскутов применяется ряд новых правил:

  • Нельзя объединять две вершины одного и того же лоскута.
  • Лоскуты должны принадлежать одному объекту.
  • Объединение может осуществляться только между разомкнутыми ребрами.
  • Объединение не получится, если результат будет формировать ребро, которое можно использовать более чем двумя лоскутами.
  • При попытке объединения вершины, которая не находится на разомкнутом ребре, в силу приведенных ограничений объединение игнорируется.

Позиционное усреднение, происходящее с объединяемыми вершинами, может быть либо тем, что требуется, либо может привести к ужасной путанице. Хотя EditPatch не имеет опции Weld Target (как в EditMesh), однако предоставляет возможность управления посредством несколько скрытого метода. Можно сохранять вершину неподвижной и заставить другую вершину приблизиться к ней просто выделив лоскут (на уровне Patch), к которому принадлежит результирующая вершина. Во время объединения вершины выделенных лоскутов передвигаться не могут, если только другая объединяемая вершина также не является частью выделенного лоскута.

СОВЕТ

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

Объединение лоскутов имеет несколько "магический" оттенок благодаря тому, что объединенные лоскуты становятся тангенциальными и гладкими. При объединении ребра, которые определяются векторными ручками и вершинами, имеют новые точки интерполяции. Благодаря этому кривые Безье порождают натурально гладкую поверхность. Рисунок 14.29 показывает, как несколько добавленных лоскутов гладко начинаются на своих добавленных ребрах. Они становятся непрерывными, когда их угловые вершины близко притягиваются друг к другу и объединяются. Чудесное свойство кривых Безье в том и заключается, что они поддерживают непрерывность между смежными кривыми, в данном случае - между лоскутами.

Работая с симметричными моделями, подобными носам и лицам, весьма удобно моделировать только половину формы. При возникновении необходимости видеть другую половину следует зеркально отобразить модель относительно центрального ребра и сделать новый объект экземпляром или ссылкой. В результате когда вы работаете с одной стороной, производимые изменения дублируются и на другой. На рисунке 14.30 показана такая технология применительно к голове, где все редактирования, сделанные на одной стороне, динамически во время работы отражаются и на другой. После завершения моделирования присоедините вторую сторону к первой и объедините (как это сделано в нижнем правом виде на рисунке 14.30).

СОВЕТ

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

Удаление

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

Поддержка лоскутного режима

При работе с лоскутами меньше всего хочется ввести в Modifier Stack что-то такое, что заставит лоскутный объект преобразоваться в каркас. Определенные модификаторы всякий раз форсируют такое преобразование, поэтому их следует использовать только на самой вершине стека так, чтобы лоскутное моделирование продолжалось ниже без проблем. Модификаторы, которые сконструированы для работы с каркасами и гранями (практически все, имеющие дело с поверхностью) должны конвертировать объект в каркас. В Выпуске 1.1 следующие модификаторы в случае применения всегда преобразуют лоскуты в каркасы:

EditMesh Smooth VolumeSelect Relax Material Normal MeshSmooth Optimize

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

Единственным модификатором, связанным с поверхностью, который можно применять при редактировании лоскутов, - это UVW Map. Дело в том, что объектные классы как каркасов, так и лоскутов, принадлежат к "отображаемому" классу, который позволяет модификаторам хранить отображение, не влияя на топологию. К сожалению то же самое нельзя сказать о сглаживании, материалах и нормалях, что указывает на очень значительный аспект лоскутного редактирования - гладкость модели полностью зависит от ее тангенциаль-ности и конструкции.

Использование модификаторов на лоскутах

Модификаторы можно добавлять в историю редактирования лоскутов в основном тем же способом, по которому они добавляются к каркасам. Не забывайте избегать модификаторов Optimize, Relax и MeshSmooth. Хотя модификаторы действуют для каркасов и лоскутов одинаково, их эффект обычно различный. И каркасы, и лоскуты модифицируются своими вершинами. Лоскуты отличаются тем, что их вершины являются управляющими точками и не принадлежат поверхности. Таким образом модификатор, манипулирующий вершинами лоскутов, очевидно оказывает более сильное влияние на поверхность, чем модификатор, манипулирующий вершинами каркасных элементов. Рисунок 14.32 показывает перемещение модификатора Displace по диагонали поверхности лоскута. Во всех четырех кадрах модификатор был на одном уровне и его значения не изменялись. Причина существенно разного эффекта состоит в том, что управляющие вершины лоскута были смещены и поскольку они определяют поверхность лоскута через интерполяцию, то поверхность также значительно сместилась.

ПРИМЕЧАНИЕ

Если имеется лоскутная модель и необходимо, чтобы результат вел себя как каркас, а не как лоскут, поместите в конец стека редактирования какой-нибудь простой модификатор типа Normal, который преобразует модель в каркасную. Рисунок 14.33 показывает ту же самую четырехкадровую модель из рисунка 14.32, за исключением того, что между EditPatch и Displace был вставлен модификатор Normal, превративший лоскут в каркас.

Переключение с лоскутного моделирования на каркасное происходит безболезненно благодаря тому, что сложность поверхности модели не меняется. Для определения результирующего каркаса используется поверхность, определенная параметром Steps из EditPatch. Добавление дополнительного модификатора EditPatch после каркасного редактирования значительно увеличивает сложность геометрии модели, поскольку каждая грань превращается в TriPatch. В идеале вы должны выполнить все каркасное редактирование после лоскутного и вернуться к лоскутному редактированию, перейдя ниже по стеку Edit History.

ПРИМЕЧАНИЕ

Будьте внимательны при возврате к EditPatch после каркасного моделирования. Дело в том, что параметр Steps влияет на упорядоченность вершин и граней, используемых последующими каркасными модификаторами.