我想在gpu上创建一个随机的分形地形(使用计算着色器)。我已经开始实施行进多维数据集http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html,它的效果非常好。 marching cubes on the gpu但是,行进立方体无法提取尖锐特征或使用自适应分辨率。
因此,我寻找一种先进的等值面提取算法,并找到了双重轮廓www.cs.wustl.edu/~taoju/research/dualContour.pdf。所以我在Java中使用dc来测试这个算法,它看起来很棒dc on the cpu(网格中有一些洞,没有尖锐的特征,但是我太懒了,不能实现/修复它,因为它只是原型)。 / p>
但我注意到一些消极方面:
-Intercelldependent(我不知道如何将它移植到gpu,我找到的唯一资源就是这个ngildea.blogspot.de/2015/06/dual-contouring-with-opencl.html)
- 我不知道如何创建一个块系统,因为没有“清晰”的边界i.stack.imgur.com/62dy6.png
所以我继续寻找更好的算法,并找到了立方体行进广场www.csie.ntu.edu.tw/~cyy/publications/papers/Ho2005CMS.pdf。对我来说,这似乎是一个完美的算法:与细胞间无关,自适应,锐利的特征,原始结构甚至多样性。不幸的是,除了这个算法之外没有资源如何实现这个算法(grassovsky.files.wordpress.com/2014/09/thesis1.pdf)。我想我理解算法的两个部分:为每个单元创建一个网格:
细分直至达到最大深度或无需这样做。
将每个细胞分成6个面,提取它们的表面并将它们缝合在一起。
但我不知道如何连接这两个部分(特别是带有过渡面的部分,第38页)。
有人知道如何实现dc作为着色器,如何实现cms甚至更好的算法(可能是双行进多维数据集,我认为它有与dc相同的问题,但我还没有测试过它)?
答案 0 :(得分:2)
正如您已经提到过的GPU,您不需要细胞间依赖性......我确信人们已经为DC提出了解决方案,但CMS应该是所有那些事情的最佳选择之一您需要,即与细胞间无关(根据定义),保留锐利的特征,创建流形几何,并支持自适应分辨率。
就CMS上的资源而言,我同意它们非常有限。
原始论文:http://graphics.csie.ntu.edu.tw/CMS/
Matt Keeter的这个项目有一个' C' CMS中的实施(https://www.mattkeeter.com/projects/kokopelli/) https://github.com/mkeeter/kokopelli< - code
我使用Matt Keeter的实现作为我的部分' C ++'的参考。实现(你链接的论文),如果你没有找到它,这里是它的代码: https://bitbucket.org/GRassovsky/cubical-marching-squares
但是请记住它确实是局部的,也就是说它有主要的算法工作(自适应和流形),但我还没有实现锐利的特征保存,2D和3D消歧它目前也是一个基本的CPU实现......我有很好的意图实现所有这些东西并实现GPU实现,但现在没有时间。
"但我不知道如何连接这两个部分" - 这只能说我写论文有多糟糕,因为我试图解释我是怎么做到的:D(请注意,我不确定在原始论文中是如何完成的......我们应该说有些事情在那里不是很明确,你必须用你的想象力:))