Алгоритм Катмулла — Кларка

(перенаправлено с «Алгоритм Кэтмелла — Кларка»)

Алгоритм Катмулла — Кларка — это техника, используемая в компьютерной графике для создания гладких поверхностей путём моделирования подразделения поверхности[en]. Алгоритм разработали Эдвин Катмулл и Джеймс Кларк в 1978 как обобщение бикубических однородных B-сплайновых поверхностей для произвольной топологии[1]. В 2005 году Эдвин Катмулл получил премию Американской академии за технические достижения[en] вместе с Тони Дероузом и Джосом Стэмом[en] за их разработки в области подразделения поверхностей. (Вот смысл википедии, если любой может редактировать текст?...)

Первые три шага подразделения куба методом Катмулла — Кларка и предельная поверхность (внизу)


Рекурсивные вычисления править

Поверхности Катмулла — Кларка определяются рекурсивно, используя следующую схему последовательных уточнений[1]:

Начинаем с сетки в виде произвольного многогранника. Все вершины этой сетки будем называть исходными точками.

  • Для каждой грани добавляем точку грани
    • Выбираем в качестве точки грани среднее всех исходных точек соответствующей грани.
  • Для каждого ребра добавляем точку ребра.
    • Выбираем в качестве точки ребра среднее из двух соседних точек грани и двух исходных конечных точек ребра.
  • Для каждой точки грани, добавим ребро для каждого ребра грани, соединяя точку грани с точкой ребра для грани.
  • Для каждой исходной точки P берём среднее F для всех n (вновь созданных) точек граней для граней, касающихся P, и берём среднее R всех n точек рёбер для (исходных) рёбер, касающихся P, где середина каждого ребра является средним двух конечных вершин (не путать с новыми «точками рёбер», определёнными выше). Переносим каждую исходную точку в точку
 
Эта точка является барицентром точек P, R и F с весами (n − 3), 2 и 1.
  • Соединяем каждую новую точку с новыми точками рёбер всех исходных рёбер, инцидентных исходной вершине.
  • Определяем новые грани, заключённые новыми рёбрами.

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

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

Формулу для барицентра Катмулл и Кларк выбрали, исходя из эстетических, а не математических, соображений, хотя Катмулл и Кларк приложили большие усилия, чтобы строго доказать, что метод сходится к бикубическим B-сплайновым поверхностям[1].

Точные вычисления править

Результирующая подразделённая поверхность Катмулла — Кларка может быть получена прямо без последовательных улучшений. Это можно сделать с помощью техники Джоса Стэма[en][2]. Этот метод переформулирует процесс последовательных приближений в задачу вычисления экспоненты матрицы, которую можно решить путём диагонализации матрицы.

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

Примечания править

  1. 1 2 3 Catmull, Clark, 1978, с. 350.
  2. Stam, 1998, с. 395–404.
  3. Архивированная копия. Дата обращения: 18 августа 2017. Архивировано из оригинала 23 ноября 2016 года.
  4. Manuel Kraemer. OpenSubdiv: Interoperating GPU Compute and Drawing // Multithreading for Visual Effects (англ.) / Martin Watt, Erwin Coumans, George ElKoura, Ronald Henderson, Manuel Kraemer, Jeff Lait, James Reinders. — CRC Press, 2014. — P. 163—199. — ISBN 978-1-4822-4356-7.
  5. Meet the Experts: Pixar Animation Studios, The OpenSubdiv Project - YouTube. Дата обращения: 18 августа 2017. Архивировано 26 января 2017 года.
  6. Pixar’s OpenSubdiv V2: a detailed look | fxguide. Дата обращения: 18 августа 2017. Архивировано 30 июля 2017 года.
  7. Архивированная копия. Дата обращения: 18 августа 2017. Архивировано 12 марта 2018 года.
  8. OpenSubdiv Blender demo - YouTube. Дата обращения: 18 августа 2017. Архивировано 7 января 2016 года.

Литература править

Литература для дальнейшего чтения править