C/C++编程笔记:游戏开发中的噪声算法详解,游戏编程常用技术( 九 )

2.输入一个点(二维的话就是二维坐标 , 三维就是三维坐标 , n维的就是n个坐标) , 我们找到和它相邻的那些晶格顶点(二维下有4个 , 三维下有8个 , n维下有2n个) , 得到这些顶点的伪随机值 。

3.使用缓和曲线(ease curves)来计算这些伪随机值的权重和 。 在原始的Perlin噪声实现所使用的缓和曲线是s(t)=3t^2?2t^3 , 在2002年的论文中 , Perlin又改进为s(t)=6t^5?15t^4+10t^3 。

若直接使用线性插值 , 其一阶导在晶格顶点处(即t = 0或t = 1)不为0 , 会造成明显的不连续性 。 s(t)=3t^2?2t^3

在一阶导满足连续性 , s(t)=6t^5?15t^4+10t^3在二阶导上仍然满足连续性 。

所以实际上两种缓和曲线都是可用的 , 如果需要压榨开销 , 则使用s(t)=3t^2?2t^3 。

对于预计算 , 例如程序化生成凹凸纹理(置换纹理) , 使用s(t)=6t5?15t^4+10t^3的效果更好 。

推荐阅读