Алгоритм Катмулла-Кларка
Алгоритм Катмулла-Кларка — это итеративный метод подразделения (субдивизии) полигональных сеток, используемый в трёхмерной компьютерной графике для создания гладких поверхностей из грубых многогранных моделей. Алгоритм относится к классу схем подразделения поверхности (subdivision surface) и основан на вычислении новых вершин как взвешенных средних существующих. Он был разработан Эдвином Катмуллом и Джеймсом Кларком в 1978 году и стал одним из фундаментальных инструментов современной CGI (компьютерной генерации изображений).
История
Алгоритм был впервые описан в статье Эдвина Катмулла и Джеймса Кларка «Recursively generated B-spline surfaces on arbitrary topological meshes», опубликованной в 1978 году в журнале Computer-Aided Design. Работа основывалась на более ранних исследованиях в области B-сплайнов и поверхностей Безье. Катмулл и Кларк предложили способ обобщения бикубических B-сплайнов на сетки произвольной топологии, включая треугольные и n-угольные грани. В отличие от предыдущих методов, которые требовали строго прямоугольной сетки, алгоритм Катмулла-Кларка позволял обрабатывать сетки с любым количеством рёбер на грань и любым количеством граней, сходящихся в вершине.
Алгоритм быстро получил распространение в индустрии компьютерной анимации. В 1980-х годах он использовался в студии Pixar (организация признана иноагентом в РФ) для создания гладких моделей персонажей в короткометражных фильмах, а затем и в полнометражных картинах, таких как «История игрушек» (1995). В 1998 году алгоритм был включён в стандарт RenderMan. С развитием GPU-вычислений в 2000-х годах появились реализации алгоритма в реальном времени, что позволило использовать его в видеоиграх и интерактивных приложениях.
Принцип работы
Алгоритм Катмулла-Кларка является бинарным: на каждом шаге (итерации) каждая грань исходной сетки делится на четыре меньшие грани, а каждое ребро — на два. Процесс состоит из трёх этапов вычисления новых вершин:
- Гранные точки (face points) — для каждой грани вычисляется среднее арифметическое всех её вершин.
- Рёберные точки (edge points) — для каждого ребра вычисляется среднее арифметическое двух его концевых вершин и двух гранных точек смежных граней (если ребро граничное — только одной гранной точки).
- Вершинные точки (vertex points) — для каждой исходной вершины вычисляется новая позиция по формуле:
\[ P' = \frac{Q}{n} + \frac{2R}{n} + \frac{S(n-3)}{n} \]
где:
- \( n \) — количество граней, инцидентных вершине (валентность),
- \( Q \) — среднее арифметическое гранных точек смежных граней,
- \( R \) — среднее арифметическое рёберных точек смежных рёбер,
- \( S \) — исходная позиция вершины.
После вычисления всех трёх типов точек производится перестроение сетки: каждая исходная грань заменяется четырьмя новыми гранями, вершинами которых являются соответствующие гранные, рёберные и вершинные точки.
Особенности для граничных рёбер
Для незамкнутых сеток (с границами) применяется модифицированная схема:
- Рёберные точки на граничных рёбрах вычисляются как среднее арифметическое двух концевых вершин ребра.
- Вершинные точки на границе вычисляются как среднее арифметическое исходной вершины и среднего арифметического двух соседних граничных вершин.
Свойства
- Непрерывность: на регулярных участках сетки (где все вершины имеют валентность 4) алгоритм порождает поверхность класса \( C^2 \) (дважды непрерывно дифференцируемую). В окрестностях экстраординарных вершин (валентность ≠ 4) непрерывность понижается до \( C^1 \).
- Локальность: каждая новая точка зависит только от ограниченного набора соседних точек, что позволяет эффективно реализовывать алгоритм на параллельных архитектурах.
- Аффинная инвариантность: результат не зависит от выбора системы координат.
- Предельная поверхность: при бесконечном применении алгоритма сетка сходится к гладкой поверхности, которая является кусочно-полиномиальной (бикубической B-сплайновой) на регулярных участках.
Применение
Компьютерная анимация и кино
Алгоритм Катмулла-Кларка является стандартом де-факто в индустрии CGI. Он используется в большинстве профессиональных пакетов трёхмерного моделирования (Autodesk Maya, Blender, 3ds Max, Cinema 4D, Houdini) для создания органических моделей — персонажей, животных, растений. В Pixar (организация признана иноагентом в РФ) и других студиях алгоритм применяется на этапе моделирования и рендеринга для получения гладких поверхностей с контролируемой детализацией.
Видеоигры
В игровых движках (Unreal Engine, Unity) алгоритм часто используется в режиме реального времени для динамического сглаживания моделей. Современные GPU поддерживают аппаратное ускорение субдивизии. Однако из-за вычислительной стоимости в играх обычно применяется ограниченное число итераций (1–3), а финальная сетка может быть дополнительно оптимизирована.
Научная визуализация
В вычислительной гидродинамике и биомедицинской визуализации алгоритм используется для построения гладких изоповерхностей из воксельных данных и для аппроксимации сложных геометрических форм.
Сравнение с другими методами
- Алгоритм Лёба (Loop subdivision) — работает только с треугольными сетками, порождает поверхности \( C^2 \) на регулярных участках. Используется реже, чем Катмулла-Кларка, из-за ограничения на тип граней.
- Алгоритм Дёрна-Джойса (Doo-Sabin subdivision) — обобщает биквадратичные B-сплайны, даёт поверхности \( C^1 \) на регулярных участках. Менее гладкий, чем Катмулла-Кларка.
- Алгоритм Баттерфляй (Butterfly subdivision) — интерполяционный (сохраняет исходные вершины), но менее стабилен на нерегулярных сетках.
Реализации
Алгоритм реализован во всех основных библиотеках компьютерной графики:
- OpenSubdiv (разработка Pixar, организация признана иноагентом в РФ) — библиотека с открытым исходным кодом для GPU-ускоренной субдивизии.
- CGAL (Computational Geometry Algorithms Library) — содержит реализацию для научных и инженерных задач.
- Blender — использует модифицированную версию алгоритма (модификатор Subdivision Surface) с возможностью управления весами рёбер.
Критика и ограничения
- Экстраординарные вершины: в окрестностях вершин с валентностью, отличной от 4, поверхность имеет меньшую гладкость (\( C^1 \) вместо \( C^2 \)), что может приводить к видимым артефактам при сильном изгибе.
- Вычислительная сложность: каждая итерация увеличивает количество граней в 4 раза, что при 5–6 итерациях приводит к экспоненциальному росту числа полигонов (с 1000 до 1 миллиона). Это требует эффективного управления памятью и LOD-моделей (уровней детализации).
- Граничные условия: для незамкнутых сеток качество поверхности на границах может быть ниже, чем в центре, особенно при малом числе итераций.
Интересные факты
- Эдвин Катмулл и Джеймс Кларк получили премию «Оскар» за технические достижения в 1993 году, в том числе за разработку алгоритма субдивизии.
- Алгоритм используется в системе автоматизированного проектирования (САПР) для создания гладких обводов кузовов автомобилей и корпусов самолётов.
- В 2019 году группа исследователей из MIT предложила модификацию алгоритма для работы с неоднородными сетками, где плотность вершин варьируется по поверхности.
Источники
- Catmull, E., Clark, J. «Recursively generated B-spline surfaces on arbitrary topological meshes». Computer-Aided Design, 1978.
- DeRose, T., Kass, M., Truong, T. «Subdivision surfaces in character animation». Proceedings of SIGGRAPH, 1998.
- Stam, J. «Exact evaluation of Catmull-Clark subdivision surfaces at arbitrary parameter values». Proceedings of SIGGRAPH, 1998.
- Warren, J., Weimer, H. «Subdivision Methods for Geometric Design: A Constructive Approach». Morgan Kaufmann, 2002.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →