做外贸有必要做个网站吗,申请163 com免费邮箱,多语言企业网站,wordpress如何放pdfPerlin 噪声
KenPerlin(1985a,2002)KenPerlin(1985a,2002) 定义的噪声函数是最常用的噪声函数#xff0c;称为 Perlin 噪声。PerlinPerlin 噪声在全部 (x,y,z)(x,y,z) 整形顶点处的参数值都为 00#xff0c;变化源自各顶点间的梯度向量#xff0c;然后再进行平滑插值。 计算…Perlin 噪声
KenPerlin(1985a,2002)KenPerlin(1985a,2002) 定义的噪声函数是最常用的噪声函数称为 Perlin 噪声。PerlinPerlin 噪声在全部 (x,y,z)(x,y,z) 整形顶点处的参数值都为 00变化源自各顶点间的梯度向量然后再进行平滑插值。 计算四个顶点的导数再进行平滑的表面插值
perlin噪声应当满足的性质 1. 旋转统计不变性。不管我们怎么旋转它的域它都有同样的统计特性 2. 频率带通有一定界限。它没有明显的大或者小的特征而是在一定范围内 3. 平移统计不变性。不管我们如何平移它的域它都有同样的统计特性
计算方法 1.预处理考虑x,y,z空间中所有点的集合坐标为整数我们称这个集合为整数格。现在我们为整数格的每个点附一个(x,y,z)上的伪随机梯度值也就是一个向量并且要将其 处理成单位向量。 2.如果(x,y,z)处在整数格上那么此处的噪声就是d。 3.如果(x,y,z)不在整数格上我们计算光滑插值系数。 具体的插值方法如下以二维为例我们要找到这个点周围的四个整数点然后我们得到四个值横坐标为bx0 ~ bx1,纵坐标为by0 ~ by1。点到bx0在x轴上的距离为rx0到by0在y轴上的距离为ry0。perlin给出了一个缓和曲线使得线性插值连贯。能使得一阶导数连续的缓和曲线函数 最初的版本 s_curve(t) ( t * t * (3. - 2. * t) )之后分别将rx0和ry0传入缓和曲线得到一个新的值sx和sy。 接下来做一个双线性插值sx和sy就是第一步线性插值的系数但是计算得到系数之后我们还需要插值的起点和终点。他们的计算方法如下 求(rx0,ry0)与左上角点的梯度b00的点乘得到起点u求(rx0 1,ry0与右上角点的梯度b10的点乘得到终点v以uv为两端sx为插值系数做线性插值得到a 求(rx0,ry0 1)与左下角点的梯度b01的点乘得到起点u求(rx0 1,ry0 1与右下角点的梯度b11的点乘得到终点v以uv为两端sx为插值系数做线性插值得到b 最终对a和b进行线性插值插值系数为sy得到最终的结果。以上算法步骤中先对x轴还是先对y轴插值其实是无所谓的。最终得到的柏林噪声分布在 -1 ~ 1之间我们可以把它映射到我们需要的颜色区别比如0 ~ 255 或 0 ~ 1得到对应的颜色。
二维拓展到三维柏林噪声的生成方法伪代码可以概括如下 Float Noise(Float x, Float y, Float z) { 计算八个顶点整数坐标以及偏移量 计算梯度权值 权重进行三线性插值 }
GEM这篇文章提到的改进点概括起来是两点
1.更换曲线函数为二次偏导连续的s_curve(t) ( t * t * t * (6 * t * t - 15 * t 10) )从而解决使用噪声的导数时出现失真的视觉效果例如制作凹凸贴图时。
2.将256大小的伪随机查找表改成大小为12值为立方体12条边中点。从而解决噪声函数的结果中产生不希望的高频