这篇文章主要是写了以下几方面
1,原始的perlin噪声函数是什么
2,原始噪声函数的缺陷是什么?
3,如何改进噪声函数?
4,shader中如何实现。
一,原始的Perlin噪声函数
分为几个步骤
1,在球体上设置散列得到的256个伪随机斜率。

2,对于整数的空间坐标(i,j,k)的噪声函数设置为0,即Noise(i,j,k)=0;(i,j,k为整数)
3,将指定的要计算的空间坐标(x,y,z)分解为整数和小数部分,即,x=i+u;y=j+v;z=k+w(其中,i,j,k为整数,u,v,w是小数部分),比如,(1.1,2.2,3.5)=(1+0.1,2+0.2,3+0.5)。
4,围绕坐标(x,y,z)的整数部分(i,j,k),设置周围的8个整数部分加1的点,形成单位正方体,即(i,j,k),(i+1,j,k),(i+1,j+1,k),(i,j+1,k),(i,j,k+1),(i+1,j,k+1),(i+1,j+1,k+1),(i,j+1,k+1),这样,坐标(x,y,z)就落在了单位正方体内部。
还以(1.1,2.2,3.5)为例,周围的8个坐标就是(1,2,3),(2,2,3),(2,3,3),(1,3,3),(1,2,4),(2,2,4),(2,3,4),(1,3,4)
5,对单位正方体的8个顶点,使用Hermite三次混合函数3t2-2t3,制作一个查询表。
6,使用(x,y,z)的小数部分(u,v,w)在查询表内插值,即可得到Noise(x,y,z)

二,原始算法的缺陷
1,伪随机斜率在球面分布不规则,相邻斜率可能离得很近,这样会导致高频结果,使噪声函数出现污点。
2,插值函数是3t2-2t3,二次求导结果是6-1

最低0.47元/天 解锁文章
588

被折叠的 条评论
为什么被折叠?



