c# - 将 Voronoi 图与 Perlin 噪声相结合以生成纹理的“正确”方法是什么?
问题描述
我正在开展一个围绕程序地形生成的项目。我目前有 2 个单独的部分,一个生成我的 Voronoi 图,而另一个处理整个地形的生成。地形目前以块的形式生成,因为它太大而无法自行生成。由我的 Voronoi 算法生成的多边形的大小接近单一地形块。我希望为每个多边形生成一个单独的块,因为我希望确定生成的多边形的 Perlin Noise 值。在当前的实施中,我的地形块有一个正方形的形式,因此我不能真正插入一个多边形。你会怎么做?
我最初试图将我的纹理变成多边形形状,但是统一的纹理具有宽度和高度,呃,所以这并没有完全解决。我还考虑将每个地形块分成一组具有相同属性的多边形,从而形成正方形,这破坏了使用 Voronoi 的全部目的。
我很乐意包含我的代码,但我认为在这种情况下它不是特别有价值。
注意:我的 Voronoi 实现返回一个多边形对象列表,其中包含相应的角点、边缘、质心等。
提前致谢 :)
解决方案
大多数时候,当我在地形生成中看到 Voronoi 算法时,它们会在运行时应用于纹理。然后可以将其他类型的噪声添加/相乘/等到该纹理中,为您的程序地形创建高度图。
如果您的 Voronoi 算法已经生成几何图形,则一种选择是为您的地形制作一个着色器,该着色器在世界空间坐标中对 Perlin 噪声进行采样(这样您就不会在多边形网格上遇到任何平铺问题)。如果要将噪声用作高度图,则细分可以提高网格分辨率。但是,如果您之前没有使用过着色器,则使用纹理方法可能会更快地看到结果。如果你在 C# 中做另一半,那么在着色器中做一半的地形噪声也没有多大意义。
由于这个主题可能非常广泛,我强烈推荐 Sebastian Lague 的关于地形生成的视频。https://www.youtube.com/watch?v=wbpMiKiSKm8&list=PLFt_AvWsXl0eBW2EiBtl_sxmDtSgZBxB3
推荐阅读
- python - python regex:文本文件中的匹配模式并将名称分配给每个匹配实例
- matlab - 在Matlab中用x和x'(离散化)计算积分?
- data-cleaning - OpenRefine - 将多个列值合并到新列中应该(?)工作
- jquery - 如何将 Angular 组件附加到 JqGrid 的单元格?
- nestjs - 在保存到嵌套数据库之前执行角色层次结构验证
- css - 使用 animate.css 库进行 nuxt 页面转换
- angular - 在 Ion-List 上显示数据
- reactjs - 下拉菜单中未触发单击事件
- javascript - 正则表达式检查字符串中的 3 个相同字母?
- visual-studio - 在 Visual Studio for Azure Analysis Services 模型中看不到表更新