stringtranslate.com

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

Пример низкополигональной треугольной сетки, представляющей дельфина

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

Изучение полигональных сеток является крупным подразделом компьютерной графики (в частности, 3D-компьютерной графики) и геометрического моделирования . Различные представления полигональных сеток используются для различных приложений и целей. Разнообразие операций, выполняемых над сетками, может включать: булеву логику ( конструктивная твердотельная геометрия ), сглаживание , упрощение и многие другие. Существуют также алгоритмы для трассировки лучей , обнаружения столкновений и динамики твердого тела с полигональными сетками. Если ребра сетки визуализируются вместо граней, то модель становится каркасной .

Существует несколько методов генерации сетки , включая алгоритм марширующих кубов . [1]

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

Элементы

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

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

вершина
Положение (обычно в трехмерном пространстве) вместе с другой информацией, такой как цвет, вектор нормали и координаты текстуры.
край
Соединение между двумя вершинами.
лицо
Замкнутый набор граней, в котором треугольная грань имеет три грани, а четырехугольная грань — четыре. Многоугольник это копланарный набор граней. В системах, поддерживающих многосторонние грани, многоугольники и грани эквивалентны. Однако большинство аппаратных средств визуализации поддерживают только 3- или 4-сторонние грани, поэтому многоугольники представляются как несколько граней. Математически полигональную сетку можно считать неструктурированной сеткой или ненаправленным графом с дополнительными свойствами геометрии, формы и топологии.
поверхности
Чаще называемые сглаживающими группами , полезны, но не обязательны для группировки гладких областей. Рассмотрим цилиндр с крышками, например, банку с газировкой. Для плавного затенения сторон все нормали поверхности должны быть направлены горизонтально от центра, в то время как нормали крышек должны быть направлены прямо вверх и вниз. При визуализации в виде единой поверхности с затенением по Фонгу вершины сгиба будут иметь неправильные нормали. Таким образом, для группировки гладких частей сетки необходим какой-то способ определения того, где прекратить сглаживание, так же как полигоны группируют трехсторонние грани. В качестве альтернативы предоставлению поверхностей/сглаживающих групп сетка может содержать другие данные для расчета тех же данных, например угол разделения (полигоны с нормалями выше этого порога либо автоматически обрабатываются как отдельные сглаживающие группы, либо к краю между ними автоматически применяется некоторая техника, например, разделение или снятие фаски). Кроме того, сетки с очень высоким разрешением менее подвержены проблемам, которые потребовали бы сглаживающих групп, поскольку их полигоны настолько малы, что делают эту необходимость несущественной. Кроме того, существует еще одна альтернатива в возможности простого отделения самих поверхностей от остальной части сетки. Рендереры не пытаются сгладить края через несмежные полигоны.
группы
Некоторые форматы сеток содержат группы , которые определяют отдельные элементы сетки и полезны для определения отдельных подобъектов для скелетной анимации или отдельных актеров для нескелетной анимации.
материалы
Обычно материалы определяются таким образом, чтобы разные части сетки использовали разные шейдеры при рендеринге.
UV-координаты
Большинство форматов сеток также поддерживают некоторую форму UV-координат , которые являются отдельным 2D-представлением сетки, "развернутой", чтобы показать, какую часть 2-мерной текстурной карты применить к различным полигонам сетки. Также сетки могут содержать другую такую ​​информацию об атрибутах вершин , как цвет, касательные векторы, карты весов для управления анимацией и т. д. (иногда также называемые каналами ).

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

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

Сетки граней и вершин
Простой список вершин и набор полигонов, указывающих на используемые вершины.
Крылатый край
в котором каждое ребро указывает на две вершины, две грани и четыре (по часовой стрелке и против часовой стрелки) ребра, которые их касаются. Сетки с крылатыми ребрами позволяют проходить поверхность за постоянное время, но с более высокими требованиями к хранению.
Сетки с полукраями
Аналогично сеткам с крылатыми ребрами, за исключением того, что используется только половина информации о прохождении ребер. (см. OpenMesh)
Сетки с четырьмя ребрами
которые хранят ребра, полуребра и вершины без какой-либо ссылки на полигоны. Полигоны неявно присутствуют в представлении и могут быть найдены путем обхода структуры. Требования к памяти аналогичны сеткам полуребра.
Угловые столы
которые хранят вершины в предопределенной таблице, так что обход таблицы неявно определяет полигоны. По сути, это веер треугольников, используемый в аппаратном рендеринге графики. Представление более компактно и более эффективно для извлечения полигонов, но операции по изменению полигонов медленные. Кроме того, таблицы углов не представляют сетки полностью. Для представления большинства сеток требуется несколько таблиц углов (вееров треугольников).
Сетки вершина-вершина
Сетка " VV" представляет только вершины, которые указывают на другие вершины. Информация о ребрах и гранях подразумевается в представлении. Однако простота представления не позволяет выполнять многие эффективные операции с сетками.

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

Сетки вершина-вершина

Рисунок 2. Сетки вершина-вершина
Рисунок 2. Сетки вершина-вершина

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

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

Полное описание сеток VV см. в книге Смита (2006). [2]

Сетки граней и вершин

Рисунок 3. Сетки граней и вершин
Рисунок 3. Сетки граней и вершин

Face-vertex meshes представляет объект как набор граней и набор вершин. Это наиболее широко используемое представление сетки, являющееся входными данными, обычно принимаемыми современным графическим оборудованием.

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

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

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

Сетки с крылатыми краями

Рисунок 4. Сетки с крылатыми краями

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

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

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

Более подробную информацию см. в работе Баумгарта (1975). [3]

Рендеринг динамических сеток

Сетки крылатых ребер — не единственное представление, которое допускает динамические изменения геометрии. Новое представление, которое объединяет сетки крылатых ребер и сетки граней-вершин, — это динамическая сетка рендеринга , которая явно хранит как вершины грани и грани вершины (как сетки FV), так и грани и вершины ребра (как крыльевые ребра).

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

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

Более подробную информацию см. в работе Tobler & Maierhofer (WSCG 2006). [4]

Резюме сетчатого представления

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

Обозначение "V → f1, f2, f3, ... → v1, v2, v3, ..." описывает, что для выполнения операции требуется обход нескольких элементов. Например, чтобы получить "все вершины вокруг заданной вершины V" с помощью сетки грань-вершина, необходимо сначала найти грани вокруг заданной вершины V с помощью списка вершин. Затем из этих граней использовать список граней, чтобы найти вершины вокруг них. Сетки с крылатыми ребрами явно хранят почти всю информацию, а другие операции всегда сначала проходят по ребру, чтобы получить дополнительную информацию. Сетки вершина-вершина являются единственным представлением, которое явно хранит соседние вершины заданной вершины.

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

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

Как правило, сетки face-vertex используются всякий раз, когда объект должен быть отрендерен на графическом оборудовании, которое не меняет геометрию (связность), но может деформировать или изменять форму (положения вершин), например, рендеринг в реальном времени статических или морфинговых объектов. Крылатые-ребристые или рендеринговые динамические сетки используются, когда геометрия изменяется, например, в интерактивных пакетах моделирования или для вычисления поверхностей подразделения. Сетки vertex-vertex идеально подходят для эффективных, сложных изменений геометрии или топологии, пока аппаратный рендеринг не вызывает беспокойства.

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

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

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

Существует множество различных форматов файлов для хранения данных полигональной сетки. Каждый формат наиболее эффективен, когда используется для целей, задуманных его создателем. Популярные форматы включают .fbx , .dae , .obj и .stl . Таблица некоторых других форматов представлена ​​ниже:

Смотрите также

Ссылки

  1. ^ Лоренсен, Уильям Э.; Клайн, Харви Э. (1 августа 1987 г.). «Марширующие кубы: алгоритм построения трехмерной поверхности с высоким разрешением». ACM SIGGRAPH Computer Graphics . 21 (4): 163–169. CiteSeerX  10.1.1.545.613 . doi :10.1145/37402.37422.
  2. ^ ab Колин Смит, О сетках вершина-вершина и их использовании в геометрическом и биологическом моделировании, ( PDF )
  3. ^ Брюс Баумгарт, Представление многогранника с крылатыми ребрами для компьютерного зрения. Национальная компьютерная конференция, май 1975 г. «Использование многогранников в компьютерном зрении». baumgart.org . Май 1975 г. Архивировано из оригинала 29-08-2005 . Получено 29-08-2005 .
  4. ^ Tobler & Maierhofer, Структура данных сетки для рендеринга и подразделения. 2006. ( PDF )

Внешние ссылки