首页 > 解决方案 > 将 Voronoi 图与 Perlin 噪声相结合以生成纹理的“正确”方法是什么?

问题描述

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

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

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

注意:我的 Voronoi 实现返回一个多边形对象列表,其中包含相应的角点、边缘、质心等。

提前致谢 :)

标签: c#unity3dterrainprocedural-generationunity3d-terrain

解决方案


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

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

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


推荐阅读