В 3D компьютерной графике полигональное моделирование — это подход к моделированию объектов путем представления или аппроксимации их поверхностей с помощью полигональных сеток . Полигональное моделирование хорошо подходит для рендеринга растровых линий и поэтому является методом выбора для компьютерной графики в реальном времени . Альтернативные методы представления 3D-объектов включают поверхности NURBS , поверхности подразделения и представления на основе уравнений (неявные поверхности), используемые в трассировщиках лучей .
Базовым объектом, используемым в моделировании сетки, является вершина , точка в трехмерном пространстве. Две вершины, соединенные прямой линией, становятся ребром . Три вершины, соединенные друг с другом тремя ребрами, определяют треугольник , который является простейшим многоугольником в евклидовом пространстве . Более сложные многоугольники могут быть созданы из нескольких треугольников или как один объект с более чем 3 вершинами. Четырехсторонние многоугольники (обычно называемые квадратами) [1] [2] и треугольники являются наиболее распространенными формами, используемыми в полигональном моделировании. Группа многоугольников, соединенных друг с другом общими вершинами, обычно называется элементом . Каждый из многоугольников, составляющих элемент, называется гранью .
В евклидовой геометрии любые три неколлинеарные точки определяют плоскость . По этой причине треугольники всегда занимают одну плоскость. Однако это не обязательно относится к более сложным полигонам. Плоская природа треугольников упрощает определение их нормали поверхности , трехмерного вектора, перпендикулярного поверхности треугольника. Нормали поверхности полезны для определения переноса света при трассировке лучей и являются ключевым компонентом популярной модели затенения Фонга . Некоторые системы рендеринга используют нормали вершин вместо нормалей граней, чтобы создать более привлекательную систему освещения за счет большей обработки. Обратите внимание, что каждый треугольник имеет две нормали граней, которые указывают в противоположных направлениях друг от друга. Во многих системах только одна из этих нормалей считается допустимой — другая сторона полигона называется задней гранью и может быть сделана видимой или невидимой в зависимости от желаний программиста.
Многие программы моделирования не строго придерживаются геометрической теории; например, возможно, что две вершины имеют два различных ребра, соединяющих их, занимая точно такое же пространственное положение. Также возможно, что две вершины находятся в одних и тех же пространственных координатах, или две грани находятся в одном и том же месте. Такие ситуации обычно нежелательны, и многие пакеты поддерживают функцию автоматической очистки. Однако, если автоматической очистки нет, их необходимо удалить вручную.
Группа полигонов, соединенных общими вершинами, называется сеткой . Для того чтобы сетка выглядела привлекательно при рендеринге , желательно, чтобы она не была самопересекающейся , то есть чтобы ни одно ребро не проходило через полигон. Другой способ взглянуть на это — сетка не может пронзить сама себя. Также желательно, чтобы сетка не содержала никаких ошибок, таких как удвоенные вершины, ребра или грани. Для некоторых целей важно, чтобы сетка была многообразием , то есть не содержала дыр или сингулярностей (мест, где два отдельных участка сетки соединены одной вершиной).
Хотя можно построить сетку, вручную указав вершины и грани, гораздо чаще сетки строят с помощью различных инструментов. Для построения полигональных сеток доступно большое количество пакетов программного обеспечения для 3D-графики .
Одним из наиболее популярных методов построения сеток является блочное моделирование , которое использует два простых инструмента:
Второй распространенный метод моделирования иногда называют моделированием инфляции или моделированием выдавливания . В этом методе пользователь создает 2D-форму, которая обрисовывает контур объекта с фотографии или рисунка. [3] Затем пользователь использует второе изображение объекта с другого ракурса и выдавливает 2D-форму в 3D, снова следуя контуру формы. Этот метод особенно распространен для создания лиц и голов. В общем, художник моделирует половину головы, а затем дублирует вершины, инвертирует их расположение относительно некоторой плоскости и соединяет две части вместе. Это гарантирует, что модель будет симметричной.
Другой распространенный метод создания полигональной сетки — это соединение различных примитивов , которые являются предопределенными полигональными сетками, созданными средой моделирования. Распространенные примитивы включают:
Наконец, существуют некоторые специализированные методы построения высоко- или низкодетализированных сеток. Моделирование на основе эскизов — это удобный интерфейс для быстрого построения низкодетализированных моделей, в то время как 3D-сканеры могут использоваться для создания высокодетализированных сеток на основе существующих реальных объектов практически автоматически. Эти устройства очень дороги и, как правило, используются только исследователями и профессионалами отрасли, но могут генерировать высокоточные субмиллиметровые цифровые представления.
Существует очень большое количество операций, которые можно выполнять с полигональными сетками. Некоторые из них примерно соответствуют реальным манипуляциям с 3D-объектами, а другие — нет. Операции с полигональными сетками включают:
После того, как полигональная сетка создана, необходимо предпринять дальнейшие шаги, прежде чем она станет полезной для игр, анимации и т. д. Модель должна быть текстурирована для добавления цветов и текстуры к поверхности, и ей должен быть дан скелет для анимации. Сеткам также можно назначать веса и центры тяжести для использования в физическом моделировании .
Чтобы отобразить модель на экране компьютера вне среды моделирования, необходимо сохранить эту модель в одном из перечисленных ниже форматов файлов , а затем использовать или написать программу, способную загружать из этого формата. Два основных метода отображения 3D-полигональных моделей — OpenGL и Direct3D . Оба эти метода можно использовать как с графической картой с 3D-ускорением, так и без нее .
Представление объекта с помощью полигонов имеет много недостатков. Полигоны не способны точно представлять кривые поверхности, поэтому для аппроксимации кривых визуально привлекательным образом необходимо использовать большое их количество. Использование сложных моделей имеет свою цену в снижении скорости. При преобразовании в строку сканирования каждый полигон должен быть преобразован и отображен независимо от размера, и на экране часто одновременно находится большое количество моделей. Часто программистам приходится использовать несколько моделей с разным уровнем детализации для представления одного и того же объекта, чтобы сократить количество отображаемых полигонов.
Главное преимущество полигонов в том, что они быстрее других представлений. В то время как современная видеокарта может отображать высокодетализированную сцену с частотой кадров 60 кадров в секунду или выше, поверхностные моделлеры , основной способ отображения неполигональных моделей, не способны достичь интерактивной частоты кадров (10 кадров/с или выше) с аналогичным количеством деталей. Со спрайтами , другой альтернативой полигонам, каждая требуемая поза должна быть создана индивидуально, в то время как отдельная полигональная модель может выполнять любое движение, если применяются соответствующие данные о движении, и может просматриваться под любым углом. [4]
Для хранения данных 3D-полигонов доступны различные форматы. Наиболее популярными являются: