Marching cubes (Marching cubes)

Перейти к навигации Перейти к поиску
Модель, построенная из 150 слоев с МРТ с использованием алгоритма marching cubes. Под поверхностью находятся около 150 000 полигонов и скрытых объектов. Размер сетки составляет 64 × 64 × 150 вокселей, кодированных 8-ю битами. Для сглаживания поверхности модели был применён пре-процессинг. «Дырка» в области виска является следствием пирсинга обследуемого.

Marching cubes (с англ. — «шагающие кубики») — алгоритм в компьютерной графике, впервые предложенный в 1987 году на конференции SIGGRAPH Вильямом Лоренсеном и Харви Клайном[1], для обработки полигональной сетки изоповерхности трехмерного скалярного поля (чаще называемой сеткой вокселей).

Аналогичный алгоритм на плоскости называется marching squares.

Принцип работы

[править | править код]

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

Так как алгоритм выбирает полигоны, исходя только из положения вершин куба относительно изоповерхности, всего получается 256 () возможных конфигураций полигонов, которые можно вычислить заранее и сохранить в массиве. Поэтому каждый куб можно представить восьмибитным числом, сопоставив каждой вершине 1, если значение поля в точке больше, чем на изоповерхности, и 0 в противном случае. Полученное число используется в качестве индекса элемента массива, хранящего конфигурации полигонов. Наконец, каждая вершина сгенерированного полигона помещается в подходящую позицию на том ребре куба, на котором она лежала изначально. Позиция вычисляется путём линейной интерполяции значений скалярного поля в концах ребра.

15 различных конфигураций куба.

Заранее вычисленный массив из 256 конфигураций полигонов можно получить поворотами и отражениями 15 различных конфигураций куба. Однако использование всего 15 базовых конфигураций не гарантирует получение замкнутой поверхности. Базовые конфигурации, лишенные этого недостатка, можно найти в специальной литературе[источник не указан 3972 дня].

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

Данный алгоритм широко используется в медицине, например, в компьютерной и магнитно-резонансной томографии, а также для трёхмерного моделирования метасфер или других метаповерхностей.

Алгоритм The Marching Cubes был первым примером в области компьютерной графики, спровоцировавшим скандал в области патентования ПО. Он был запатентован несмотря на относительную очевидность решения задачи генерации поверхности. Позднее был разработан похожий алгоритм, названный marching tetrahedrons, который для того, чтобы обойти патент, использует вместо кубов тетраэдры. Срок действия патента истек в 2005 году, сейчас алгоритм можно свободно использовать. (Патент от 5 июня 1985 года[2]).

Примечания

[править | править код]
  1. William E. Lorensen, Harvey E. Cline: Marching Cubes: A high resolution 3D surface construction algorithm. In: Computer Graphics, Vol. 21, Nr. 4, July 1987
  2. Marching Cubes, US Patent Office entry

Внешние ссылки

[править | править код]