Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Полигональная сетка

Лекция



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

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

Полигональная сетка – это совокупность связанных между собой плоских многоугольников. Недостатком этого метода является приближенность..

Полигональная сетка

Рис. 2.3 – полигональная аппроксимация сферы в 3dmax.
Можно увеличить степень приближения, увеличивая число многоугольников. Но
это ведет к дополнительным затратам памяти и времени работы алгоритмов, работающих с
таковым представлением Рис. 2.3

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

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

Полигональная сетка

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

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

Полигональная сетка

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

2.3.1. Явная задача многоугольников
Каждый многоугольник представляется в виде списка координат его вершин: 𝑃=((𝑥1,𝑦1,𝑧1),(𝑥2,𝑦2,𝑧2),…(𝑥𝑛,𝑦𝑛,𝑧𝑛)).
Вершины задаются в том порядке, в каком они встречаются при обходе. При этом все последовательные вершины многоугольника, а также первая и последняя соединяются ребрами. Для каждого отдельного многоугольника этот способ записи эффективен, однако для полигональной сетки дает большие потери памяти вследствие дублирования информации о координатах общих вершин. Более того, нет явного описания общих вершин. К примеру, поиск всех многоугольников, имеющих общую вершину, требует сравнения троек координат вершин одного многоугольника с тройками координат вершин других многоугольников.

2.3.2. Задание многоугольников с помощью указателей на список вершин
Каждый узел полигональной сетки запоминается только один раз в списке вершин 𝑉=((𝑥1,𝑦1,𝑧1),(𝑥2,𝑦2,𝑧2),...
В этом представлении удается сэкономить значительное количество памяти. Кроме того, координаты вершин могут легко изменяться. Однако все еще непросто отыскивать многоугольники с общими ребрами

2.3.3. Явное задание ребер

В этом представлении есть список вершин 𝑉. Многоугольник рассматривается как совокупность указателей на элементы списка ребер, в котором ребра встречаются только один раз. Каждое ребро в списке ребер указывает на две вершины в списке вершин, определяющих это ребро, а также на один или два многоугольника, которыми это ребро принадлежит. Таким образом, мы описываем многоугольник как
P=(E1,....En) а ребро, например, как E=(V1, V2, P1, P2).
Если ребро принадлежит одному многоугольнику, то Р1 или Р2 – пустое.
Полигональная сетка изображается путем вычеркивания не всех многоугольников, а всех ребер. Отдельные многоугольники при этом также изображаются достаточно просто

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

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

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

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

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

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

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

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

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

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

Полигональная сетка

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

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

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

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

Полигональная сетка

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

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

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

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

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

Полигональная сетка

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

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

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

См. Baumgart (1975) для подробностей

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

Операция Вершинное представление Список граней «Крылатое» представление
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 используя список вершин. Затем, из этих граней, используя список граней, найти вершины вокруг них. Заметьте, что «крылатое» представление хранит почти всю информацию в явном виде, и другие операции всегда обходят сначала ребро, чтобы получить дополнительную информацию. Вершинное представление — единственное представление, которое в явном виде хранит соседние вершины заданной вершины.

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

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

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

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

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

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

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

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

  • .blend (Blender)
  • FBX
  • 3B (3D-Coat)
  • 3DS
  • MS3D
  • Collada
  • DXF
  • OBJ
  • PLY
  • STL
  • VRML
  • X3D
  • C4D
  • MSH (формат файлов)
  • iED 3D/VR Архивная копия от 16 июля 2011 на Wayback Machine
  • A3D (Alternativa3D8)
  • SMD

Вау!! 😲 Ты еще не читал? Это зря!

  • Полигональное моделирование
  • Каркасная модель
  • Операторы Эйлера
  • Контурное представление
  • Симплекс
  • Триангуляция (геометрия)
  • Многообразие (сетка может быть многообразной или немногообразной)

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

создано: 2025-01-16
обновлено: 2025-01-17
13



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Компьютерная графика

Термины: Компьютерная графика