RTTNW-ch4:Perlin Noise

柏林噪声由Ken Perlin发明,很多人使用柏林噪音来获得一个比较酷的纹理效果。

Perlin纹理不会像这样返回白噪声:

相反,它返回类似于模糊白噪声的东西:

除了简单迅速以外,柏林噪声的另一个关键特性是它对于相同的输入永远返回相同的随机数字,输入点附近的点返回近似的数字。

生成噪声纹理:

使用两个sphere表现噪声纹理:

效果如下:

为了使其平滑,我们可以线性插值:

效果如下:

使用hermite立方体来舍入插值,使图像更平滑:

效果如下:

缩放输入点使其变化更快:

效果如下:

仍然能看到网格,可能是因为该模式的最小值和最大值总是完全落在整数x / y / z上。 肯佩林非常聪明的把戏是在格点上放置随机单位矢量(而不是浮点数),并使用点积来移动格子上的最小和最大值。 所以,首先我们需要将随机浮点数更改为随机向量:

效果如下:

通常使用具有多个相加频率的复合噪声。 这通常称为混乱,并且是重复调用的噪音总和:

这里fabs()是math.h绝对值函数。

效果如下:

做一个类似大理石纹理的效果:

效果如下:

 

参考书籍:《Ray Tracing The Next Week》

RTTNW系列项目地址:GitHub