Введение
Марширующие кубы — это алгоритм компьютерной графики, опубликованный Лоренсеном и Клайном в материалах SIGGRAPH 1987 года, для извлечения полигональной сетки изоповерхности из трёхмерного дискретного скалярного поля (элементы которого иногда называют вокселями). Области применения этого алгоритма в основном связаны с медицинской визуализацией, такой как данные компьютерной томографии и МРТ, а также со специальными эффектами или 3D-моделированием с использованием так называемых метаболов или других метаповерхностей. Алгоритм марширующих кубов предназначен для использования в 3D; двухмерная версия этого алгоритма называется алгоритмом марширующих квадратов.
Marching cubes is a computer graphics algorithm, published in the 1987 SIGGRAPH proceedings by Lorensen and Cline, for extracting a polygonal mesh of an isosurface from a three dimensional discrete scalar field (the elements of which are sometimes called voxels). The applications of this algorithm are mainly concerned with medical visualizations such as CT and MRI scan data images, and special effects or 3 D modelling with what is usually called metaballs or other metasurfaces. The marching cubes algorithm is meant to be used for 3 D; the 2 D version of this algorithm is called the marching squares algorithm.
История
Алгоритм был разработан Уильямом Э. Лоренсеном (1946–2019) и Харви Э. Клайн в результате их исследований для General Electric. В General Electric они работали над способом эффективной визуализации данных, полученных с устройств КТ и МРТ. В основе алгоритма лежит разделение входного объема на дискретный набор кубов. При условии линейной реконструкции фильтрации, каждый куб, содержащий фрагмент заданной изоповерхности, может быть легко идентифицирован, поскольку значения выборки в вершинах куба должны охватывать значение целевой изоповерхности. Для каждого куба, содержащего часть изоповерхности, генерируется треугольная сетка, аппроксимирующая поведение трилинейного интерполянта внутри куба. Первая опубликованная версия алгоритма использовала вращательную и зеркальную симметрию, а также внесла изменения в таблицу, содержащую 15 уникальных случаев. Однако, из-за неоднозначности поведения трилинейного интерполянта на гранях и внутри кубов, сетки, полученные с помощью Marching Cubes, демонстрировали разрывы и топологические проблемы. Для куба сетки неоднозначность грани возникает, когда знаки его вершин чередуются: вершины одной диагонали на этой грани положительны, а вершины на другой – отрицательны. Следует отметить, что в этом случае знаков вершин грани недостаточно для определения правильного способа триангуляции изоповерхности. Аналогично, внутренняя неоднозначность возникает, когда знаков вершин куба недостаточно для определения корректной триангуляции поверхности, то есть, когда для одной и той же конфигурации куба возможны несколько вариантов триангуляции. Популярность Marching Cubes и его широкое распространение привели к ряду улучшений алгоритма, направленных на устранение неоднозначностей и корректное отслеживание поведения интерполянта. Дёрст в 1988 году первым отметил, что таблица триангуляции, предложенная Лоренсеном и Клайном, была неполной, и что некоторые случаи Marching Cubes допускают множественные триангуляции. "Дополнительная ссылка" Дёрста относилась к более раннему, более эффективному (см. де Араухо) алгоритму изополигонизации поверхности, разработанному Уайвиллом, Уайвиллом и Макфитерсом. Позже, Нильсон и Хаманн в 1991 году обнаружили неоднозначность поведения интерполянта на гранях куба и предложили тест, названный "Асимптотический решатель", для корректного отслеживания интерполянта на гранях куба. Фактически, как заметил Натараджан в 1994 году, эта проблема неоднозначности возникает и внутри куба. В своей работе автор предложил тест устранения неоднозначности, основанный на критических точках интерполянта, и добавил четыре новых случая в таблицу триангуляции Marching Cubes (подслучаи случаев 3, 4, 6 и 7). Даже после всех предложенных улучшений алгоритма и его таблицы триангуляции, сетки, генерируемые Marching Cubes, все еще содержали топологические несоответствия. Marching Cubes 33, предложенный Черняевым в 1995 году, является одним из первых алгоритмов извлечения изоповерхности, предназначенных для сохранения топологии трилинейного интерполянта. В своей работе Черняев расширил число случаев в таблице поиска триангуляции до 33 и предложил иной подход к решению внутренних неоднозначностей, основанный на Асимптотическом решателе. Позднее, в 2003 году, Нильсон доказал, что таблица поиска Черняева полна и может представлять все возможные варианты поведения трилинейного интерполянта, а Левинер и др. предложили реализацию алгоритма. Также в 2003 году Лопес и Бродли расширили тесты, предложенные Натараджаном, выявили и исправили алгоритмические неточности, которые нарушали топологическую корректность сетки, сгенерированной алгоритмом Marching Cubes 33, предложенным Черняевым.
Алгоритм
Алгоритм последовательно обрабатывает скалярное поле, рассматривая восемь соседних точек за один раз (формируя таким образом воображаемый куб), и затем определяет полигон(ы), необходимые для представления части изоповерхности, проходящей через этот куб. Отдельные полигоны затем объединяются в целевую поверхность. Это достигается путем создания индекса для предварительно вычисленного массива из 256 возможных конфигураций полигонов (2^8=256) внутри куба, рассматривая каждое из 8 скалярных значений как бит в 8-битном целом числе. Если значение скаляра превышает значение изоуровня (то есть находится внутри поверхности), соответствующий бит устанавливается в единицу, а если значение меньше (находится снаружи) – в ноль. Итоговое значение, полученное после проверки всех восьми скаляров, является индексом в массив индексов полигонов. Наконец, каждая вершина сгенерированных полигонов располагается в соответствующей позиции вдоль ребра куба путем линейной интерполяции двух скалярных значений, связанных этим ребром. Градиент скалярного поля в каждой точке сетки также является нормальным вектором гипотетической изоповерхности, проходящей через эту точку. Следовательно, эти нормали могут быть интерполированы вдоль ребер каждого куба для определения нормалей генерируемых вершин, которые необходимы для затенения полученной сетки с использованием модели освещения.
Патентные вопросы
Внедрение алгоритма марширующих кубов было запатентовано как патент США № 4710876. Для обхода этого патента, а также для решения незначительной проблемы неоднозначности, возникающей в алгоритме марширующих кубов при определенных конфигурациях кубов, был разработан другой аналогичный алгоритм, известный как марширующие тетраэдры. Срок действия патента истек в 2005 году, и теперь графическое сообщество может использовать его без выплаты роялти, поскольку с даты выдачи (1 декабря 1987 года) прошло более 20 лет.