Разное

Полигон в графике – Что такое полигональная графика? — Блог Everypixel Studio

05.06.2020

Содержание

Что такое полигональная графика? — Блог Everypixel Studio

Хотите больше узнать о полигональной графике? Для чего она используется? Как сделать что-то в этой технике? Да? Тогда вы настоящий дизайнер, готовый развиваться, и расти как профессионал!

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

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

Что такое полигональная графика?

 

Полигон (от греч. polýgonos – многоугольный), полигональная линия (математическая), ломаная линия, составленная из конечного числа прямолинейных отрезков (звеньев). Под полигоном также понимают замкнутую ломаную линию, т. е. многоугольник.

 

Где используются полигоны?

Ответ очевиден – в цифровой графике, конечно же! Это своего рода разновидность цифрового искусства. Изначально полигональная графика появилась в 3D моделировании для создания видеоигр. Благодаря низкому разрешению у таких объектов была высокая скорость рендеринга. Также отображение в виде каркаса позволяет экономить ресурсы компьютера и облегчает работу с моделью. Затем уже она стала популярна и в так называемой 2D графике.

 

В какой программе можно создавать полигональные изображения?

Если вы работаете в 3D, то для вас будет вполне естественно делать это в 3D max, Maya, или Cinema 4D. Последнее ПО настолько дружелюбно, что в нем может рисовать даже ребенок. В целом, полигональная графика достаточно проста в создании, особенно если сравнивать с архитектурной визуализацией или фотореалистичным рендерингом. Она напоминает ранние дни компьютерного моделирования и анимации с налетом современных техник. А так как ретро стиль всегда в моде, практически все дизайнеры создают ее с помощью старых приемов.

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

Также можно создавать полигональные шедевры в таких программах как Adobe Illustrator, CorelDraw и даже Adobe Photoshop. Эти программы, в отличие от специфичных 3D пакетов, хорошо знакомы большинству дизайнеров.

 

Историческая справка

А знаете ли вы, что полигональному дизайну предшествовало целое направление в искусстве? В начале XX века зародилось и стало невероятно популярным экспрессионистское течение. Появление фотографии только подстегивало художников, ведь теперь можно было запечатлеть образ детально, таким, какой он есть на самом деле. Экспрессионисты же напротив, стремились передать суть, настроение и характер объекта. Они намеренно уходили от деталей.  В наши дни экспрессионизм не менее популярен как в живописи, так и в среде цифрового искусства.

 

Выдающиеся примеры

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

Железный человек

The Kingdom – The King

Свобода

The little Power Giant

What is the polygon graphics-7

Wedding Invitations

Портрет Лила Уэйна

Уроки

  1. Создание векторных полигонов в Illustrator

В этом уроке вы создадите мозаику в Adobe Illustrator, состоящую из полигонов. В этом несложном деле поможет бесплатный плагин – Scriptographer  и ваше воображение.

 

  1. Как создать векторную полигональную мозаику лайма

Здесь вы научитесь создавать векторную полигональную мозаику из растрового изображения при помощи бесплатного веб инструмента Triangulator и Adobe Illustrator.

 

  1. Создание полигональной графики. Урок в 2-х частях

В этом уроке вы узнаете, как делать портреты с помощью полигонов. Автор показывает, как работать с фото используя и Photoshop и Illustrator, чтобы сделать красивый портрет в модном стиле полигональной графики.

 

  1. Создание полигональной иллюстрации в Photoshop CS6

Этот урок так же подходит вам, если вы работаете в более ранних версиях Photoshop.

 

  1. Создание низкополигональной модели в Cinema 4D

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

 

Заключение

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

 

По материалам сайта: www.onextrapixel.com

Related

studio.everypixel.com

Полигон (компьютерная графика) Википедия

Пример полигональной сетки, изображающей дельфина.

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

Учение о полигональных сетках — это большой подраздел компьютерной графики и геометрического моделирования. Множество операций, проводимых над сетками, может включать булеву алгебру, сглаживание, упрощение и многие другие. Разные представления полигональных сеток используются для разных целей и приложений. Для передачи полигональных сеток по сети используются сетевые представления, такие как «потоковые» и «прогрессивные» сетки. Объёмные сетки отличаются от полигональных тем, что они явно представляют и поверхность и объём структуры, тогда как полигональные сетки явно представляют лишь поверхность, а не объём. Так как полигональные сетки широко используются в компьютерной графике, для них разработаны алгоритмы трассировки лучей, обнаружения столкновений и динамики твёрдых тел.

Математический эквивалент полигональных сеток — неструктурированные сетки — изучаются методами комбинаторной геометрии.

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

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

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

Поверхности, чаще называемые группами сглаживания, полезны, но не обязательны для группирования гладких областей. Представьте себе цилиндр с крышками, такой как жестяная банка. Для гладкого затенения сторон, все нормали должны указывать горизонтально от центра, тогда как нормали крышек должны указывать в +/-(0,0,1) направлениях. Если рендерить как единую, затенённую по Фонгу поверхность, вершины складок имели бы неправильные нормали. Поэтому, нужен способ определения где прекращать сглаживание для того, чтобы группировать гладкие части сетки, также, как полигоны группируют трёхсторонние грани. Как альтернатива предоставлению поверхностей/групп сглаживания, сетка может содержать другую информацию для расчёта тех же данных, такая как разделяющий угол (полигоны с нормалями выше этого предела либо автоматически рассматриваются как отдельные группы сглаживания, либо по отношению к ребру между ними применяется какая-либо техника, как например разделение или скашивание). Также, полигональные сетки с очень высоким разрешением менее подвержены проблемам, для решения которых требуются группы сглаживания, так как их полигоны настолько малы, что нужда в них пропадает. Кроме того, альтернатива существует в возможности просто отсоединения самих поверхностей от оставшейся части сетки. Рендереры не пытаются сглаживать рёбра между несмежными полигонами.

Формат полигональной сетки может определять и другие полезные данные. Могут быть определены группы, которые задают отдельные элементы сетки и полезны для установления отдельных подобъектов для скелетной анимации или отдельных субъектов нескелетной анимации. Обычно определяются материалы, позволяя разным частям сетки использовать разные шейдеры при рендере. Большинство форматов сетки также предполагают UV координаты, которые являются отдельным двухмерным представлением полигональной сетки, «развёрнутым» чтобы показать какая часть двумерной текстуры применяется к разным полигонам сетки.

Представления

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

  • Список граней: описание граней происходит с помощью указателей в список вершин.
  • «Крылатое» представление: в нём каждая точка ребра указывает на две вершины, две грани и четыре (по часовой стрелке и против часовой) ребра, которые её касаются. Крылатое представление позволяет обойти поверхность за постоянное время, но у него бо́льшие требования по памяти хранения.
  • Полурёберные сетки: способ похож на «крылатое» представление, за исключением того, что используется информация обхода лишь половины грани.
  • Четырёхрёберные сетки[неизвестный термин], которые хранят рёбра, полурёбра и вершины без какого-либо указания полигонов. Полигоны прямо не выражены в представлении, и могут быть найдены обходом структуры. Требования по памяти аналогичны полурёберным сеткам.
  • Таблица углов, которые хранят вершины в предопределённой таблице, такой что обход таблицы неявно задаёт полигоны. В сущности, это «веер треугольников», используемый в аппаратном рендеринге. Представление более компактное и более производительное для нахождения полигонов, но операции по их изменению медленны. Более того, таблицы углов не представляют сетки полностью. Для представления большинства сеток нужно несколько таблиц углов (вееров треугольников).
  • Вершинное представление: представлены лишь вершины, указывающие на другие вершины. Информация о гранях и рёбрах выражена неявно в этом представлении. Однако, простота представления позволяет проводить над сеткой множество эффективных операций.

Каждое из представлений имеет свои преимущества и недостатки.[1]

Выбор структуры данных определяется применением, необходимой производительностью, размером данных, операциями, которые будут выполняться. К примеру, легче иметь дело с треугольниками, чем с многоугольниками общего вида, особенно в вычислительной геометрии. Для определённых операций необходимо иметь быстрый доступ к топологической информации, такой как рёбра или соседние грани; для этого требуются более сложные структуры, такие как «крылатое» представление. Для аппаратного рендеринга нужны компактные, простые структуры; поэтому в API низкого уровня, такие как DirectX и OpenGL обычно включена таблица углов (веер треугольников).

Вершинное представление

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

Однако, сетки ВП извлекают выгоду из малого использования памяти и эффективной трансформации. Рисунок 2 показывает пример параллелепипеда изображённый с использованием ВП сетки. Каждая вершина индексирует её соседние вершины. Заметьте, что последние две вершины, 8 и 9 сверху и снизу параллелепипеда, имеют четыре связанных вершины, а не пять. Главная система должна справляться с произвольным числом вершин связанных с любой данной вершиной.

Для более детального описания сеток ВП см. Smith (2006)(англ.).[1]

Список граней

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

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

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

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

«Крылатое» представление

Представленное Брюсом Баумгартом в 1975, «Крылатое» представление явно представляет вершины, грани и рёбра сетки. Это представление широко используется в программах для моделирования для предоставления высочайшей гибкости в динамическом изменении геометрии сетки, потому что могут быть быстро выполнены операции разрыва и объединения. Их основной недостаток — высокие требования памяти и увеличенная сложность из-за содержания множества индексов.

«Крылатое» представление решает проблему обхода от ребра к ребру и обеспечивает упорядоченное множество граней вокруг ребра. Для любого заданного ребра число исходящих рёбер может быть произвольным. Чтобы упростить это, «крылатое» представление предоставляет лишь четыре, ближайшие ребра по часовой и против часовой стрелки на каждом конце ребра. Другие рёбра можно обойти постепенно. Поэтому информация о каждом ребре напоминает бабочку, поэтому представление называется «крылатым». Рисунок 4 показывает пример параллелепипеда в «крылатом» представлении. Полные данные по ребру состоят из двух вершин (конечные точки), двух граней (по каждую сторону), и четыре ребра(«крылья» ребра).

Рендеринг «крылатого» представления графическим оборудованием требует генерирования списка индексов граней. Обычно это делается только когда изменяется геометрия. «Крылатое» представление идеально подходит для динамической геометрии, такой как подразделение поверхностей и интерактивное моделирование, так как изменения сетки могут происходить локально. Обход вокруг сетки, что может пригодиться для обнаружения столкновений, может быть эффективно выполнено.

См. Baumgart (1975) для подробностей (англ.)[2]

Сводка представлений сеток

Операция Вершинное представление Список граней «Крылатое» представление
V-V Все вершины вокруг вершины Явно V → f1, f2, f3, … → v1, v2, v3, … V → e1, e2, e3, … → v1, v2, v3, …
E-F Все рёбра грани F(a, b,c) → {a, b}, {b, c}, {a, c} F → {a, b}, {b, c}, {a, c} Явно
V-F Все вершины грани F(a, b,c) → {a, b,c} Явно F → e1, e2, e3 → a, b, c
F-V Все грани вокруг вершины Поиск пары Явно V → e1, e2, e3 → f1, f2, f3, …
E-V Все рёбра вокруг вершины V → {v, v1}, {v, v2}, {v, v3}, … V → f1, f2, f3, … → v1, v2, v3, … Явно
F-E Обе грани ребра Сравнение списков Сравнение списков Явно
V-E Обе вершины ребра E(a, b) → {a, b} E(a, b) → {a, b} Явно
Flook Найти грань с данными вершинами F(a, b,c) → {a, b,c} Пересечение множеств v1,v2,v3 Пересечение множеств v1,v2,v3
Размер памяти V*avg(V,V) 3F + V*avg(F,V) 3F + 8E + V*avg(E,V)
Пример с 10 вершин, 16 граней, 24 ребра:
10 * 5 = 50 3*16 + 10*5 = 98 3*16 + 8*24 + 10*5 = 290
Рисунок 5: сводка операций представлений сеток

В представленной выше таблице, явно указывает на то, что операция может быть выполнена за постоянное время, так как хранятся непосредственные данные; сравнение списков указывает на то, что для выполнения операции должно быть выполнено сравнение двух списков; и поиск пары указывает на то, что должен быть выполнен поиск двух индексов. Обозначение avg(V,V) означает среднее число вершин, соединённых с заданной вершиной; avg(E,V) означает среднее число рёбер соединённых с заданной вершиной, и avg(F,V) — среднее число граней, соединённых с заданной вершиной.

Обозначение «V → f1, f2, f3, … → v1, v2, v3, …» показывает что для выполнения операции необходим обход вокруг нескольких элементов. К примеру, чтобы получить «все вершины вокруг заданной вершины V» используя список граней, нужно сначала найти грани вокруг заданной вершины V используя список вершин. Затем, из этих граней, используя список граней, найти вершины вокруг них. Заметьте, что «крылатое» представление хранит почти всю информацию в явном виде, и другие операции всегда обходят сначала ребро, чтобы получить дополнительную информацию. Вершинное представление — единственное представление, которое в явном виде хранит соседние вершины заданной вершины.

С увеличением сложности представлений (слева направо в сводке), количество информации, хранящейся в явном виде, растёт. Это даёт более прямой, постоянный по времени, доступ к обходу и топологии различных элементов, но ценой увеличения занимаемой памяти для сохранения индексов надлежащим образом.

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

Другие представления

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

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

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

Файловые форматы

Полигональные сетки могут храниться во множестве файловых форматов:

См. также

Примечания

wikiredia.ru

Что такое ПОЛИГОНАЛЬНАЯ СЕТКА (ПОЛИГОН) в 3D

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

 

Что такое полигональная сетка простыми словами – кратко.

 

Она представляет собой набор вершин, ребер и граней, которые определяют форму многогранного объекта в трехмерной компьютерной графике. По своей сути, когда мы видим 3D модель, мы и видим полигональную сетку, так как составляющие полигональной сетки и образуют формы в созерцаемой нами модели.

 

 

Отображение полигональной сетки.

 

Обычно, когда мы рассматриваем завершенный и отрендеренный 3D объект, то зачастую нам не показывают его в сетчатом виде. Но при создание 3D объекта, художники очень часто используют режим отображения сетки (wire-frame), для того, чтоб правильно строить топологию и формы модели. Работая в этом режиме, художники могут манипулировать составляющими полигональной сетки и тем самым создавать 3D модель нужным им образом с учетом правильной формы и топологии.

 

 

 

Где создается полигональная сетка?

 

Являясь неотъемлемой частью 3D модели, работа над сеткой происходит в компьютерных программах, предназначенных для работы с 3D графиков. Из наиболее популярных программ можно выделить:

 

  • Autodesk Maya;
  • Autodesk 3Ds-max; 
  • Blender;
  • Modo и другие.

 

 

 

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

 

  • Zbrush;
  • Mudbox;
  • 3d-coat и другие.

 

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

 

 

Методы работы с полигональной сеткой.

 

Как правило, большинство программ по работе с 3D графикой имеют огромный арсенал инструментов по работе с моделью. Каждая из программ обладает своими уникальными инструментами и модификаторами, но наиболее распространенные инструменты присутствуют практически в одинаковой форме в каждой программе. Среди инструментов широкого пользования есть такие, как:

 

Extrude — позволяет выдавливать дополнительные полигоны из уже существующих. Является одним из основных инструментов при работе с 3D моделью и позволяет создавать достаточно сложные формы из примитивных фигур.

 

 

 

Cut — Позволяет резать полигоны от грани к грани, от вершины к вершине или же в более свободной форме. Другими словам, является своеобразным инструментом-ножницами, который позволяет перекроить полигональную сетку по своему желанию. Является практически обязательным инструментом любого 3D художника.

 

 

Bevel (chamfer) — Инструмент, который позволяет делать фаски на геометрии. Он весьма распространен, так как делает формы менее рублеными и более плавными. Всегда используется при работе с высоко детализированными моделями.

 

 

 

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

 

Топология полигональной сетки.

 

Простыми словами, топология — это плавная и потоковая организованность полигонов в 3D модели.

 

Что такое правильная топология?

 

Очень сложно охарактеризовать правильность топологии в несколько слов, так как ее правильность и неправильность может зависеть от конкретного рабочего процесса (пайплайна), той или иной студии в определенной сфере компьютерной графики. Например, если в одном техническом процессе присутствие полигонов с тремя вершинами допустимо, то в другом процессе полигоны с тремя вершинами (трисы) могут быть крайне нежелательными, а предпочтение будет отдаваться полигонам с 4-я вершинами (квадам). Сюда и относится построение сетки под анимируемый или статичный объект или объект под сглаживание (subdivision).

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

 

 

Составляющие полигональной сетки.

 

Полигон — это основная часть полигональной сетки. Он содержит в себе такие элементы как:

 

 

 

Вершина (vertex) — это точка пересечения 3-х или более ребер.

 

При работе с 3D моделями, а конкретнее с полигональной сеткой, вершина зачастую выступает в роли манипулятора, который являются наиболее популярным методом формирования полигональной сетки в ее итоговом виде. Двигая вершины во всех 3-х плоскостях (x,y,z), пользователю удается добиться правильной и нужной ему формы в 3д модели.

 

 

 

Ребро (edge) — Это прямая, которая образуется в любой точки геометрии, при пересечении двух фейсов.

 

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

 

 

Фейс — это плоскость, которая образуется при сочетании не менее трех ребер.

 

Иногда бывает, что “фейс” путают с “полигоном”, но на самом деле, это не одно и тоже, так как “фейс” — это лишь одна из составляющих полигона. Но именно она и отвечает за то, как мы видим объект и как на него ложатся шейдера и текстуры.

 

 

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

 

Виды полигонов в компьютерной графики.

 

Можно выделить три основных вида полигонов:

 

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

 

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

 

 

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

 

 

 

Полигон с пятью вершинами или более. Часто именуется как “N — Gon”.

Имеет пять или более пяти сторон и вершин. Является крайне нежелательным полигоном практически в любом рабочем процессе. Часто N — гоны создают трудности в виде артефактов при текстурировании, рендере и анимации, а также плохо поддаются сглаживанию на изгибистых поверхностях.

 

 

Получи плюсик к карме — поделись добром с друзьми:

VK

Facebook

Twitter

chto-takoe.net

Полигон (трёхмерная графика) Википедия

Пример полигональной сетки, изображающей дельфина.

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

Учение о полигональных сетках — это большой подраздел компьютерной графики и геометрического моделирования. Множество операций, проводимых над сетками, может включать булеву алгебру, сглаживание, упрощение и многие другие. Разные представления полигональных сеток используются для разных целей и приложений. Для передачи полигональных сеток по сети используются сетевые представления, такие как «потоковые» и «прогрессивные» сетки. Объёмные сетки отличаются от полигональных тем, что они явно представляют и поверхность и объём структуры, тогда как полигональные сетки явно представляют лишь поверхность, а не объём. Так как полигональные сетки широко используются в компьютерной графике, для них разработаны алгоритмы трассировки лучей, обнаружения столкновений и динамики твёрдых тел.

Математический эквивалент полигональных сеток — неструктурированные сетки — изучаются методами комбинаторной геометрии.

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

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

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

Поверхности, чаще называемые группами сглаживания, полезны, но не обязательны для группирования гладких областей. Представьте себе цилиндр с крышками, такой как жестяная банка. Для гладкого затенения сторон, все нормали должны указывать горизонтально от центра, тогда как нормали крышек должны указывать в +/-(0,0,1) направлениях. Если рендерить как единую, затенённую по Фонгу поверхность, вершины складок имели бы неправильные нормали. Поэтому, нужен способ определения где прекращать сглаживание для того, чтобы группировать гладкие части сетки, также, как полигоны группируют трёхсторонние грани. Как альтернатива предоставлению поверхностей/групп сглаживания, сетка может содержать другую информацию для расчёта тех же данных, такая как разделяющий угол (полигоны с нормалями выше этого предела либо автоматически рассматриваются как отдельные группы сглаживания, либо по отношению к ребру между ними применяется какая-либо техника, как например разделение или скашивание). Также, полигональные сетки с очень высоким разрешением менее подвержены проблемам, для решения которых требуются группы сглаживания, так как их полигоны настолько малы, что нужда в них пропадает. Кроме того, альтернатива существует в возможности просто отсоединения самих поверхностей от оставшейся части сетки. Рендереры не пытаются сглаживать рёбра между несмежными полигонами.

Формат полигональной сетки может определять и другие полезные данные. Могут быть определены группы, которые задают отдельные элементы сетки и полезны для установления отдельных подобъектов для скелетной анимации или отдельных субъектов нескелетной анимации. Обычно определяются материалы, позволяя разным частям сетки использовать разные шейдеры при рендере. Большинство форматов сетки также предполагают UV координаты, которые являются отдельным двухмерным представлением полигональной сетки, «развёрнутым» чтобы показать какая часть двумерной текстуры применяется к разным полигонам сетки.

Представления

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

  • Список граней: описание граней происходит с помощью указателей в список вершин.
  • «Крылатое» представление: в нём каждая точка ребра указывает на две вершины, две грани и четыре (по часовой стрелке и против часовой) ребра, которые её касаются. Крылатое представление позволяет обойти поверхность за постоянное время, но у него бо́льшие требования по памяти хранения.
  • Полурёберные сетки: способ похож на «крылатое» представление, за исключением того, что используется информация обхода лишь половины грани.
  • Четырёхрёберные сетки[неизвестный термин], которые хранят рёбра, полурёбра и вершины без какого-либо указания полигонов. Полигоны прямо не выражены в представлении, и могут быть найдены обходом структуры. Требования по памяти аналогичны полурёберным сеткам.
  • Таблица углов, которые хранят вершины в предопределённой таблице, такой что обход таблицы неявно задаёт полигоны. В сущности, это «веер треугольников», используемый в аппаратном рендеринге. Представление более компактное и более производительное для нахождения полигонов, но операции по их изменению медленны. Более того, таблицы углов не представляют сетки полностью. Для представления большинства сеток нужно несколько таблиц углов (вееров треугольников).
  • Вершинное представление: представлены лишь вершины, указывающие на другие вершины. Информация о гранях и рёбрах выражена неявно в этом представлении. Однако, простота представления позволяет проводить над сеткой множество эффективных операций.

Каждое из представлений имеет свои преимущества и недостатки.[1]

Выбор структуры данных определяется применением, необходимой производительностью, размером данных, операциями, которые будут выполняться. К примеру, легче иметь дело с треугольниками, чем с многоугольниками общего вида, особенно в вычислительной геометрии. Для определённых операций необходимо иметь быстрый доступ к топологической информации, такой как рёбра или соседние грани; для этого требуются более сложные структуры, такие как «крылатое» представление. Для аппаратного рендеринга нужны компактные, простые структуры; поэтому в API низкого уровня, такие как DirectX и OpenGL обычно включена таблица углов (веер треугольников).

Вершинное представление

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

Однако, сетки ВП извлекают выгоду из малого использования памяти и эффективной трансформации. Рисунок 2 показывает пример параллелепипеда изображённый с использованием ВП сетки. Каждая вершина индексирует её соседние вершины. Заметьте, что последние две вершины, 8 и 9 сверху и снизу параллелепипеда, имеют четыре связанных вершины, а не пять. Главная система должна справляться с произвольным числом вершин связанных с любой данной вершиной.

Для более детального описания сеток ВП см. Smith (2006)(англ.).[1]

Список граней

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

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

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

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

«Крылатое» представление

Представленное Брюсом Баумгартом в 1975, «Крылатое» представление явно представляет вершины, грани и рёбра сетки. Это представление широко используется в программах для моделирования для предоставления высочайшей гибкости в динамическом изменении геометрии сетки, потому что могут быть быстро выполнены операции разрыва и объединения. Их основной недостаток — высокие требования памяти и увеличенная сложность из-за содержания множества индексов.

«Крылатое» представление решает проблему обхода от ребра к ребру и обеспечивает упорядоченное множество граней вокруг ребра. Для любого заданного ребра число исходящих рёбер может быть произвольным. Чтобы упростить это, «крылатое» представление предоставляет лишь четыре, ближайшие ребра по часовой и против часовой стрелки на каждом конце ребра. Другие рёбра можно обойти постепенно. Поэтому информация о каждом ребре напоминает бабочку, поэтому представление называется «крылатым». Рисунок 4 показывает пример параллелепипеда в «крылатом» представлении. Полные данные по ребру состоят из двух вершин (конечные точки), двух граней (по каждую сторону), и четыре ребра(«крылья» ребра).

Рендеринг «крылатого» представления графическим оборудованием требует генерирования списка индексов граней. Обычно это делается только когда изменяется геометрия. «Крылатое» представление идеально подходит для динамической геометрии, такой как подразделение поверхностей и интерактивное моделирование, так как изменения сетки могут происходить локально. Обход вокруг сетки, что может пригодиться для обнаружения столкновений, может быть эффективно выполнено.

См. Baumgart (1975) для подробностей (англ.)[2]

Сводка представлений сеток

Операция Вершинное представление Список граней «Крылатое» представление
V-V Все вершины вокруг вершины Явно V → f1, f2, f3, … → v1, v2, v3, … V → e1, e2, e3, … → v1, v2, v3, …
E-F Все рёбра грани F(a, b,c) → {a, b}, {b, c}, {a, c} F → {a, b}, {b, c}, {a, c} Явно
V-F Все вершины грани F(a, b,c) → {a, b,c} Явно F → e1, e2, e3 → a, b, c
F-V Все грани вокруг вершины Поиск пары Явно V → e1, e2, e3 → f1, f2, f3, …
E-V Все рёбра вокруг вершины V → {v, v1}, {v, v2}, {v, v3}, … V → f1, f2, f3, … → v1, v2, v3, … Явно
F-E Обе грани ребра Сравнение списков Сравнение списков Явно
V-E Обе вершины ребра E(a, b) → {a, b} E(a, b) → {a, b} Явно
Flook Найти грань с данными вершинами F(a, b,c) → {a, b,c} Пересечение множеств v1,v2,v3 Пересечение множеств v1,v2,v3
Размер памяти V*avg(V,V) 3F + V*avg(F,V) 3F + 8E + V*avg(E,V)
Пример с 10 вершин, 16 граней, 24 ребра:
10 * 5 = 50 3*16 + 10*5 = 98 3*16 + 8*24 + 10*5 = 290
Рисунок 5: сводка операций представлений сеток

В представленной выше таблице, явно указывает на то, что операция может быть выполнена за постоянное время, так как хранятся непосредственные данные; сравнение списков указывает на то, что для выполнения операции должно быть выполнено сравнение двух списков; и поиск пары указывает на то, что должен быть выполнен поиск двух индексов. Обозначение avg(V,V) означает среднее число вершин, соединённых с заданной вершиной; avg(E,V) означает среднее число рёбер соединённых с заданной вершиной, и avg(F,V) — среднее число граней, соединённых с заданной вершиной.

Обозначение «V → f1, f2, f3, … → v1, v2, v3, …» показывает что для выполнения операции необходим обход вокруг нескольких элементов. К примеру, чтобы получить «все вершины вокруг заданной вершины V» используя список граней, нужно сначала найти грани вокруг заданной вершины V используя список вершин. Затем, из этих граней, используя список граней, найти вершины вокруг них. Заметьте, что «крылатое» представление хранит почти всю информацию в явном виде, и другие операции всегда обходят сначала ребро, чтобы получить дополнительную информацию. Вершинное представление — единственное представление, которое в явном виде хранит соседние вершины заданной вершины.

С увеличением сложности представлений (слева направо в сводке), количество информации, хранящейся в явном виде, растёт. Это даёт более прямой, постоянный по времени, доступ к обходу и топологии различных элементов, но ценой увеличения занимаемой памяти для сохранения индексов надлежащим образом.

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

Другие представления

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

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

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

Файловые форматы

Полигональные сетки могут храниться во множестве файловых форматов:

См. также

Примечания

wikiredia.ru

Полигональная графика Википедия

Пример полигональной сетки, изображающей дельфина.

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

Учение о полигональных сетках — это большой подраздел компьютерной графики и геометрического моделирования. Множество операций, проводимых над сетками, может включать булеву алгебру, сглаживание, упрощение и многие другие. Разные представления полигональных сеток используются для разных целей и приложений. Для передачи полигональных сеток по сети используются сетевые представления, такие как «потоковые» и «прогрессивные» сетки. Объёмные сетки отличаются от полигональных тем, что они явно представляют и поверхность и объём структуры, тогда как полигональные сетки явно представляют лишь поверхность, а не объём. Так как полигональные сетки широко используются в компьютерной графике, для них разработаны алгоритмы трассировки лучей, обнаружения столкновений и динамики твёрдых тел.

Математический эквивалент полигональных сеток — неструктурированные сетки — изучаются методами комбинаторной геометрии.

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

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

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

Поверхности, чаще называемые группами сглаживания, полезны, но не обязательны для группирования гладких областей. Представьте себе цилиндр с крышками, такой как жестяная банка. Для гладкого затенения сторон, все нормали должны указывать горизонтально от центра, тогда как нормали крышек должны указывать в +/-(0,0,1) направлениях. Если рендерить как единую, затенённую по Фонгу поверхность, вершины складок имели бы неправильные нормали. Поэтому, нужен способ определения где прекращать сглаживание для того, чтобы группировать гладкие части сетки, также, как полигоны группируют трёхсторонние грани. Как альтернатива предоставлению поверхностей/групп сглаживания, сетка может содержать другую информацию для расчёта тех же данных, такая как разделяющий угол (полигоны с нормалями выше этого предела либо автоматически рассматриваются как отдельные группы сглаживания, либо по отношению к ребру между ними применяется какая-либо техника, как например разделение или скашивание). Также, полигональные сетки с очень высоким разрешением менее подвержены проблемам, для решения которых требуются группы сглаживания, так как их полигоны настолько малы, что нужда в них пропадает. Кроме того, альтернатива существует в возможности просто отсоединения самих поверхностей от оставшейся части сетки. Рендереры не пытаются сглаживать рёбра между несмежными полигонами.

Формат полигональной сетки может определять и другие полезные данные. Могут быть определены группы, которые задают отдельные элементы сетки и полезны для установления отдельных подобъектов для скелетной анимации или отдельных субъектов нескелетной анимации. Обычно определяются материалы, позволяя разным частям сетки использовать разные шейдеры при рендере. Большинство форматов сетки также предполагают UV координаты, которые являются отдельным двухмерным представлением полигональной сетки, «развёрнутым» чтобы показать какая часть двумерной текстуры применяется к разным полигонам сетки.

Представления

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

  • Список граней: описание граней происходит с помощью указателей в список вершин.
  • «Крылатое» представление: в нём каждая точка ребра указывает на две вершины, две грани и четыре (по часовой стрелке и против часовой) ребра, которые её касаются. Крылатое представление позволяет обойти поверхность за постоянное время, но у него бо́льшие требования по памяти хранения.
  • Полурёберные сетки: способ похож на «крылатое» представление, за исключением того, что используется информация обхода лишь половины грани.
  • Четырёхрёберные сетки[неизвестный термин], которые хранят рёбра, полурёбра и вершины без какого-либо указания полигонов. Полигоны прямо не выражены в представлении, и могут быть найдены обходом структуры. Требования по памяти аналогичны полурёберным сеткам.
  • Таблица углов, которые хранят вершины в предопределённой таблице, такой что обход таблицы неявно задаёт полигоны. В сущности, это «веер треугольников», используемый в аппаратном рендеринге. Представление более компактное и более производительное для нахождения полигонов, но операции по их изменению медленны. Более того, таблицы углов не представляют сетки полностью. Для представления большинства сеток нужно несколько таблиц углов (вееров треугольников).
  • Вершинное представление: представлены лишь вершины, указывающие на другие вершины. Информация о гранях и рёбрах выражена неявно в этом представлении. Однако, простота представления позволяет проводить над сеткой множество эффективных операций.

Каждое из представлений имеет свои преимущества и недостатки.[1]

Выбор структуры данных определяется применением, необходимой производительностью, размером данных, операциями, которые будут выполняться. К примеру, легче иметь дело с треугольниками, чем с многоугольниками общего вида, особенно в вычислительной геометрии. Для определённых операций необходимо иметь быстрый доступ к топологической информации, такой как рёбра или соседние грани; для этого требуются более сложные структуры, такие как «крылатое» представление. Для аппаратного рендеринга нужны компактные, простые структуры; поэтому в API низкого уровня, такие как DirectX и OpenGL обычно включена таблица углов (веер треугольников).

Вершинное представление

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

Однако, сетки ВП извлекают выгоду из малого использования памяти и эффективной трансформации. Рисунок 2 показывает пример параллелепипеда изображённый с использованием ВП сетки. Каждая вершина индексирует её соседние вершины. Заметьте, что последние две вершины, 8 и 9 сверху и снизу параллелепипеда, имеют четыре связанных вершины, а не пять. Главная система должна справляться с произвольным числом вершин связанных с любой данной вершиной.

Для более детального описания сеток ВП см. Smith (2006)(англ.).[1]

Список граней

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

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

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

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

«Крылатое» представление

Представленное Брюсом Баумгартом в 1975, «Крылатое» представление явно представляет вершины, грани и рёбра сетки. Это представление широко используется в программах для моделирования для предоставления высочайшей гибкости в динамическом изменении геометрии сетки, потому что могут быть быстро выполнены операции разрыва и объединения. Их основной недостаток — высокие требования памяти и увеличенная сложность из-за содержания множества индексов.

«Крылатое» представление решает проблему обхода от ребра к ребру и обеспечивает упорядоченное множество граней вокруг ребра. Для любого заданного ребра число исходящих рёбер может быть произвольным. Чтобы упростить это, «крылатое» представление предоставляет лишь четыре, ближайшие ребра по часовой и против часовой стрелки на каждом конце ребра. Другие рёбра можно обойти постепенно. Поэтому информация о каждом ребре напоминает бабочку, поэтому представление называется «крылатым». Рисунок 4 показывает пример параллелепипеда в «крылатом» представлении. Полные данные по ребру состоят из двух вершин (конечные точки), двух граней (по каждую сторону), и четыре ребра(«крылья» ребра).

Рендеринг «крылатого» представления графическим оборудованием требует генерирования списка индексов граней. Обычно это делается только когда изменяется геометрия. «Крылатое» представление идеально подходит для динамической геометрии, такой как подразделение поверхностей и интерактивное моделирование, так как изменения сетки могут происходить локально. Обход вокруг сетки, что может пригодиться для обнаружения столкновений, может быть эффективно выполнено.

См. Baumgart (1975) для подробностей (англ.)[2]

Сводка представлений сеток

Операция Вершинное представление Список граней «Крылатое» представление
V-V Все вершины вокруг вершины Явно V → f1, f2, f3, … → v1, v2, v3, … V → e1, e2, e3, … → v1, v2, v3, …
E-F Все рёбра грани F(a, b,c) → {a, b}, {b, c}, {a, c} F → {a, b}, {b, c}, {a, c} Явно
V-F Все вершины грани F(a, b,c) → {a, b,c} Явно F → e1, e2, e3 → a, b, c
F-V Все грани вокруг вершины Поиск пары Явно V → e1, e2, e3 → f1, f2, f3, …
E-V Все рёбра вокруг вершины V → {v, v1}, {v, v2}, {v, v3}, … V → f1, f2, f3, … → v1, v2, v3, … Явно
F-E Обе грани ребра Сравнение списков Сравнение списков Явно
V-E Обе вершины ребра E(a, b) → {a, b} E(a, b) → {a, b} Явно
Flook Найти грань с данными вершинами F(a, b,c) → {a, b,c} Пересечение множеств v1,v2,v3 Пересечение множеств v1,v2,v3
Размер памяти V*avg(V,V) 3F + V*avg(F,V) 3F + 8E + V*avg(E,V)
Пример с 10 вершин, 16 граней, 24 ребра:
10 * 5 = 50 3*16 + 10*5 = 98 3*16 + 8*24 + 10*5 = 290
Рисунок 5: сводка операций представлений сеток

В представленной выше таблице, явно указывает на то, что операция может быть выполнена за постоянное время, так как хранятся непосредственные данные; сравнение списков указывает на то, что для выполнения операции должно быть выполнено сравнение двух списков; и поиск пары указывает на то, что должен быть выполнен поиск двух индексов. Обозначение avg(V,V) означает среднее число вершин, соединённых с заданной вершиной; avg(E,V) означает среднее число рёбер соединённых с заданной вершиной, и avg(F,V) — среднее число граней, соединённых с заданной вершиной.

Обозначение «V → f1, f2, f3, … → v1, v2, v3, …» показывает что для выполнения операции необходим обход вокруг нескольких элементов. К примеру, чтобы получить «все вершины вокруг заданной вершины V» используя список граней, нужно сначала найти грани вокруг заданной вершины V используя список вершин. Затем, из этих граней, используя список граней, найти вершины вокруг них. Заметьте, что «крылатое» представление хранит почти всю информацию в явном виде, и другие операции всегда обходят сначала ребро, чтобы получить дополнительную информацию. Вершинное представление — единственное представление, которое в явном виде хранит соседние вершины заданной вершины.

С увеличением сложности представлений (слева направо в сводке), количество информации, хранящейся в явном виде, растёт. Это даёт более прямой, постоянный по времени, доступ к обходу и топологии различных элементов, но ценой увеличения занимаемой памяти для сохранения индексов надлежащим образом.

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

Другие представления

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

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

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

Файловые форматы

Полигональные сетки могут храниться во множестве файловых форматов:

См. также

Примечания

wikiredia.ru

Популярно о компьютерной 3D графике, часть 1 / Habr


Все мы слышали о 3D графике (далее просто 3D, не путать со способом отображения — голограммами, 3D-мониторами и т.п.), многие прекрасно знают, что такое 3D и с чем его едят. Но, все же, есть и те, кто смутно себе представляет, что кроется под этой короткой аббревиатурой. Статья рассчитана на тех, кто не имеет представления о компьютерной графике. Также будет немного экскурса в историю компьютерной графики (в следующих планируемых частях).
Почему именно 3D? Как нетрудно догадаться, речь идет о 3 Dimension, или о трех измерениях. И не обязательно при этом, чтобы и отображение было в 3D. Речь идет о способе построения картинки.

Часть 1. Собственно, моделирование
Традиционно рисуют в 2D (по осям X и Y) — на бумаге, холсте, дереве и т.п. При этом отображают какую-то одну из сторон предмета. Картинка сама по себе плоская. Но если мы хотим получить представление обо всех сторонах предмета, то необходимо нарисовать несколько рисунков. Так поступают в традиционной рисованной анимации. Но, вместе с тем, существует, (кстати, в СССР была довольно хорошо развита) т.н. кукольная анимация. Один раз изготовленную куклу снимают в необходимых позах и ракурсах, получая серию «плоских картинок». 3D (к X и Y добавляется координата глубины Z) визуализация — это те же «куклы», только существующие в цифровом виде. Другими словами, в специальных программах (Blender, 3ds Max, Maya, Cinema 4D и т.п.) создается объемное изображение, например авто.

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

Существует несколько способов моделирования, но самым популярным является полигональное моделирование. Нередко можно увидеть в роликах о 3D или фантастических фильмах как тот или иной объект представляется в виде т.н. сетки. (см. рисунок выше) Это и есть пример полигонального моделирования. Суть его в том, что поверхности представляются в виде простых геометрических двумерных примитивов. В компьютерных играх это треугольники, для других целей обычно используют четырехугольники и фигуры с большим кол-вом углов. Эти примитивы, из которых состоит модель, называют полигонами. Но при создании 3D объекта стараются обойтись, как правило, четырехугольниками. При необходимости четырехугольники (полигоны) без проблем превращаются в треугольники при экспорте в игровой движок, а при необходимости сглаживания или тесселяции модель из четырехугольников получается, как правило, без артефактов.
Что такое тесселяция? Если какой-то объект представляется в виде полигонов (особенно органические объекты, например человек), то понятно, что чем меньше размер полигонов, чем их больше, тем более близкой может быть модель к оригиналу. На этом основан метод тесселяции: сначала изготавливают грубую болванку из небольшого кол-ва полигонов, затем применяют операцию тесселяции, при этом каждый полигон делится на 4 части. Так вот, если полигон четырехугольный (а еще лучше, близок к квадрату) то алгоритмы тесселяции дают более качественный и предсказуемый результат. Также операция сглаживания, а это та же тесселяция, только с изменением углов на более тупые, при близких к квадрату полигонах, позволяет получить хороший результат.

Как было сказано выше, чем больше полигонов, тем более модель может (может, потому, что модель должна быть еще похожа на оригинал, а это вопрос мастерства моделера, а не полигонов) походить на оригинал. Но у большого кол-ва полигонов есть обратная сторона: понижение производительности. Чем больше полигонов, тем больше точек по которым они строятся, тем больше данных приходится обрабатывать процессору. Поэтому 3D графика — это всегда компромисс между детализацией модели и производительностью. В связи с этим даже возникли термины: hight poly и low poly, соответственно высоко полигональная модель и низко полигональная модель. В играх применяются низко полигональные модели, так как в них выполняется визуализация в реальном времени. Кстати, модели в играх представлены треугольниками для повышения производительности: графические процессоры умеют на аппаратном уровне быстро обрабатывать сотни миллионов треугольников за секунду.

Как правило, полигональное моделирование относится к пустотелому моделированию, где объект имеет только объем, но внутри пустой. Это означает, что если мы смоделируем куб, а потом удалим одну из стенок, то увидим внутри пустоту. Также имеются программы для твердотельного моделирования, где тот же самый куб представлен в виде монолитного объекта. В таких программах (к примеру, Autodesk Inventor) применяются математические модели отличные от тех, что в полигональном моделировании. Алгоритмы твердотельного моделирования лучше подходят для моделирования механизмов при разработке техники. Программы вроде Autodesk Inventor имеют средства для моделирования с учетом особенностей технологического процесса, как то фаски, сверление отверстий, проставление размеров, допусков и т.п. Получаемые модели можно сразу отправить на подходящий станок для получения изделия в металле или другом материале.
Также существуют так называемые программы 3D лепки (ZBrush, Autodesk Mudbox) в которых моделирование сводится (грубо говоря) к созданию углублений или выпуклостей. Такая техника похожа на то, как скульпторы лепят из глины — убирая ненужное и добавляя необходимое. С помощью таких программ можно добиться реалистичного рельефа поверхности, например морщин на коже или складок ткани. В настоящее время высокополигональные (а для лепки модель должна обладать солидным кол-вом полигонов) реалистичные модели людей и вообще животного мира выполняются, в большинстве своем, с применение программы лепки. Распространена практика когда заготовка модели создается с помощью полигонального моделирования, а затем в программе лепки тесселируется и добавляются мелкие детали.

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

В общем случае текстура — это двумерный рисунок который накладывается на 3D модель. Текстура может быть как процедурной — сгенерированной при помощи алгоритма, так и нарисованная в графическом редакторе, или фотографией реального объекта. С помощью текстуры задается рисунок и цвет модели, но реальная поверхность обладает и другими параметрами: отражающей способностью, преломлением, рельефом, позрачностью и т.п. Все эти параметры задаются в свойствах материала. Т.е. материал с точки зрения 3D графики — это некая математическая модель описывающая параметры поверхности. Например, для воды обязательно необходимо указать прозрачность и преломляющую, отражающую способности.
Перед «нанесением» материала на 3D модель необходимо создать ее развертку, т.е. представить все (несколько, одну) поверхности в виде проекции на плоскость. Это необходимо для того, чтобы затем двумерная текстура правильно «лягла» на модель.
Таким образом изготовление 3D модели в общем случае состоит из следующих стадий:
1. Получение изображений референса (т.е. того, с чего будет моделироваться) или самого референса. Или отрисовка экскиза.
2. Моделирование геометрии на основе референса.
3. Создание развертки.
4. Отрисовка текстур или получение их другим способом в виде файлов.
5. Настройка параметров материала (текстуры, преломление, отражение, прозрачность).
Теперь 3D модель готова для визуализации — получении картинки.
Первый и четвертый пункт могут быть быть опущены если модель простая, но, как правило, хороших результатов без всех 5 шагов не добиться.
Подытожим.
Между обычным рисунком, скажем, на бумаге, и построением 3D изображения есть существенные различия в самом процессе. Двумерный рисунок, как правило, создается в два этапа: эскиз и раскрашивание. В 3D графике после изготовления модели ее необходимо поместить в сцену к другим объектам (или в так называемую студию), добавить освещение, камеру и лишь затем можно надеяться получить финальную картинку. Изображение в 3Dграфике просчитывается на основе физической модели, как правило, это модель распространения луча света с учетом отражения, преломления, рассеивания и т.п. Рисуя красками мы сами отрисовываем тени, блики и т.д., а в трехмерной графике мы подготавливаем сцену с учетом освещения, материалов, геометрии, свойств камеры, программа рассчитывает итоговую картинку сама.

Вот, на сегодня пока и все. Комментарии, а особенно вопросы и замечания по существу приветствуются.

P.S. В следующих частях (если Хабрабществу будет интересно) мы более подробно поговорим о трехмерном моделировании для игр, будет затронута визуализация, моделирование динамических сред, таких как вода, разрушение объекта и затронем динамическое взаимодействие между 3D объектами, историю 3D графики.

habr.com

Полигональное рисование автоматическое и вручную. Видео урок

Полигональное рисование

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

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

Ручной метод полигонального рисования.

Для рисования полигонов в Adobe Illustrator идеально подходит инструмент «Перо». Внимательно следите, чтобы между полигонами не было просветов. На мелких деталях требуется гораздо большее количество элементов, чтобы они не потерялись. Желательно так строить полигоны, чтобы границы изображения совпадали с границами полигонов.

перо

Чтобы не терять времени на отрисовку каждого треугольника в отдельности, можно перетянуть один из узлов на копии (более подробно в видео уроке в конце статьи).

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

можно перетянуть один из узлов на копии

Когда сетка готова, самое время приступить к раскрашиванию. Возьмите инструмент «пипетка». Удерживая клавишу Ctrl выделите элемент, а затем, отпустите и нажмите пипеткой на цвет под выделенным элементом. Полигон перекраситься в нужный цвет.

Гораздо интересней смотрится, когда треугольник имеет градиентную заливку.

Автоматический метод полигонального рисования.

>>Скачать онлайн генератор>>

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

Разархивируйте скачанный архив. Перейдите по ссылке \triangulator\triangulator\index.html. Запустите файл index.html. Перетащите ваше изображение в поле «Drop your bitmap here».

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

Когда рисунок готов, нужно его сохранить в векторном формате — Export to SVG: save this link as file. Нажмите правой кнопкой мыши на строке this link и выберите «сохранить ссылку как..» (в некоторых браузерах формат файла нужно прописать вручную).

Экспортируйте этот файл в CorelDRAW или Illustrator. Здесь вы можете исправить дефекты и доработать изображение до конечного результата.

В видео уроке подробнее описан процесс полигонального рисования:

исправить дефекты и доработать изображение до конечного результата

(Visited 7 703 times, 5 visits today)

expert-polygraphy.com

Добавить комментарий

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