将 Voronoi 图与 Perlin 噪声相结合以生成纹理的 "correct" 方法是什么?

What is the "correct" way of combining Voronoi Diagrams with Perlin Noise for Texture Generation?

我正在做一个围绕程序地形生成的项目。我目前有 2 个独立的部分,一个生成我的 Voronoi 图,而另一个处理整个地形的生成。地形目前以块的形式生成,因为它太大而无法自行生成。由我的 Voronoi 算法生成的多边形大小接近于一个单一的地形块。我希望为每个多边形生成一个单独的块,因为我希望 Perlin 噪声值由生成的多边形确定。在目前的实施中,我的地形块是正方形的,因此我不能真正插入多边形。你会怎么做?

我最初试图将我的纹理变成多边形形状,但统一的纹理具有宽度和高度,呃,所以这并没有完全解决。我还考虑将每个 Terrain 块分成一组具有相同属性的多边形,这些多边形将形成正方形,这破坏了使用 Voronoi 的整个目的。

我很乐意包含我的代码,但我不认为它在这种情况下特别有价值。

注意:我的 Voronoi 实现 returns 具有相应角点、边、质心等的多边形对象列表

提前致谢:)

为什么要将地形图块设为多边形? 如果我理解正确的话,您不希望您的地形图块是正方形,而是使用 voronoi 算法生成的多边形。 实际上没有人这样做。地形块始终是根据虚拟网格和玩家位置创建和删除的正方形。

大多数时候,当我在地形生成中看到 Voronoi 算法时,它们会在 运行 时应用于纹理。然后可以将其他类型的噪声 added/multiplied/etc 添加到该纹理,从而为您的程序地形创建高度图。

如果您已经使用 Voronoi 算法生成几何图形,一种选择是为您的地形制作一个着色器,在世界 space 坐标中对 Perlin 噪声进行采样(这样您就不会 运行多边形网格上的任何平铺问题)。如果要将噪声用作高度图,则细分可以提高网格分辨率。但是,如果您以前没有使用过着色器,那么使用纹理方法可能会更快地看到结果。如果您在 C# 中处理另一半,则在着色器中处理一半的地形噪声没有多大意义。

由于这个主题可能涉及面很广,我强烈推荐 Sebastian Lague 关于地形生成的视频。 https://www.youtube.com/watch?v=wbpMiKiSKm8&list=PLFt_AvWsXl0eBW2EiBtl_sxmDtSgZBxB3