perlin噪声_Perlin噪声与Simplex噪声笔记

本文介绍了Perlin噪声和Simplex噪声的概念和原理。Perlin噪声基于梯度噪声,而Simplex噪声是对Perlin噪声的优化,具有更低的计算复杂度O(n^2)。在高维场景下,Simplex噪声表现出更好的性能,并且没有明显的方向性,适合用于纹理生成、模拟等领域。
摘要由CSDN通过智能技术生成

8aa547557bd8362ccb9186d8cb6c323a.png

首先这两种噪声都是基于晶格的方法(Lattice based),Simplex噪声是对Perlin噪声的一种改进,基本思想是一样的。

Perlin噪声

Perlin噪声属于梯度噪声,其原理是简单来说就是将坐标系划分成一块一块的晶格,之后在晶格的顶点处生成一个随机的梯度,通过与晶格顶点到晶格内点的向量进行点乘加权计算后得到噪声。

4694b339e98548c71c3542977106a89c.png
图1 二维Perlin噪声示意图

具体的三个步骤:

  1. 定义晶格结构,例如在shader中通过float2 p = i.uv * n可以得到 n x n 的结构,图2展示的是二位的晶格结构,三维的话则是立方体网格。得到晶格后通过floor操作获取晶格id,之后便可得到晶格四个顶点的信息,通过伪随机设定每个顶点的梯度向量(其实就是一个随机的二维向量),梯度向量的值需要最终需要处[-1, 1]之间。

cacbdf766627a1956676d339b7523f51.png
图2 10 x 10 结构

2. 在fs中通过插值后的的uv信息获取当前p点,通过frac操作获取相对于晶格id的偏移值。之后计算其所在晶格的顶点到p点的距离向量。之后分别与晶格顶点的梯度向量点乘

3. 通过插值计算权重。其中插值使用的缓和曲线(ease curves)有两种:最初的Perlin噪声中使用的是:

5bc0140bbc9334bc614b3680dac948bd.png
图3 原缓和曲线

之后提出了新的缓和曲线:

cb14158cf51852714a0c6e0023b2623a.png
图4 二阶导为0的缓和曲线

相比于原来的曲线,新的缓和曲线二阶导和一阶导在0与1处都为0,得到的噪声在晶格相互交界处更加平滑。

代码:

            float2 perlin_random(float2 p)
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值