Полигональная сетка: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Нет описания правки |
|||
Строка 1:
[[Файл:Dolphin triangle mesh.png|thumb|250px|Пример полигональной сетки, изображающей дельфина.]]
'''Полигональная сетка''' ({{жарг|меш}} от {{lang-en|polygon mesh}}) — это совокупность вершин, рёбер и граней, которые определяют форму [[Многогранник|многогранного объекта]] в [[Трёхмерная графика|
Учение о полигональных сетках — это большой подраздел компьютерной графики и геометрического моделирования. Множество операций, проводимых над сетками, может включать [[Булева алгебра|булеву алгебру]], сглаживание, упрощение и многие другие. Разные представления полигональных сеток используются для разных целей и приложений. Для передачи полигональных сеток по сети используются сетевые представления, такие как «потоковые» и «прогрессивные» сетки.
Математический эквивалент полигональных сеток — [[Неструктурированная сетка|неструктурированные сетки]] — изучаются методами [[Комбинаторная геометрия|комбинаторной геометрии]].
Строка 10:
[[Файл:Mesh overview-rus.svg|Элементы моделирования полигональной сетки.]]
Объекты созданные с помощью полигональных сеток должны хранить разные типы элементов, такие как вершины,
'''Вершина''' — это позиция вместе с другой информацией, такой как цвет, нормальный вектор и координаты текстуры. '''Ребро''' — это соединение между двумя вершинами. '''Грань''' — это замкнутое множество рёбер, в котором треугольная грань имеет три ребра, а четырёхугольная - четыре. '''Полигон''' — это набор [[Компланарность|компланарных]] (лежащих в одной плоскости) граней. В системах, которые поддерживают многосторонние грани, полигоны и грани равнозначны. Однако, большинство аппаратного обеспечения для рендеринга поддерживает лишь грани с тремя или четырьмя сторонам, так что полигоны представлены как множество граней. Математически, полигональная сетка может быть представлена в виде неструктурированной сетки, или неориентированного графа, с добавлением свойств геометрии, формы и топологии.
'''Поверхности''', чаще называемые '''группами сглаживания''', полезны, но не обязательны для группирования гладких областей. Представьте себе цилиндр с крышками, такой как жестяная банка. Для гладкого затенения сторон, все [[Нормаль|нормали]] должны указывать горизонтально от центра, тогда как нормали крышек должны указывать в +/-(0,0,1) направлениях. Если рендерить как единую, [[Затенение по Фонгу|
Формат полигональной сетки может определять и другие полезные данные. Могут быть определены '''группы''', которые задают отдельные элементы сетки и полезны для установления отдельных подобъектов для [[Скелетная анимация|скелетной анимации]] или отдельных субъектов нескелетной анимации. Обычно определяются '''материалы''', позволяя разным частям сетки использовать разные шейдеры при рендере. Большинство форматов сетки также предполагают '''[[UV-преобразование|UV координаты]]''', которые являются отдельным двухмерным представлением полигональной сетки, "развёрнутым" чтобы показать какая часть двумерной текстуры применяется к разным полигонам сетки.
Строка 24:
* Список граней: описание граней происходит с помощью указателей в список вершин.
* "Крылатое" представление: в нём каждая точка ребра указывает на две вершины, две грани и четыре (по часовой стрелке и против часовой) ребра, которые её касаются. Крылатое представление позволяет обойти поверхность за постоянное время, но у него бо́льшие требования по памяти хранения.
*
* {{термин?|
* Таблица углов, которые хранят вершины в предопределённой таблице, такой что обход таблицы неявно задаёт полигоны. В сущности, это "[[веер треугольников]]", используемый в аппаратном рендеринге. Представление более компактное и более производительное для нахождения полигонов, но операции по их изменению медленны. Более того, таблицы углов не представляют сетки полностью. Для представления большинства сеток нужно несколько таблиц углов (вееров треугольников).
* Вершинное представление: представлены лишь вершины, указывающие на другие вершины. Информация о гранях и рёбрах выражена неявно в этом представлении. Однако, простота представления позволяет проводить над сеткой множество эффективных операций.
Строка 31:
Каждое из представлений имеет свои преимущества и недостатки.<ref name="Smith (2006)">Colin Smith, On Vertex-Vertex Meshes and Their Use in Geometric and Biological Modeling, http://algorithmicbotany.org/papers/smithco.dis2006.pdf</ref>
Выбор структуры данных определяется применением, необходимой производительностью, размером данных, операциями, которые будут выполняться. К примеру, легче иметь дело с треугольниками, чем с многоугольниками общего вида, особенно в [[Вычислительная геометрия|вычислительной геометрии]]. Для определённых операций необходимо иметь быстрый доступ к топологической информации, такой как
=== Вершинное представление ===
Строка 53:
Для рендеринга грань обычно посылается в графический процессор как множество индексов вершин, и вершины посылаются как позиция/цвет/структуры нормалей (на рисунке дана лишь позиция). Поэтому изменения формы, но не геометрии, могут быть динамически обновлены просто переслав данные вершины без обновления связаности граней.
Моделирование требует лёгкого обхода всех структур. С сеткой использующей список граней очень легко найти вершины грани. Также, список вершин содержит список всех граней связанных с каждой вершиной. В отличие от вершинного представления, и грани и вершины явно представлены, так что нахождение соседних граней и вершин постоянно по времени. Однако,
=== "Крылатое" представление ===
Строка 59:
[[Файл:Mesh we rus.jpg|center|Рисунок 4. "Крылатое" представление]]
Представленное Брюсом Баумгартом в 1975, '''"Крылатое" представление''' явно представляет вершины, грани и
"Крылатое" представление решает проблему обхода от ребра к ребру и обеспечивает упорядоченное множество граней вокруг ребра. Для любого заданного ребра число исходящих рёбер может быть произвольным. Чтобы упростить это, "крылатое" представление предоставляет лишь четыре, ближайшие ребра по часовой и против часовой стрелки на каждом конце ребра. Другие
Рендеринг "крылатого" представления графическим оборудованием требует генерирования списка индексов граней. Обычно это делается только когда изменяется геометрия. "Крылатое" представление идеально подходит для динамической геометрии, такой как подразделение поверхностей и интерактивное моделирование, так как изменения сетки могут происходить локально. Обход вокруг сетки, что может пригодиться для обнаружения столкновений, может быть эффективно выполнено.
Строка 83:
|-
|align=center|E-F
|align=center|Все
|align=center|F(a,b,c) → {a,b}, {b,c}, {a,c}
|align=center|F → {a,b}, {b,c}, {a,c}
Строка 101:
|-
|align=center|E-V
|align=center|Все
|align=center|V → {v,v1}, {v,v2}, {v,v3}, ...
|align=center|V → f1, f2, f3, ... → v1, v2, v3, ...
Строка 144:
С увеличением сложности представлений (слева направо в сводке), количество информации, хранящейся в явном виде, растёт. Это даёт более прямой, постоянный по времени, доступ к обходу и топологии различных элементов, но ценой увеличения занимаемой памяти для сохранения индексов надлежащим образом.
Как общее правило, сетки использующие список граней используются всякий раз, когда объект должен рендериться с помощью аппаратного обеспечения, которое не меняет геометрию (соединения), но может деформировать или трансформировать (позиции вершин), например в рендеринге статичных или трансформируемых объектов в реальном времени. "Крылатое" представление используется когда геометрия изменяется, например в интерактивных пакетах моделирования или для вычисления
== Другие представления ==
Строка 150:
''Потоковые сетки'' хранят грани упорядочено, но независимо, чтобы таким образом сетку можно было пересылать по частям. Порядок граней может быть пространственным, спектральным, или базированным на других свойствах сетки. Потоковые сетки позволяют рендерить очень большие сетки даже тогда, когда они ещё загружаются.
''Прогрессивные сетки'' передают данные о вершинах и гранях с повышающимся уровнем детализации. В отличие от ''потоковых сеток'', прогрессивные сетки дают общую форму целого объекта, но на низком уровне детализации. Дополнительные данные, новые
''Нормальные сетки'' передают постепенные изменения сетки как множество смещений нормалей от базовой сетки. С помощью этой техники, ряд текстур отображает желаемые нарастающие изменения. Нормальные сетки компактны, так как для выражения смещения нужно лишь одно скалярное значение. Однако, техника требует ряд сложных трансформаций чтобы создать текстуры сдвига.
|