我正在为类似MineCraft的世界开发地形生成算法.目前,我正在使用基于"Simplex Noise Demystified"[PDF]文章中的实现的单纯形噪声,因为单纯形噪声应该比Perlin噪声更快并且具有更少的伪像.这看起来相当不错(见图),但到目前为止它也很慢.

运行噪声功能10次(我需要不同波长的噪声,如地形高度,温度,树位置等),每个块中的块(16x16x128块)有3个八度的噪声,或大约100万次调用噪声功能总共需要700-800毫秒.尽管算法中没有明显昂贵的操作(至少对我而言),但这对于以任何体面的速度生成地形的目的而言至少是一个数量级太慢.只是楼层,模数,一些数组查找和基本算术.下面列出了算法(用Haskell编写).SCC评论用于分析.我省略了2D噪声函数,因为它们的工作方式相同.
g3 :: (Floating a, RealFrac a) => a
g3 = 1/6
{-# INLINE int #-}
int :: (Integral a, Num b) => a -> b
int = fromIntegral
grad3 :: (Floating a, RealFrac a) => V.Vector (a,a,a)
grad3 = V.fromList $ [(1,1,0),(-1, 1,0),(1,-1, 0),(-1,-1, 0),
(1,0,1),(-1, 0,1),(1, 0,-1),(-1, 0,-1),
(0,1,1),( 0,-1,1),(0, 1,-1),( 0,-1,-1)]
{-# INLINE dot3 #-}
dot3 :: Num a => (a, a, a) -> a -> a -> a -> …Run Code Online (Sandbox Code Playgroud) floating-point polymorphism performance haskell procedural-generation