Открыть сервис

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

Полигональная сетка (полигональная модель, меш, от англ. polygon mesh) — это совокупность вершин, рёбер и граней, определяющих форму многогранного объекта в трёхмерной компьютерной графике и геометрическом моделировании. Полигональная сетка является одним из основных способов представления трёхмерных объектов, наряду с воксельными, NURBS-поверхностями и неявными поверхностями. Основное преимущество полигональных сеток — простота хранения, обработки и визуализации, что делает их стандартом де-факто в индустрии компьютерных игр, кино, виртуальной реальности и САПР.

Основные понятия и структура

Полигональная сетка состоит из трёх базовых элементов:

  • Вершина (vertex) — точка в трёхмерном пространстве, заданная координатами (x, y, z). Вершины являются фундаментом сетки; все остальные элементы определяются через них.
  • Ребро (edge) — отрезок, соединяющий две вершины. Ребро является границей грани.
  • Грань (face) — замкнутая фигура, образованная последовательностью рёбер. Чаще всего грани представляют собой треугольники (триангуляция) или четырёхугольники (квады). В некоторых случаях используются многоугольники с большим количеством сторон (n-угольники), но их применение ограничено из-за сложности обработки.

Типы граней

  • Треугольники (трисы) — наиболее универсальный тип. Любой многоугольник может быть разбит на треугольники. Треугольные сетки используются в большинстве графических API (DirectX, OpenGL, Vulkan) и в 3D-печати.
  • Четырёхугольники (квады) — предпочтительны для моделирования и анимации, так как лучше поддаются деформации и сглаживанию. Квадратные сетки часто применяются в программах для скульптинга (ZBrush, Blender) и в системах подразделения поверхностей (Subdivision Surface).
  • n-угольники — многоугольники с числом сторон более четырёх. Используются редко, обычно в CAD-моделях или при импорте из других форматов. Могут вызывать артефакты при текстурировании и рендеринге.

Атрибуты вершин

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

  • Нормали — векторы, определяющие ориентацию поверхности в данной точке. Используются для расчёта освещения.
  • Текстурные координаты (UV-координаты) — двумерные координаты, связывающие вершину с точкой на текстурном изображении.
  • Цвета вершин — задают цвет непосредственно на вершине, который затем интерполируется по грани.
  • Вертексные веса — используются в скелетной анимации для определения влияния костей на вершины.

Способы представления

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

Список вершин и граней (Face-Vertex Mesh)

Самый простой и распространённый формат. Сетка хранится как два массива:

  • Массив вершин (список всех координат).
  • Массив граней, где каждая грань — это список индексов вершин, образующих её.

Этот способ экономит память по сравнению с хранением каждой грани отдельно, но требует дополнительных затрат на поиск рёбер и соседних граней.

Список рёбер (Edge List)

Хранятся только вершины и рёбра. Грани не хранятся явно, а восстанавливаются по рёбрам. Используется редко, в основном в алгоритмах обработки сеток.

Связанная структура рёбер (Half-Edge Mesh)

Более сложная структура, в которой каждое ребро представлено двумя полуребрами (half-edges), направленными в противоположные стороны. Каждое полуребро хранит ссылки на:

  • Вершину, из которой оно исходит.
  • Следующее полуребро в той же грани.
  • Противоположное полуребро.
  • Грань, которой принадлежит.

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

Свойства и характеристики

Топология

Топология сетки описывает, как её элементы соединены между собой, без учёта геометрических координат. Ключевые топологические понятия:

  • Многообразие (manifold) — сетка, в которой каждое ребро принадлежит не более чем двум граням, а окрестность каждой вершины гомеоморфна диску. Немногообразие (non-manifold) — ситуации, когда ребро принадлежит трём и более граням или когда вершина соединяет несвязанные части сетки. Немногообразие часто вызывает проблемы в алгоритмах.
  • Род (genus) — топологическая характеристика, равная числу «дырок» (ручек) в сетке. Например, сфера имеет род 0, тор — род 1.
  • Связность — количество отдельных компонент сетки.
  • Эйлерова характеристика — для замкнутой сетки выполняется формула Эйлера: V — E + F = 2 — 2g, где V — число вершин, E — число рёбер, F — число граней, g — род.

Геометрия

Геометрия сетки — это положение вершин в пространстве. Основные геометрические характеристики:

  • Плотность — количество вершин и граней на единицу площади. Высокая плотность позволяет передавать мелкие детали, но увеличивает вычислительную нагрузку.
  • Равномерность — степень однородности распределения вершин. Неравномерные сетки (с разной плотностью в разных областях) часто используются для оптимизации.
  • Качество — форма граней. Идеальными считаются равносторонние треугольники и квадраты. Вытянутые, узкие грани (стрипы) ухудшают качество визуализации и численных расчётов.

Создание и редактирование

Полигональные сетки создаются несколькими способами:

  • Ручное моделирование — в 3D-редакторах (Blender, 3ds Max, Maya) художник вручную создаёт и редактирует вершины, рёбра и грани.
  • Скульптинг — цифровая лепка, при которой художник использует кисти для деформации высокополигональной сетки (ZBrush, Mudbox).
  • Процедурная генерация — создание сетки по алгоритму (например, генерация ландшафта, зданий, растительности).
  • Фотограмметрия — восстановление трёхмерной модели по набору фотографий.
  • 3D-сканирование — получение облака точек с последующей триангуляцией.
  • Импорт из CAD-системпреобразование NURBS-поверхностей в полигональную сетку.

Основные операции редактирования:

  • Экструзия — выдавливание грани или ребра для создания новых форм.
  • Подразделение (subdivision) — деление граней на более мелкие для увеличения детализации.
  • Сглаживание — усреднение положения вершин для уменьшения шероховатостей.
  • Ретопология — перестроение сетки с целью улучшения её топологии и распределения вершин.
  • Децимация — уменьшение количества полигонов с минимальной потерей качества.

Применение

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

Полигональные сетки — основа для рендеринга в реальном времени (игры, VR/AR) и офлайн-рендеринга (кино, реклама). В играх используются низкополигональные модели (LOD — Level of Detail) для оптимизации производительности. В кино — высокополигональные модели с миллионами полигонов.

3D-печать

Для 3D-печати требуется замкнутая водонепроницаемая (watertight) полигональная сетка, не содержащая дырок и многообразий. Формат STL является стандартом для 3D-печати и хранит только треугольные грани без атрибутов.

Научные расчёты (FEM, CFD)

В методе конечных элементов (МКЭ) и вычислительной гидродинамике (CFD) полигональные сетки используются для разбиения расчётной области на элементы. Качество сетки критически влияет на точность и сходимость решения.

Медицина

По данным компьютерной томографии (КТ) и магнитно-резонансной томографии (МРТ) строятся трёхмерные полигональные модели органов и костей для диагностики, планирования операций и протезирования.

Геоинформационные системы (ГИС)

Цифровые модели рельефа (ЦМР) часто представляются в виде полигональных сеток (TIN — Triangulated Irregular Network) для визуализации и анализа ландшафта.

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

Существует множество форматов для хранения полигональных сеток, различающихся по поддерживаемым функциям и сфере применения:

  • OBJ — текстовый формат, поддерживает вершины, грани, текстурные координаты и нормали. Широко используется для обмена данными.
  • FBX — бинарный формат, разработанный компанией Autodesk. Поддерживает анимацию, скелеты, материалы. Стандарт в игровой индустрии.
  • STL — простой формат, хранящий только треугольные грани. Используется в 3D-печати.
  • PLY (Polygon File Format) — поддерживает как текстовое, так и бинарное представление. Может хранить дополнительные атрибуты вершин (цвет, нормали).
  • GLTF — современный формат для передачи 3D-контента в веб-приложениях. Оптимизирован для загрузки и рендеринга.
  • 3DS — устаревший формат, но всё ещё встречается в старых проектах.
  • BLEND — внутренний формат Blender.
  • MAX — внутренний формат 3ds Max.

Проблемы и ограничения

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

Литература

  • Botsch, M., Kobbelt, L., Pauly, M., Alliez, P., & Levy, B. (2010). Polygon Mesh Processing. CRC Press.
  • Foley, J. D., van Dam, A., Feiner, S. K., & Hughes, J. F. (1996). Computer Graphics: Principles and Practice. Addison-Wesley.
  • Авербух, В. Л. (2008). Компьютерная графика: учебное пособие. Екатеринбург: УрГУ.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →