4-4 扰动强度

  在上一章中,我们同归在彩色噪点图中进行采样,完成了对地图上所有顶点的扰动,但是最终的视觉效果恨不明显。按照之前的代码来看,一个顶点在每个维度上最大位移距离只有1,所以每个顶点扰动的最大位移只有 $\sqrt3 \approx 1.73$ 的单位长度,而且极限位移情况产生的概率还非常低。相较于每个地图单元10的外径来说,这个扰动太小了。
  解决这个问题的方式也很简单,就是在HexMetrics.cs中加如一个扰动强度值。让我们先把扰动强度是指为5,这样理论上一个顶点的最大位移距离就有 $\sqrt5 \approx 8.66$ 单位长度。最终扰动结果就会明显很多了。代码如下:

HexMetrics.cs
1
2
3
4
5
6
7
8
9
public static class HexMetrics
{
//扰动强度
//这个值是一个坐标点在每个轴向上的偏移强度
//最大偏移量就是 √ ̄(3*5^2) ≈ 8.66
public const float cellPerturbStrength = 5f;


}

  回到HexMesh.Perturb方法中,通过相乘的方式应用采样数据。代码如下:

HexMesh.cs
1
2
3
4
5
6
7
8
9
10
11
private Vector3 Perturb(Vector3 position)
{


//增加了每个点的扰动强度
position.x += (sample.x * 2f - 1f) * HexMetrics.cellPerturbStrength;
position.y += (sample.y * 2f - 1f) * HexMetrics.cellPerturbStrength;
position.z += (sample.z * 2f - 1f) * HexMetrics.cellPerturbStrength;

return position;
}

  再次运行后我们看到,增加了扰动强度之后,每个顶点的偏移就变得非常明显了。

  但是当我们升高某个地图单元的时候,产生了一些奇怪的视觉效果,阶梯状的矩形连接变得非常扭曲,某些相邻的地图单元之间,连接部分甚至会有破面的情况发生。在接下来的章节中,我们来解决这个问题。

Github代码