寻求梯度范数恒为1的连续2D噪声实现方案
梯度范数恒为1的2D连续噪声需求
核心要求
- 2D噪声函数,梯度范数始终为1(等价于等值线间距完全一致)
- 梯度需连续,若能实现二阶导数连续更佳
- 最终目标是实现为片段着色器中的函数,仅提供数学原理也可
问题背景
- 经典gradient noise的缺陷:等值线密度不均(因斜率不恒定),附带的基础光照也会因斜率变化出现差异
- 梯度归一化后修改光照的方案:仅优化了光照效果,并未改变噪声本身的等值线分布,不符合需求
现有探索思路
思路1:从梯度场入手构造
要生成可积分出连续噪声函数的梯度场,必须满足三个关键条件:
- 旋度为0:确保梯度场是某个标量函数的导数(即存在对应的噪声函数)
- 用三角函数形式定义梯度:$\nabla f = (\cos a(x,y), \sin a(x,y))$,结合旋度条件可推导得:$\cos a \cdot \frac{\partial a}{\partial x} = -\sin a \cdot \frac{\partial a}{\partial y}$
- 梯度范数恒为1:三角函数定义天然满足$\cos^2a + \sin^2a = 1$,同时需保证梯度自身与导数的点积为0,以此维持范数恒定
- 网格节点间积分结果为0:对应gradient noise中所有网格节点的噪声值为0,这部分尚未深入研究
思路2:直接构造噪声函数
可轻松满足网格节点值为0的要求,但核心难点仍在于如何保证梯度范数始终为1
内容的提问来源于stack exchange,提问作者Cadeyrn
相关产品推荐
相关产品推荐

