我经常使用2D Perlin噪波纹理在顶点着色器(例如地形,海洋)中置换网格。但是,每次我用Google搜索位移后法线的方法时,都会有细微的差别。例如,要放置在Y分量中的值取决于源。在此示例中,它们在归一化之前将Y分量放置为“ 1”:

实时参数化浅波仿真|英特尔®软件

在这些代码中,选择了值“ 2”:

地形,法线和高度图| dian-xiang.com/blog

有什么用?是否有确定的来源可以根据高度图计算法线?

这可能与非预期的鼠标单击有关吗?正如mrdoob在这里提到的那样,总是会在Z组件中抛出'0.5'一直困扰着我:

Three.js投影仪和Ray对象|堆栈溢出

或像Anton一样在Z组件中使用'1':

通过射线投射进行鼠标拾取| Anton的OpenGL 4注意事项

从高度图计算法线和未投影的鼠标单击之间是否存在联系? 。在了解高度图之前,我曾读过有关从隐式表面获取法线的信息,如以下链接所示:

分形,计算机图形学,数学,演示和更多内容| Inigo Quilez博客

似乎epsilon编号只是由人组成的。在我的项目中,我通常只是捏造价值,直到看起来不错为止。是否有确定的来源,或者至少有很好的经验法则?

评论

除以2是因为您要获取相邻顶点的高度,该高度恰好相隔2个单位(请参见第二个链接中的图,其中标注了进/出和左/右邻居顶点)。用X / Z归一化高度(Y)。

#1 楼

选择Epsilon以达到适当的奈奎斯特频率,避免混叠。它指的是高度场功能中的最高频率。您需要对函数的定义有充分的了解才能找到它。例如,该图显示了近似珀林噪声的迭代布朗运动(IBM)。每个附加噪声函数的频率由给出。因此,Epsilon将是最后添加的频率:。这意味着为每个噪声预定义了Epsilon。



Hugo Elias的IBM近似于Perlin Noise。


与非预期的鼠标点击有关?正如mrdoob在这里提到的那样,您总是会在Z分量上抛出'0.5'一直困扰着我。鼠标是在标准化设备坐标(NDC)中定义的,这意味着窗口中的单击在每个方向上的范围从-1到1。由于屏幕仅是二维的,因此未给出Z分量,这意味着我们必须在-1到1之间选择一个值。-1表示近平面,而1表示远平面。

有关该主题的更多信息,请访问:
https://www.youtube.com/watch?v=DLKN0jExRIM&t=371s