dlr*_*as2 25 language-agnostic algorithm perlin-noise
我正在尝试使用Perlin噪声生成地形.我理解如何使用笛卡尔坐标生成它,但不能完全围绕它如何在球体上工作.我知道你可以将2D表面投影到球体上,但是这种扭曲不会破坏噪声分布吗?我可以想出用于在球体表面上产生均匀噪声的最佳想法是将球体上的点映射到3D笛卡尔坐标并使用3D噪声函数.(基本上,为了产生一个立方体的噪音并"刮掉"角落使它变圆,就像它一样.)有没有更好的方法我错过了?
我相信该方法实际上是使用3维噪声场(3D空间中的每个点都具有标量噪声值)而不是2维场(2D平面上的每个点都具有噪声值).
使用2D噪声函数生成高度图时,根据噪声值偏移z值.
使用3D场时,您可以对球体表面上的点进行噪声采样,然后使用噪声值将每个点径向偏离或朝向球体中心偏移.
3D噪声显得越来越难以产生,但是您不必处理围绕球体缠绕表面的复杂性,并且因为噪声功能是连续的,所以没有接缝.
这显然可以应用于任何形状.
这里真正的难题是如何改变 Perlin 噪声基函数(称为八度音程?),这些函数是使用频率和幅度定义的,以便它们位于球体上而不是 n 维平面上。
因此,我们需要在球体上定义一组基函数(给定的方向、频率和幅度)。方向是一个具有零值的点。对于球体上的任何点,您都可以测量到方向向量的角距离。您将角距离除以频率,然后计算该角度的 sin。最后,按幅度缩放。
如果您希望基函数在二维上有不同的变化,您可以做一些更有趣的事情,但是您需要第二个方向参数来确定投影的方向。您还需要计算两个角距离。不过这可能有点矫枉过正。如果你有一堆基函数,上面算法的圆形图案可能会完全相互模糊,所以我会先尝试简单的解决方案。
使用这些 Perlin 噪声基函数,您现在可以将球体上的 Perlin 噪声评估为一堆这些的总和。您是否决定细分球体并评估顶点角取决于您。这就是我要做的。