4-5 噪声采样缩放
在上一章中,我们增强了扰动强度,使每个顶点的位移更大,最终地图整体的变化效果就更加明显了。但是当我们改变一个地图单元高度的时候,我们发现矩形阶梯连接区域的视觉效果变得非常奇怪。阶梯中的各个顶点向不懂的方向偏移,造成了三角面片的扭曲,视觉效果看起来很混乱。但是使用柏林噪声不应该会发生这种情况。
造成这个现象的原因是因为我们直接用世界坐标进行噪声采样,使得彩色噪点图平铺在每个地图单元上,但是每个地图单元的尺寸比彩色噪点图本身要大得多,实际上彩色噪点图是在任意位置被采样,这破坏了其连贯性。如下图所示,其中每个蓝色的方块表示一张彩色噪点图。
为了解决这个问题,我们要对噪声采样进行缩放,这样彩色噪点图就能覆盖更大的区域。我们在HexMetrics.cs
中添加这个缩放并设置其为0.003,然后把采样坐标与这个数值相乘。代码如下:
1 | public static class HexMetrics |
这样,采样数据的范围就是原来的 $333 \frac 33$ 倍,最终运行后的诗句效果也变得更加平滑了。即使再次改变地图单元的高度,也不会出现那种很奇怪的阶梯状三角面片了。
加入了采样缩放之后,噪声在平铺之前有个过渡过程。实际上因为单元格的内径是 $10 \sqrt 3 $,所以没有办法精确的以X轴的尺寸平铺。但是因为噪声纹理自身的连贯性,即使细节不吻合,任然能在大范围内发现重复的样式,大约是每20个地图单元之间。这只在地图没有其他编辑形状的功能时才比较明显。
至此,我们修复了采样中的连续性问题,但是在还存在一个问题,就是每个地图单元的正六边形部分,并不是平整的,这一点从对UI的坐标点遮挡就可以看出来。我们想达到的效果是,六边形边缘部分的顶点会产生扰动,但是六边形自身还保持平整。这个问题将会在下一章解决。