在 Minecraft 中实现 Value Noise Terrain

请注意时效性!文章创建于:2022-06-11

什么是Value Noise Terrain?

Value Noise , 即 值噪声
主要思路是定义若干顶点且每个顶点含有一个随机值,这些顶点会根据自己的随机值对周围坐标产生影响,越靠近顶点则越容易受该顶点影响。当需求某个坐标的输出值是,需要将改坐标附近的各个顶点所造成的影响值进行叠加,从而得到一个总之并输出,
相较于 Perlin Noise 更为简易
但缺点也是明显的,不够平滑,也无法做到像 Perlin Noise 那样的自如

那么Value Noise Terrain , 即为 值噪声地形
也就是通过值噪声来生成地形。

如何去做?

现在这里有一个n*n大小的格子,他有四个顶点 $P_1$, $P_2$, $P_3$, $P_4$,表示不同的值。
在格子内又有无数个点$N_n$。

现在任取一个点$N_1$。而要做的便是让$N$所受$P_1$,$P_2$,$,P_3$,$P_4$不同影响下的一个平均值

现在,先开始着手于“权重”,什么是权重?权重为各顶点对$N_1$的影响的程度。
那么权重要怎么计算呢?观察图片,我们可以看到$N_1$距离各个顶点有近有远,
所以可以尝试用坐标来当作权重。

将点$N_1$坐标列出来,就可以开始计算权重了。
注:m为格子边长

$$
\frac{P_1 (m-z)+P_2 z}{m}=n_1
$$
$$
\frac{P_3(m-z)+P_4 z}{m}=n_2
$$
$$
\frac{P_1 (m-x)+P_2 x}{m}=n_3
$$
$$
\frac{P_3 (m-x)+P_4 x}{m}=n_4
$$
$$
\frac{n_1+n_2+n_3+n_4}{4m}=w
$$
按照这个思路在游戏内尝试,对于大多数人来说不满足,因为太有规律了,完全不自然

所以我们可以在计算权重之前先将要$N_1$的X轴和Z轴代入一个函数处理下,使最终的结果平滑,这里就用到一个二次函数了
$$
𝑓(𝑥)=-\frac{𝑥^2}{m}+2𝑥
$$
注意m是一个常数,为格子边长。然后再把结果代入权重计算,结果就为这样


在 Minecraft 中实现 Value Noise Terrain
http://htext.top/post/dbff3900.html
作者
Huanlan233
发布于
2022年6月11日
许可协议