При чтении статьи до страницы 2 кажется, что веса объема хранятся по углам сетки, а не являются весом самого куба, как предпочитают обычные алгоритмы стиля Marching Cubes. Эти угловые веса определяют точку между краями между двумя углами, в которой происходит изменение знака от угла к углу. Края с изменением знака также сохраняют нормаль для края, являющегося угловой линией в 2D-представлении в OP. Эта нормальная информация определяется во время создания тома (каким бы ни был инструмент редактирования или метод создания процедурного тома), а не после того, как изоповерхность сгенерирована, как и следовало ожидать от алгоритма стиля Marching Cubes. Эти нормальные данные «заявляют», что линия / поверхность, проходящая через точку, должна иметь предварительно определенное нормальное значение. В тех случаях, когда Марширующие кубы будут сгибать линию в этой точке, чтобы совпасть с другой точкой на соседнем ребре, Расширенные марширующие кубы и Двойное контурное движение вытягивают линию / поверхность наружу, пока она не пересекается с линией / поверхностью, проходящей через точку на смежный край, который имеет другое нормальное значение. Это позволяет создавать острые углы из объемных данных, где базовые алгоритмы Marching Cubes несколько округлили бы поверхность. Я не совсем понимаю, как QEF (квадратичные функции ошибок) играют в этом, за исключением того, что кажется, что они облегчают вычисление расширенной точки в кубе, где будет расположен угол. Оба расширенных марширующих куба и двойное контурное удлинение расширяют линию / поверхность, пока она не пересекается с линией / поверхностью, проходящей через точку на соседнем ребре, которая имеет другое нормальное значение. Это позволяет создавать острые углы из объемных данных, где базовые алгоритмы Marching Cubes несколько округлили бы поверхность. Я не совсем понимаю, как QEF (квадратичные функции ошибок) играют в этом, за исключением того, что кажется, что они облегчают вычисление расширенной точки в кубе, где будет расположен угол. Оба расширенных марширующих куба и двойное контурное удлинение расширяют линию / поверхность, пока она не пересекается с линией / поверхностью, проходящей через точку на соседнем ребре, которая имеет другое нормальное значение. Это позволяет создавать острые углы из объемных данных, где базовые алгоритмы Marching Cubes несколько округлили бы поверхность. Я не совсем понимаю, как QEF (квадратичные функции ошибок) играют в этом, за исключением того, что кажется, что они облегчают вычисление расширенной точки в кубе, где будет расположен угол.
Обратите внимание, что я говорил о линиях и ребрах здесь в двумерном смысле, как это показано в представлении в OP. Мне нужно было бы еще немного почитать и подумать, чтобы расширить это до 3D для генерации объемных сеток.
Чтобы ответить на вторую половину вашего вопроса о том, как генерировать нормали, и, исходя из процедурной точки зрения, основанной на шуме, кажется, что вы бы заполнили свой объем данными о шумах, затем искали ребра со сменой знака, а затем изучили 4 куба. которые разделяют ребро, чтобы выяснить, где будут генерироваться треугольники, и вычислить нормаль вершины, как вы это делали бы для любого другого пересечения нескольких треугольников, взяв среднее значение нормали для каждого треугольника, который разделяет вершину. Это очень умозрительно с моей стороны, так как статья посвящена в основном операциям CSG и объемам, полученным из преобразованных в отсканированные сетки, которые имеют четко определенные нормали на поверхностях.
Я надеюсь, что, по крайней мере, в первой части этого ответа рассматриваются различия в том, как данные о весе представлены и используются способом, совершенно отличным от базовых марширующих кубов, и почему нормальные данные должны быть созданы довольно рано в процессе генерации объема, где с помощью базовых марширующих кубов нормали обычно создаются как последний этап в процессе генерации сетки.