如何平滑体素地形的低分辨率噪声采样

我试图创建一个新的形发生器作为一个我的世界MOD的一部分,如果它在全地形分辨率(每个地形块16x256x16体素)采样时效果很好。 这是非常滞后的,所以我试图使用一个更低分辨率的样本,x4x64x4,在每个正轴上插入一个额外的样本(5x65x5,代表20x260x20空间)。

这一切工作正常,直到我试图平滑4x4x4的地形多维数据集。 我已经尝试每个块的噪声值(0.0到2.0),沿着每个正轴插入其旁边的值,每个值通过块与块的接近程度来加权。

结果有一些平滑,但有些似乎旋转了90度,有些地方没有平滑。 我知道这是可能的,我的世界在内部(代码是难以理解的混乱,约半页,20个variables和6个循环)。

有没有人有关于可靠的平滑方法的任何想法,只知道大块的内容和北/东/上的一个样本?

我目前的噪音arrays发生器:

protected double[] getNoise(float x, float z) { // get a rough noisemap every 4 blocks, 1 more past the edge to round with double[] n = new double[1625]; // x65x5x5 3D space in order y,x,z represents one chunk at 1/4 precision (1024 blocks plus 601 blocks padding along the positive-axis sides for rounding. Minecraft uses 825 doubles internally, 5x33x5) for(int lx = 0; lx < 5; ++lx) for(int lz = 0; lz < 5; ++lz) { // some extra noise that controls terrain thickness along Y double m = 32+(1f+SimplexNoiseGenerator.getNoise( (x+(lx*4))/256, (z+(lz*4))/256) )*32; for(int ly = 0; ly < 65; ++ly) { n[ (ly*25) + (lx*5) + lz ]= ( 1f+SimplexNoiseGenerator.getNoise( (float)(x+(lx*4))/512f, ((float)ly*4)/m, (float)(z+(lz*4))/512f ) ) * (1.5f-(Math.abs(32f-ly)/32f) ) ; } } return n; } 

有人张贴在堆栈溢出,这是完全一样的问题,似乎没有得到解决。 https://stackoverflow.com/questions/35852194/smooth-lower-resolution-voxel-noise