Введение

Метод моделирования объектов

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

Геометрическая теория и полигоны

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

Расширения

После того, как построена полигональная сетка, необходимо выполнить дополнительные шаги, прежде чем её можно будет использовать в играх, анимации и т.п. Модель необходимо текстурировать, чтобы добавить цвет и текстуру поверхности, и оснастить её скелетом для анимации. Сеткам также могут быть назначены веса и центры тяжести для использования в физическом моделировании. Чтобы отобразить модель на экране компьютера вне среды моделирования, необходимо сохранить её в одном из перечисленных ниже форматов файлов, а затем использовать или написать программу, способную загружать данные из этого формата. Два основных метода отображения трёхмерных полигональных моделей – OpenGL и Direct3D. Оба этих метода могут использоваться как с 3D-ускоренной графической картой, так и без неё.

Преимущества и недостатки

Существует множество недостатков в представлении объекта с помощью полигонов. Полигоны не способны точно отображать криволинейные поверхности, поэтому для приближения кривых визуально приемлемым образом требуется использовать большое их количество. Использование сложных моделей приводит к снижению производительности. При сканировании каждый полигон должен быть преобразован и отображен, независимо от его размера, и часто на экране одновременно присутствует большое количество моделей. Зачастую программистам приходится использовать несколько моделей разной степени детализации для представления одного и того же объекта, чтобы уменьшить количество полигонов, подлежащих рендерингу. Главное преимущество полигонов заключается в их скорости по сравнению с другими методами представления. В то время как современная видеокарта может отображать высокодетализированную сцену со скоростью 60 кадров в секунду и выше, моделировщики поверхностей – основной способ отображения неполигональных моделей – не способны достичь интерактивной частоты кадров (10 кадров/с и выше) при сопоставимом уровне детализации. Спрайты, являющиеся еще одной альтернативой полигонам, требуют создания каждой необходимой позы отдельно, в то время как одна полигональная модель может выполнять любое движение при применении соответствующих данных о движении и может быть просмотрена под любым углом.

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

Для хранения данных 3D-полигонов доступны различные форматы. Наиболее популярными являются:
.3ds, max, связанный с 3D Studio Max
blend, связанный с Blender
c4d, связанный с Cinema 4D
dae (COLLADA)
dxf, dwg, dwf, связанные с AutoCAD
fbx (ранее Autodesk, Kaydara Filmbox)
jt, первоначально разработанный Siemens Digital Industries Software; теперь это стандарт ISO
lwo, связанный с Lightwave
lxo, связанный с MODO
mb и ma, связанные с Maya
md2, md3, связанные с серией игр Quake
mdl, используемый с движком Source от Valve
nif (NetImmerse/gamebryo)
obj (Wavefront "The Advanced Visualizer")
ply, используемый для хранения данных с 3D-сканеров
rwx (Renderware)
stl, используемый в быстром прототипировании
u3d (Universal 3D)
wrl (VRML 2.0)