случайный воксельный ландшафт на графическом процессоре (постоянный ток против смс)

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

Поэтому я искал продвинутый алгоритм извлечения изоповерхностей и нашел Dual Contouring of Hermite Data< /а>. Поэтому я реализовал dc на Java для тестирования этого алгоритма, и он выглядит великолепно: dc на процессоре. (В сетке есть некоторые дыры и нет острых элементов, но мне было лень реализовывать/исправлять это, потому что это всего лишь прототип.)

Но я заметил несколько негативных моментов:

Поэтому я продолжил поиск лучшего алгоритма и нашел Cubical Marching. Квадраты: адаптивная функция, сохраняющая извлечение поверхности из объемных данных. Это кажется мне идеальным алгоритмом: межклеточно-независимый, адаптивный, четкие черты, первичная структура и даже многообразие. К сожалению, нет ресурсов о том, как реализовать этот алгоритм, кроме этих Cubical Marching Squares. Реализация. Я думаю, что понимаю две части алгоритма: создайте сетку для каждой ячейки:

  1. Разделяйте до тех пор, пока не будет достигнута максимальная глубина или пока в этом нет необходимости.

  2. Разделите каждую ячейку на 6 граней, извлеките их поверхность и сшейте вместе.

Но я не знаю, как соединить эти две части (особенно часть с переходными гранями, стр. 38).

Итак, кто-нибудь знает, как реализовать DC в качестве шейдера, как реализовать cms или лучший алгоритм (может быть, двойные марширующие кубы, я думаю, что у него та же проблема, что и у DC, но я еще не тестировал его)?


person sidit77    schedule 18.01.2016    source источник
comment
отличное исследование, хороший вопрос, вы нашли еще ресурсы для него? я добавлю награду за это, если это поможет вам найти ответ. Классная тема, мне интересно узнать больше, знаете ли вы себя и знают ли другие.   -  person DeltaEnfieldWaid    schedule 29.03.2016


Ответы (1)


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

Что касается ресурсов на CMS, я согласен, что они довольно ограничены.

Оригинал документа: http://graphics.csie.ntu.edu.tw/CMS/

В этом проекте Мэтта Китера реализована CMS на языке C (https://www.mattkeeter.com/projects/kokopelli/) https://github.com/mkeeter/kokopelli ‹- - код

Я использовал реализацию Мэтта Китера в качестве эталона для моей частичной реализации C++ (тезис, на который вы ссылались), вот код для него, если вы его не нашли: https://bitbucket.org/GRassovsky/cubical-marching-squares

Однако имейте в виду, что он действительно частичный, то есть в нем работает основной алгоритм (адаптивный и многообразный), но я не удосужился реализовать сохранение четких функций, устранение неоднозначности 2D и 3D и т. д. Это также в настоящее время базовая реализация ЦП ... У меня были благие намерения реализовать все эти вещи и реализовать реализацию ГП, но пока не было времени.

"Но я не знаю, как соединить эти две части" - это только говорит о том, как плохо я написал свою диссертацию, потому что я пытаюсь объяснить, как я это делаю :D (Заметьте, Я не уверен, как именно это было сделано в оригинальной статье... можно сказать, что некоторые вещи там не очень ясны, и вам пришлось бы использовать свое воображение :))

person G.Rassovsky    schedule 08.06.2016