Я пытаюсь создать трехмерный мир, состоящий из вокселей (кубов). Я пытаюсь сгладить мир, но мне нужно, чтобы некоторые блоки были «блокированными». Марширующие кубы — очень популярный способ сглаживания мира, но я не вижу хорошего способа добавления к ним «блочных» кубов.
Поскольку я использую только 1 или 0 в качестве плотности, есть ли простой способ упростить мир для обычных блоков, как в этот видео и держать «блочные» кубики такими, какие они есть?
Мне известен ряд других алгоритмов, которые допускают четкие функции и тому подобное. Но так как мне нужно только 1 проход, меш не нужно сглаживать полностью, есть ли лучший способ сгладить это, чем с помощью одного из многочисленных, гораздо более сложных алгоритмов?
Отредактируйте для уточнения того, что я имею в виду с помощью гладких и «блочных» кубов:
Я считаю, что сетка, показанная в видео, гладкая. Под «блочными» кубами я имею в виду кубы с углами 90 градусов. Эти сглаженные воксели не такие гладкие, но этого достаточно для моей цели.
Успенский 1)
Различие между «гладкими» и «квадратными» секциями будет основано на типе отображаемого / внутриигрового материала.
Предположение 2)
Использование бинарной плотности происходит из-за того, что на самом деле не хранит плотность, а скорее сохраняет (в некоторой степени сжатым образом) идентичность или тип материи в каждой точке.
Успенский 3)
Сетка не должна быть коллекторной. (самопересечение разрешено, хотя отверстий быть не должно).
Результат:
Отдельные проходы сетки для каждого материала.
Если материал «гладкого типа», запустите на нем марширующие кубики.
Если материал «блочный», поместите некоторые из шести четырехугольников вокруг каждой точки.
Чтобы сохранить «твердость» (непрерывность поверхности, без отверстий), гладкий проход должен учитывать любое твердое тело как занятое пространство, в то время как проход блока должен игнорировать только те случаи, когда грань является блоком (или непрерывно гладким материалом, но это требует дополнительной 8 чеков подаются на чек, что может быть хуже, чем таскать с собой кучу пустых внутренних граней).
Чтобы избежать дублирования, сглаженная поверхность рисуется только в том случае, если хотя бы одна из 8 точек имеет «гладкий тип», в то время как прохождение блока отрисовывается, если центральная точка имеет «блочный тип».
Насколько я могу судить, проблема 3 ^ 8 возникает из-за одного прохода со значениями по углам. Добавляя второй проход (с точками по сторонам и в центре), нужно вычислить только 2 ^ 6 + 1 случаев, помимо 2 ^ 8, уже присутствующих в проходном проходе кубов.
Других решений пока нет …