如何加快行进立方体的速度?

Dan*_*ton 7 3d performance marching-cubes

我正在使用这个行进立方体算法绘制3D等值面(移植到C#,输出MeshGeomtry3Ds,但其他方面相同).结果表面看起来很棒,但需要很长时间才能计算出来.

有没有办法加速行进立方体?最明显的一个是简单地降低空间采样率,但这会降低结果网格的质量.我想避免这种情况.

我正在考虑一个双通道系统,第一次通过采样空间更粗糙,消除了场强远低于我的等级的体积.这是明智的吗?有什么陷阱?

编辑:代码已被分析,并且大部分CPU时间在行进立方体例程本身和每个网格单元角落的场强计算之间分配.现场计算超出了我的控制范围,因此加速立方体程序是我唯一的选择......

我仍然想到试图消除死区的想法,因为这会大大减少对两个系统的调用次数.

小智 5

我知道这有点旧,但我最近基于相同的来源实现了Marching Cubes.这里有很多低效率.至少,如果你做的事情

for (int x=0; x<densityArrayWidth; x++)
  for (int z=0; z<densityArrayLength; z++)
    for (int y=0; y<densityArrayHeight; y++)
      Polygonize(Gridcell, isolevel, Triangles)
Run Code Online (Sandbox Code Playgroud)

看看你要重新分配edgeTable和Tritable的次数!那些立即需要搬到整个班级.我也抛弃了gridCell对象,直接从点/值到三角形.

简而言之,它不仅仅是算法的复杂性,内存分配(在基础中它确实占用了大量的内存)也需要时间.