Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ponimayka1

.pdf
Скачиваний:
131
Добавлен:
07.06.2015
Размер:
37.11 Mб
Скачать

Начинка и устройство майских полигонов

Начну материал о том, как устроены полигоны, с рассказа про трехмерные сканеры. Некоторые эрудированные умы наверняка слышали про такое чудо техники. Такие сканеры бывают разных типов и размеров, однако на выходе у них всегда один и тот же результат - облако точек (есть специальные трехмерные форматы, описывающие такой тип данных), то есть набор трехмерных координат. Причем набор немаленький в среднем миллион точек. Если повезет, то в придачу к такому набору выдается текстура цвета. Если совсем повезет, то программное обеспечение, идущее вместе со сканером выдаст вам вместе с облаком точек и полигональную сетку, обтягивающую зто облако. А дальше начнется веселый процесс называемый «реконструкцией поверхности», ибо анимировать или текстурировать такую плотную сетку невозможно. Два основных (но не единственных) пути реконструкции таких поверхностей заключаются в следующем.

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

Во втором случае используется программное обеспечение типа Paraform (http://www. paraform.com/paraform.html) или Cyslice (http://www.headus.com/au/home.html), которое автоматизирует процесс «обтяжки» облака точек и может выдать наружу набор сплайновых патчей или даже сабдив-поверхность, притом вместе с картой дисплейсмента, учитывающей разницу между оригинальной и отредактированной поверхностями. Рисовать границы патчей, однако, вам придется вручную, иначе топология будет непригодна для анимации.

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

Таким образом, кроме вершин, существуют еще ребра (edges), соединяющие вершины. Грани (faces) являются производными компонентами и однозначно: определяются как

заполненная область между вершинами и ребрами.

MAYA не накладывает ограничений на количество вершин для одной грани, соответственно одна грань может быть образована десятью вершинами.

281

Как следует из давно забытой школьной программы, три точки всегда лежат в одной плоскости, а четыре или пять далеко не всегда. Если вершины грани лежат в одной плоскости такая грань называется планарной (planar), в противном случае, как это ни странно звучит непланарной (non-planar).

Несмотря на то, что одна грань может содержать произвольное количество вершин выделяют два основных типа граней: треугольники (triangles) и четырехугольники (quadrangles.) О преимуществах четырехугольников и недостатках треугольников речь пойдет позже. А пока я могу добавить, что каждая четырехугольная грань всегда может быть разбита на две треугольных и что в процессе рендеринга такое разбиение обычно и происходит (если речь идет о рендерерах традиционной архитектуры). Вы можете посмотреть, как MAYA делает это, выбрав поверхность и включив в Attribute Editor галку Display Triangles в разделе Mesh Component Display. Забегая вперед, могу лишь дать первый практический совет.

Совет. Держитесь четырехугольников. Планарных, притом.

Кстати, в MAYA вообще нет такой компоненты, как треугольники. Только грани (faces). Если вы возьмете кубик и оставите у него две противоположные грани, удалив остальные,

MAYA все равно будет рассматривать эти две отдельно стоящие грани как одну полигональную поверхность (mesh). Для обозначения неразрывных областей иногда используется понятие Shell (оболочка), хотя принципиального значения этот термин не несет.

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

После того, как вы смоделируете свой

шедевр, у вас может появиться странное

желание - назначить материалы и, более того,

положить на объект текстуры. В случае со

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

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

Для совсем пытливых умов могу добавить, что в вершинах можно хранить не ТОЛЬКО текстурные координаты, но и другие произвольные данные, которые не будут использованы самой MAYA, но будут полезны при передаче модели в игровой движок. Эти данные называются Blind Data и никак не используются при моделировании внутри самой MAYA.

282

Терминология

Помучившись с терминами в предыдущем отрывке, я понимаю, что и здесь нужны традиционные терминологические комментарии. Полигональное моделирование произвело на свет самое большое количество майского жаргона. Бывалого майщика не удивит фраза типа: "Эти фейсы надо проэкструдить, потом эйджи забивелить и не забыть смерджить вертексы, после чего можно смусить». Чтобы перевести это на книжный язык потребуется в три раза больше слов, поэтому я был бы рад остаться в рамках устной традиции, но боюсь, что начинающие трехмерщики, еще недостаточно овладевшие искусством майского Полидзен , могут просто испугаться, открыв книжку на каком-нибудь «просплитованном фейсе». Поэтому я буду вынужденно сохранять баланс

между краткостью и доступностью.

«Фейсы» будут гранями. «Эйджи» ребрами. «Вертексы», по мере возможности, будут вершинами, но иногда сила привычки будет брать верх и пара вертексов все же проскользнет на страницы. С нормалями проблем нет. Слово «планарный», оказывается, совершенно легально. Со всякими «смусами» (smooth), «клинапами» (clean-up), «сплитами» (split) и «экструдами» (ex­ trude) я буду выкручиваться по контексту, по крайней мере слово «экструдированный», похоже, прозвучит не раз, тем более, что словарь Lingvo-Science уже дает на это добро. К сожалению, термин «меш» (или «мешь» - mesh), удобный своей краткостью и «интернациональностью», придется игнорировать хотя бы потому, что неизвестен его род и поэтому непонятно, надо ли ставить мягкий знак в конце слова. Придется писать ... эх... «полигональная поверхность»...

Восьмая версия - внимание, диверсия!

Как я уже писал в главе про интерфейс, в команде разработчиков MAYA сидит специально обученный человек, который занимается тем, что слегка меняет структуру меню MAYA от версии к версии, чтобы пользователь не утрачивал чувства новизны и находился в священном напряжении, разбираясь со очередной версией. Однако в восьмой версии этот диверсант похоже вышел из под контроля и покромсал в клочья меню для работы с полигонами, полностью переделав его структуру. Более того, набор меню для работы с полигонами теперь представляет собой отдельный Menu Set (раньше полигональные инструменты были объединены со средствами моделирования сллайновых поверхностей и сабдивов). Как следствие изменилась последовательность горячих клавиш (F2, F3, F4,...) для выбора нужных наборов меню. В общем произошла санкционированная диверсия, ибо разыскать привычные полигональные инструменты теперь стоит большого труда. К сожалению, материал данной главы был написан для седьмой версии, и задача розыска упомянутых ниже операций и инструментов ложится на плечи читателя. Хорошо хоть названия самих операций остались прежними, поэтому методом пристального взгляда их можно отыскать в новом наборе меню, который представляет собой восемь новых названий: Select, Mesh, Edit Mesh, Proxy, Normals, Color, Create UVs, Edit UVs. Кроме того, в главном меню Help есть пункт Find Menu, позволяющий найти в безумном майском меню нужную операцию по ее названию.

Нормальные нормали

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

283

Однако создав сферу, вы видите довольно гладкую и упитанную поверхность, где не заметно границ между гранями.

Дело в том, что в MAYA используются два вида нормалей: нормали граней и нормали вершин. Нормаль грани, как был сказано выше, всегда перпендикулярна грани и - условно говора - «торчит» из центра грани. Она определяет, где у грани передняя сторона, а где задняя. По умолчанию в MAYA видны обе стороны граней, однако вы можете изменить это, установив да выбранной поверхности в Attribute Editor параметр Backface CuUing-full.

284

Нормали граней (face normals) используются для моделирования и определения видимости граней.Однако для освещения используются нормали, находящиеся в вершинах (vertex normals). Эти нормали как раз и отвечают за сглаженность поверхности. Освещение (или затенение) точки на поверхности определяется в результате использования угла между лучом света, падающим на эту точку, и нормалью из нее исходящей. Соответственно, если вдоль каждой грани все нормали направлены одинаково, то мы получим фасеточный вариант затенения. Однако, внимательно рассмотрев любую полигональную поверхность (для этого включим в Attribute Editor галку Display Normal и установим Normal Type=vtxface), мы обнаружим необыкновенную вещь: из каждой вершины исходит несколько нормалей. Их количество в каждой вершине соответствует количеству граней, которые примыкают к этой вершине. Что вполне логично.

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

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

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

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

Следует понимать, что нормаль для грани вычисляется однозначно на основе формы грани, а вот вершинные нормали могут принимать любые значения: чтобы вы могли управлять степенью визуальной сглаженности поверхности, как вам угодно. Вы сами можете редактировать вершинные нормали с помощью инструмента Edit Polygons=>Normals=> vertex Normal Edit Tool и Set Vertex Normal. Также следует понимать, что такая сглаженность не добавляет новых компонент и не имеет ничего общего с операции Smooth: это всего лишь трюк с освещением.

Примечание. В

восьмой

версии меню Normals выделилось в отдельный пункт

главного меню.

Ищите

упомянутые операции там.

С вершинными нормалями связано понятие жестких и мягких ребер (hard edges и soft edg­ es). Для жестких ребер направление нормалей освещения по разные стороны ребра на соседних гранях разное. Для мягких ребер нормали освещения на соседних гранях совпадают около ребра, поэтому переход освещения с грани на грань происходит плавно.

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

Вы можете изменять жесткость/мягкость ребер с помощью операции Edit Polygons=>Norm als=>Soften/Harden, задавая пороговое значение угла, меньше которого все ребра буду считаться мягкими.

Операция Edit Polygons=>Normals=>Set to Face позволяет сделать все ребра жесткими, установив вершинные нормали равными нормалям для граней.

Заканчивая разговор про нормали, хочется добавить, что в меню Normals только две операции работают с нормалями для граней: это Reverse (она разворачивает нормаль в другую сторону) и Conform (эта разворачивает все нормали для выбранных граней так, чтобы они - все! -смотрели в одну сторону).

285

Работа с компонентами

Итак, основными компонентами полигональных поверхностей являются вершины, ребра. грани, UV-координаты. Периодически их придется выбирать и что-то с ними делать. Существует два основных способа выбора компонент и соответственно два сообщества, исповедующих тот или иной способ.

Первый путь состоит в использовании компонентного режима выбора и использования масок выбора компонент (Selection Masks), доступных на Status Line.

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

F9 - vertex (вершины)

F10 - edge(ребра)

F11 - face (грани)

F12 - UV

Преимущество компонентного режима в том, что вы гарантированно выбираете заданный тип компонент и что никакие объекты с более высоким приоритетом выбора (например, кости) не будут путаться у вас под курсором и мешать выбирать компоненты.

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

286

Специально для ускорения работы с полигонами существует еще несколько трюков. Если нажать Ctrl вместе с правой кнопкой мыши, то в появившемся Marking Menu будут содержаться основные операции для работы с компонентами: например, это конвертирование выбранных компонент в другой тип.

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

287

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

Эффективный выбор компонент

Приведу несколько практических приемов для быстрого и эффективного выбора.

Довольно часто начинающие пользователи спрашивают о том, как избежать выбора компонент с обратной стороны поверхности, например, сферы. Можно, конечно, включить отсечение невидимых граней (Backface Culling), однако я настоятельно рекомендую поиграть с Edit=>Paint Selection Tool. Трюк состоит в том, что сначала надо выбрать нужный тип компонент через Marking Menu, а затем вызвать этот инструмент, с помощью которого вы сможете выбирать нужные компоненты с помощью кисти, раскрашивая области выбора.

Примечание. В восьмой версии инструмент Paint Selection Tool переехал на панель Toolbox, где располагается третьим сверху.

В параметрах этого инструмента можно выключить опцию Add to Current Selection и использовать клавишу Shift для выбора нескольких областей. Попробуйте, это жутко удобно.

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

Одним из плюсов при работе с полигонами является возможность выбрать часть компонент объекта, а всю остальную сцену мгновенно спрятать и работать только с выделенной частью поверхности. Это осуществляется с помощью операции Isolate Select, которая находится в меню панели камеры: Show=>lsolate Select=>View Selected. Чтобы вернуться к обычному режиму, надо вызвать этот пункт меню еще раз.

288

Последние версии MAYA также порадовали любителей моделирования большим количеством мелких «примочек», автоматизирующих рутинные процессы выбора соседних компонент, объединенных в цепочки. Наподобие выбора изопарм или целых рядов контрольных точек для сплайновых поверхностей. Это прежде всего Edit=>Select Edge Loop Tool, позволяющий выбрать цепочку из ребер, образующих линию типа изопармы. Достаточно сделать двойной щелчок на нужном ребре, и все соседние ребра, образующие линию будут автоматически выбраны. Можно также выбирать первое и последнее ребро, для того, чтобы выбрать также все промежуточные ребра. Можно выбирать несколько таких линий, щелкая в начале и в конце отрезка из ребер.

Аналогичный инструмент называется Edit=>Select Edge Ring Tool и позволяет выбирать не линии из ребер, а как бы «полоски» из параллельных. Эти «полоски» могут быть преобразованы в грани, образующие длинные «ленты».

Кстати, вместе с этими инструментами появились и новые Edit Polygons=>Split Edge Ring Tool и Edit Polygons=>Duplicate Edge Loop Tool, позволяющие вставлять полигональные «изопармы» одним щелчком мыши.

Выбрав одни компоненты, вы можете быстро сконвертировать их в другие. Это бывает очень полезно. Например, выделив ребро, вы хотите двигать его по нормали к поверхности, однако включив в установках Move Tool опцию Move=Normal, вы получите сообщение о том, что по нормали можно двигать только вершины. Ничего страшного. Нажмите Ctrl и правую кнопку мыши, затем выберите То Vertices. Другие полезные операции по работе с селекциями находятся в Edit Polygons=>Selection. И там же обратите внимание на горячие клавиши.

289

Примечание.В восьмой версии инструменты выбора компонент выделены в отдельное меню Select, где их и следует разыскивать.

Кстати, очень часто MAYA автоматически конвертирует выбранные компоненты из одного типа в другой. Например, если выбрав ребро, вы выполните операцию Extrude Vertex, MAYA автоматически выберет вершины на концах ребра и сделает для них указанную операцию. Кроме того, если вы выберете объект целиком и сделаете какую-нибудь «компонентную» операцию (типа Extrude Face), MAYA по умолчанию сконвертирует выбранный объект во все его компоненты соответствующего типа, выполнит для них операцию, да при этом еще и перейдет в компонентный режим.

Для тех, кто занимается промышленным дизайном или архитектурой, полезно будет изучить окно Edit Polygons=>Selection=>Seiection Constrants... (в восьмой версии Select=>Select Using Соn straints). Оно позволяет задать всевозможные фильтры на выбираемые компонены: например, выбирать только грани, находящиеся под определенным углом к линии взгляда. Таких фильтров - десятки, и нет смысла разбирать каждый из них.

Немного о перетаскивании вершин

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

290

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]