Как Marching Cubes работает с беззнаковыми расстояниями?

Я работаю с полями расстояния со знаком/без знака (SDF/UDF). Я могу визуализировать сетку из расстояний со знаком, используя Marching Cubes. Но рендеринг сетки из беззнаковых расстояний также работает с помощью Marching Cubes, и интересно, почему?

Мне известно, например, об этой статье (DUDE: Deep Unsigned Distance Embeddings), в котором говорится, что поля расстояний без знака могут работать в среде Marching Cubes, но, насколько я понимаю, алгоритм обнаруживает границу формы, выясняя, находятся ли точки куба внутри или вне формы. Как это реализовано при использовании полей расстояния без знака, где присутствуют только положительные значения расстояния?

Я был бы очень признателен за объяснение того, как работает алгоритм марширующего куба с точки зрения расстояний без знака.

Что касается реализации Marching Cubes, я использовал один из DeepSDF (Реализация DeepSDF Marching Cubes), который сам использует skimage.measure.marching_cubes_lewiner

Заранее спасибо!


person Saipy    schedule 08.07.2021    source источник


Ответы (1)


Маршевые кубы определяют границу фигуры с помощью пересечения нуля и определяют состояние внутри/снаружи с помощью знаков. Если вы перевернете знаки, внешнее станет внутренним, и наоборот — это не изменит границы, поскольку пересечение нуля не изменится.

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

person hkchengrex    schedule 09.07.2021
comment
Привет @hkchengrex, спасибо за ответ! Я понимаю, что Marching Cubes находит поверхность между точкой с положительным расстоянием и точкой с отрицательным расстоянием путем пересечения нуля. Но тот же алгоритм работает и с UDF, где у нас нет пересечения нуля. Как алгоритм узнает, что поверхность должна лежать здесь, если в кубе два или более положительных расстояния? Насколько я понимаю, трассировка сфер не используется в Marching Cube DeepSDF. - person Saipy; 12.07.2021
comment
@Saipy UDF могут иметь переходы через нуль - см. рис. 3 цитируемой вами статьи. - person hkchengrex; 12.07.2021