3D-шум становится обязательным, если на местности требуются пещерные сети и выступы.
Чтобы извлечь изоповерхность из информации о плотности, 2 самых популярных метода - это Marching Cubes (MC) и более новый Dual Contouring (DC). Необходимая структура данных сильно отличается в зависимости от выбранного метода.
Как упоминалось ранее, статья Geiss Gem 3 по GPU - очень поучительная отправная точка для понимания и реализации ландшафтов MC на GPU (обратите внимание, что его подход MC полностью работает на GPU и требует как минимум SM4 - GS-совместимого).
Поскольку данные о плотности на вокселях MC могут оставаться только на краях вокселя, классический MC может очерчивать объем, не сохраняя при этом острых краев. DC не страдает этим недостатком, поскольку информация о плотности выражается в виде трехмерной точки (минимизатор QEF), лежащей в любом месте внутри вокселя плюс знак в каждом углу.
С другой стороны, MC не страдает от самопересекающихся граней, поскольку все сгенерированные треугольники заключены в их соответствующие воксели, тогда как DC требует дополнительных вычислений для предотвращения пересечений между сгенерированными гранями. Авторы DC обратились к этой проблеме в улучшенной версии своего алгоритма.
http://www.cs.wustl.edu/~taoju/research/interfree_paper_final.pdf
http://www.cs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf
Этот сотрудник также предлагает более чистый подход, основанный на выпуклом / вогнутом анализе, чтобы избежать самопересечений. Он также использует лучшие правила разбиения четырехугольников, чтобы помочь сохранить ориентацию ребер:
http://www2.mae.cuhk.edu.hk/~cwang/pubs/TRIntersectionFreeDC.pdf
Классический MC также не является стандартным «без трещин» и может потребовать исправления трещин, если он работает на неограниченных октреях. DC не страдает от этого последнего вопроса.
Вот довольно хороший и полный обзор большинства методов извлечения сетки:
http://www.cs.berkeley.edu/~jrs/mesh/
Подход с октавой / вокселем по своей сути «дружествен к CSG», что облегчает планирование аккуратной полностью «разрушаемой» стратегии уровня игры, но если нужно реализовать все это в игре, глубина октрея также должна быть усеченной. -зависимая.
Если весь материал помещается в память или правильно транслируется, данные также могут быть использованы для рендеринга AO и вычисления физики / столкновений.
В этом конкретном примере я предполагаю, что он использовал значение z, чтобы определить, какой тип материала: камень, камень, грязь или воздух.
источник
Minecraft использует алгоритм движущихся кубов для создания трехмерного ландшафта. У меня нет ссылки на это, извините. Я точно не знаю, о чем говорил Нотч, когда упомянул функцию шума Перлина - возможно, семя для алгоритма движущихся кубов. Больше информации здесь:
И отличная статья о GPU Gems, если вы заинтересованы в походных кубах:
источник
источник