Введение
Марширующий тетраэдр — это алгоритм в области компьютерной графики для визуализации неявных поверхностей. Он устраняет незначительную проблему неоднозначности алгоритма марширующих кубов для некоторых конфигураций кубов. Алгоритм был впервые представлен в 1991 году. В то время как оригинальный алгоритм марширующих кубов был защищен программным патентом, марширующий тетраэдр предлагал альтернативный алгоритм, не требующий патентной лицензии. С момента подачи заявки на патент (5 июня 1985 года) прошло более 20 лет, и алгоритм марширующих кубов теперь может использоваться свободно. При необходимости незначительные улучшения марширующего тетраэдра могут быть использованы для исправления вышеупомянутой неоднозначности в определенных конфигурациях. В алгоритме марширующего тетраэдра каждый куб разделяется на шесть нерегулярных тетраэдров путем разрезания куба пополам трижды, диагонально проходя через каждую из трех пар противоположных граней. Таким образом, все тетраэдры имеют одну из главных диагоналей куба. Вместо двенадцати ребер куба теперь у нас девятнадцать ребер: исходные двенадцать, шесть диагоналей граней и главная диагональ. Как и в алгоритме марширующих кубов, пересечения этих ребер с изоповерхностью аппроксимируются линейной интерполяцией значений в узлах сетки. Соседние кубы имеют все общие ребра на соединяющей грани, включая одну и ту же диагональ. Это важное свойство предотвращает появление трещин на отрисованной поверхности, поскольку интерполяция двух различных диагоналей грани обычно дает немного отличающиеся точки пересечения. Дополнительным преимуществом является то, что до пяти вычисленных точек пересечения можно повторно использовать при обработке соседнего куба, включая вычисленные нормали поверхности и другие графические атрибуты в точках пересечения. Каждый тетраэдр имеет шестнадцать возможных конфигураций, которые делятся на три класса: отсутствие пересечения, пересечение в одном треугольнике и пересечение в двух (смежных) треугольниках. Можно легко перечислить все шестнадцать конфигураций и сопоставить их со списками индексов вершин, определяющими соответствующие треугольные полосы.
Сравнение с марширующими кубиками
Марширующий тетраэдр вычисляет до девятнадцати пересечений рёбер на куб, в то время как марширующие кубы требуют только двенадцать. Лишь одно из этих пересечений не может быть использовано совместно со смежным кубом (пересечение на главной диагонали), однако совместное использование на всех гранях куба усложняет алгоритм и значительно увеличивает требования к памяти. С другой стороны, дополнительные пересечения обеспечивают немного более высокое разрешение при дискретизации. Количество конфигураций, определяющих размер обычно используемых таблиц поиска, значительно меньше, поскольку в каждом тетраэдре участвует всего четыре, а не восемь отдельных вершин. Вместо одного куба необходимо обработать шесть тетраэдров. Процесс однозначен, поэтому дополнительная обработка неоднозначности не требуется. Недостатком является то, что при разбиении куба на тетраэдры необходимо выбирать ориентацию тетраэдров, что может приводить к появлению искусственных "неровностей" на изоповерхности из-за интерполяции по диагоналям граней.
Алмазная решетчатая ячейка - альтернативный метод резки кубиков
Кубические ячейки, подлежащие триангуляции, также могут быть разделены на 5 тетраэдров, используя в качестве основы (ромбоэдрическую) решетку. Кубы соединяются по каждой стороне с другим кубом, имеющим противоположную ориентацию тетраэдра относительно центра куба. Чередующиеся вершины имеют разное количество пересекающихся с ними тетраэдров, что приводит к незначительно отличающейся сетке в зависимости от положения. При таком разделении обеспечиваются дополнительные плоскости симметрии; наличие тетраэдра вокруг центра куба также создает открытые пространства вокруг точек, находящихся вне поверхности. Ромбоэдрическая решетка имеет различные способы визуализации. Вместо пустых ячеек каждая ячейка должна быть заполнена чередующимися внутренними тетраэдрами. Для каждого тетраэдра, вписанного в куб, использующего вершины куба и ребра, пересекающие грани куба, тетраэдр занимает 4 точки; остальные 4 точки образуют вершины инвертированного тетраэдра; кубические ячейки располагаются таким образом, чтобы положение ячейки (x+y+z+) было нечетным, используйте один вариант, иначе – инвертированный; в противном случае соседние ячейки использовали бы другую диагональ для вычисления пересечения. Расчет цвета на основе системы пространственных текстур может быть выполнен с использованием текущей позиции фрагмента для выбора из повторяющейся текстуры на основе пар координат Texel (графических) (x, y), (y, z) и (x, z) и масштабирования этих значений на абсолютную величину каждого соответствующего компонента нормали – z, x и y соответственно. Наложение текстур (декалирование) может быть применено как растеризация текстур путем проецирования позиции текущего фрагмента в направлении нормали декали на плоскость текстуры, заданную начальной точкой и нормалью, а затем использования направленного вектора "вверх" или "вправо" для вычисления координат текстуры. Эта техника ближе всего к двойному контуру, который указан в разделе Isosurface, как потенциальный метод. Тетраэдры DCL включают дополнительные вычисления для диагоналей на гранях куба, в то время как двойной контур этого не требует. Этот метод также не учитывает ситуацию, когда две близкие точки "внутри" поверхности находятся на суммарном расстоянии менее 1 от поверхности, в этом случае они должны генерировать две точки на ребре вместо одной; соответствующая модификация – многогранный двойной контур.