Understanding Procedural Generation
什么是网格
网格由瓦片对象组成,每个瓦片对象代表生成的地形的一部分。
通过降低瓦片大小,程序生成世界的分辨率或质量将提高,但启动时的加载时间也会增加。
什么是地图函数:
###形式
###输入
* _n_: 要转换的值
* _min₁_: 第一个范围的最小值
* _max₁_: 第一个范围的最大值
* _min₂_: 第二个范围的最小值
* _max₂_: 第二个范围的最大值
###输出
将 n 转换为第二个范围
###描述
虽然不是噪声扩展的一部分,但 map 函数非常重要。它可以轻松地在不同范围的数字之间进行转换。例如,噪声函数返回一个值在-1和1之间,但您希望噪声值表示介于0和255之间的对象的不透明度。不必进行数学计算来确定如何将-1-1转换为0-255,map 函数将为您处理。
无论 n 在哪个范围上测量,都成为第一个范围,并且您希望它测量的范围成为第二个范围。因此,min1 变为-1,因为它是第一个范围的最小值,max1 变为1,因为它是第一个范围的最大值。相同的逻辑适用于第二个范围,min2 变为0,max2 变为255。
因此,如果噪声函数返回0,则 map 函数将其转换为127.5。如果噪声函数返回0.1,则 map 函数将其转换为25.5。
什么是噪声
噪声和随机函数有很多共同点,因此理解噪声的最简单方法是查看两者之间的区别。
左侧的图表显示将随机数放置在-1和1之间。右侧是使用噪声生成值的图表。请注意噪声值如何平滑地从高点变为低点,不像随机函数,其中一个值可能很高,下一个值可能非常低,导致非常不均匀的过渡。这是噪声函数的好处:它们可以创建随机但看起来一致的结果。
###Perlin噪声和simplex噪声有什么区别
Perlin噪声是由Ken Perlin在1983年发明的,当时他在电影《Tron》上工作,以创建更具逼真纹理。他后来因在该电影上的工作而获得奥斯卡奖。Perlin创建了一个简单的算法,可以相对快速地创建看起来自然的纹理。值得注意的是,Perlin从未对他的算法进行专利申请,这意味着任何人都可以在没有侵犯版权风险的情况下使用他的算法。
simplex噪声也是由Ken Perlin在2001年发明的。他制作了这个新的噪声算法来解决Perlin噪声的一些问题,如伪影和速度慢。然而,Ken Perlin对他的新创作进行了专利申请,这意味着其他人不能在没有许可的情况下合法使用simplex噪声。这导致开源社区创建了开源simplex噪声。这是一个可自由使用的simplex噪声版本,用于噪声扩展。
在Perlin和simplex之间进行选择时,建议使用simplex噪声,因为它更快,更高效,并且会产生更好的效果。
###2D噪声和3D噪声有何不同
噪声函数有两种变体,2维和3维。
在2D噪声函数中,两个维度是x维和y维。在俯视或侧视游戏中使用此函数。这是大多数情况下使用的变体,建议新手使用。
在3D噪声函数中,有x、y和z三个维度。虽然在GDevelop 2D游戏引擎中使用3D噪声函数似乎有点奇怪。但是,在GDevelop中模拟3D时,此函数可能会很有用。此外,第三维度还可以用来代表时间,而不是z。不建议新手使用此变体。
####1D噪声
要实现1D噪声,只需使用2D噪声函数,并将其中一个维度设置为常量值。例如noise::simplex2(Variable(x), 0.5),因为y参数从不改变,只有x改变,噪声函数现在将返回一个一维结果。