Java 如何使用多个柏林函数平滑地形

Java 如何使用多个柏林函数平滑地形,java,smoothing,perlin-noise,Java,Smoothing,Perlin Noise,我已经在柏林噪声地形发生器上工作了一段时间了。我一直在努力实现多个噪波函数,以在地图上创建不同的特征,但我遇到了一个障碍。不同的柏林噪声函数之间的边缘是不自然的粗糙。颜色取决于噪波的值,我希望尝试平滑边界上的值,以创建更逼真的外观。我可以找到有问题的边境地区,但我不知道从那里去哪里。我该如何处理它呢 如果有帮助,我将通过以下If语句确定要使用的柏林噪波函数: if(perlin[i][j] < .22){ finalHeightMap[i][j] = seaPerlin[i][j]

我已经在柏林噪声地形发生器上工作了一段时间了。我一直在努力实现多个噪波函数,以在地图上创建不同的特征,但我遇到了一个障碍。不同的柏林噪声函数之间的边缘是不自然的粗糙。颜色取决于噪波的值,我希望尝试平滑边界上的值,以创建更逼真的外观。我可以找到有问题的边境地区,但我不知道从那里去哪里。我该如何处理它呢

如果有帮助,我将通过以下If语句确定要使用的柏林噪波函数:

if(perlin[i][j] < .22){
    finalHeightMap[i][j] = seaPerlin[i][j];
}
else if(perlin[i][j] > .22 && perlin[i][j] < .28){
    finalHeightMap[i][j] = plainsPerlin[i][j];
}
else{
    finalHeightMap[i][j] = mountainousPerlin[i][j];
}
if(perlin[i][j]<.22){
最后八位图[i][j]=seaPerlin[i][j];
}
else if(perlin[i][j]>.22和&perlin[i][j]<.28){
最终加权平均值[i][j]=普朗斯珀林[i][j];
}
否则{
最后八位地图[i][j]=高山柏林[i][j];
}

以下是严酷的边界:


任何帮助都将不胜感激

我将假设您知道如何在代码中找到边界,因为上面突出显示了这些边界。我建议对边缘周围的每个像素应用高斯模糊。你可以用这个。要演示它们的外观,请在该页面中向下滚动

基本上,只需创建每个边的像素坐标数组,然后遍历该数组,对每个边应用模糊

伪:

foreach (Location in Boundary)
    blur(location, radius)
end

我将在这里假设您知道如何在代码中找到边界,因为它们在上面突出显示。我建议对边缘周围的每个像素应用高斯模糊。你可以用这个。要演示它们的外观,请在该页面中向下滚动

基本上,只需创建每个边的像素坐标数组,然后遍历该数组,对每个边应用模糊

伪:

foreach (Location in Boundary)
    blur(location, radius)
end

你有没有试过在这些边上使用某种插值或平均机制?如果你能检测到边缘,我想你也能检测到周围的值。是的,我试过平均它周围的两个点:
(finalHeightMap[I][j]+finalHeightMap[I][j-1])/2
但是,这实际上是用于生成两幅图像的代码,但它似乎与原来没有什么不同。你可能需要在它周围平均2点以上才能注意到效果。我在考虑该地区更广泛的平均水平。看看这个页面上的一些链接,这里的颜色是否“刺眼”,因为你的地形中实际上有悬崖?根据你的代码,看起来你的高度会有很大的不连续性,但也许你已经对各种高度地图做了一些调整。@erickson是的,我的地形中实际上有悬崖,我正在尝试修复这些大的不连续性。你有没有尝试过围绕这些边缘的某种插值或平均机制?如果你能检测到边缘,我想你也能检测到周围的值。是的,我试过平均它周围的两个点:
(finalHeightMap[I][j]+finalHeightMap[I][j-1])/2
但是,这实际上是用于生成两幅图像的代码,但它似乎与原来没有什么不同。你可能需要在它周围平均2点以上才能注意到效果。我在考虑该地区更广泛的平均水平。看看这个页面上的一些链接,这里的颜色是否“刺眼”,因为你的地形中实际上有悬崖?根据你的代码,看起来你的高度会有很大的不连续性,但也许你已经对各种高度地图做了一些调整。@erickson是的,我的地形中实际上有悬崖,我正在尝试修复这些大的不连续性。所以,据我所知,这会使地图沿着边界模糊,这就是我要寻找的。然而,如果我只使用像素值并应用模糊,我最终会在高度贴图和图像之间出现差异,这将使添加更多功能变得非常困难。是否有其他方法可以使用高度贴图中的值实现相同的效果?您是否希望在高度贴图中也平滑这些剧烈的变化,还是希望保留这些变化?是的,我希望在高度贴图中也平滑这些变化。通过在高度贴图中对其进行平滑处理,最终产品将对其进行平滑处理。我建议根据需要构建图像,必要时使用高斯模糊,然后将其视为高度贴图来构建地形。因此,据我所知,这将使地图沿边界模糊,这正是我所寻找的。然而,如果我只使用像素值并应用模糊,我最终会在高度贴图和图像之间出现差异,这将使添加更多功能变得非常困难。是否有其他方法可以使用高度贴图中的值实现相同的效果?您是否希望在高度贴图中也平滑这些剧烈的变化,还是希望保留这些变化?是的,我希望在高度贴图中也平滑这些变化。通过在高度贴图中对其进行平滑处理,最终产品将对其进行平滑处理。我建议根据需要构建图像,必要时使用高斯模糊,然后将其作为高度贴图来构建地形。