2016-01-18 10 views
3

Я хочу создать случайный фрактальный ландшафт на gpu (с помощью вычислительного шейдера). Я начал с реализации маршевых кубов http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html, и он работает очень хорошо. marching cubes on the gpu Тем не менее, маршевые кубы не могут извлечь острые объекты или использовать адаптивное разрешение.случайный воксель на gpu (dc vs. cms)

Итак, я искал усовершенствованный алгоритм извлечения изосульфата и нашел двойную контурную обработку www.cs.wustl.edu/~taoju/research/dualContour.pdf. Поэтому я применил dc в Java, чтобы протестировать этот алгоритм, и он отлично выглядит dc on the cpu (есть некоторые дыры в сетке и никаких острых функций, но мне было слишком лениво реализовать/исправить это, потому что это единственный прототип).

Но я заметил, что некоторые негативные аспекты:

-Intercelldependent (я понятия не имею, как порт это в ОГПУ, единственный ресурс, я нашел это ngildea.blogspot.de/2015/06 /dual-contouring-with-opencl.html)

-I не»знают, как создать систему куска, потому что нет никаких„четких“границ i.stack.imgur.com/62dy6.png

Итак, я продолжил поиск лучшего алгоритма и нашел кубические маршевые квадраты www.csie.ntu.edu.tw/~cyy/publications/papers/Ho2005CMS.pdf. Это, по-видимому, идеальный алгоритм для меня: межсетевые независимые, адаптивные, острые черты, первичная структура и даже многообразие. К сожалению, нет никакого ресурса, как реализовать этот алгоритм, кроме этого (grassovsky.files.wordpress.com/2014/09/thesis1.pdf). Я думаю, я понимаю две части алгоритма: создать сетку, для каждой ячейки:

  1. Subdivide пока максимальная глубина не будет достигнута или нет необходимости делать это.

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

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

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

+0

Удивительное исследование, хороший вопрос, вы нашли некоторые больше ресурсов для этого? я добавлю щедрость, если это поможет вам найти ответ. классная тема. Мне интересно узнать больше, если вы знаете себя, а если и другие знают. –

ответ

2

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

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

Оригинальная статья: http://graphics.csie.ntu.edu.tw/CMS/

Этот проект Мэтта Китер имеет реализацию 'C' CMS в нем (https://www.mattkeeter.com/projects/kokopelli/) https://github.com/mkeeter/kokopelli < - код

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

Однако имейте в виду, что это действительно частично, т. Е. Имеет основной алгоритм, работающий (адаптивный и многообразный), но у меня нет возможности реализовать четкую сохранность, двумерную и трехмерную неоднозначность и т. Д. также в настоящее время является базовой реализацией процессора ... У меня были хорошие намерения реализовать все эти вещи и сделать реализацию GPU, но пока у меня не было времени.

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