Procedural Landmass Generation开源库测评

栏目: 软件资讯 · 发布时间: 5年前

内容简介:【博物纳新】是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。更多精彩内容请关注:lab.uwa4d.com完整项目请戳:

【博物纳新】是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。

更多精彩内容请关注:lab.uwa4d.com

简介

Procedural Landmass Generation(过程式地块生成)是一个用来实现无限随机地形生成的开源项目,原作者以教程的形式由浅入深地展示了整个框架的构建。

Procedural Landmass Generation开源库测评

完整项目请戳: https://lab.uwa4d.com/lab/5b5cd12cd7f10a201fe9680d

特点

1、通过 柏林噪声 (Perlin Noise)生成地形的高度图

Procedural Landmass Generation开源库测评
  • 柏林噪声:相比于平常的黑白像素随机排布,它的灰度值拥有平滑过度。

2、由高度图产生地形 网格 (mesh)

  • 顶点生成:
 float height = heightMap [x, y]
 meshData.AddVertex (new Vector3(vertexPosition2D.x, height, vertexPosition2D.y), percent, vertexIndex);
  • 三角面生成:
 int currentIncrement = (isMainVertex && x != numVertsPerLine - 3 && y != numVertsPerLine - 3) ? skipIncrement : 1;
  int a = vertexIndicesMap [x, y];
  int b = vertexIndicesMap [x + currentIncrement, y];
  int c = vertexIndicesMap [x, y + currentIncrement];
  int d = vertexIndicesMap [x + currentIncrement, y + currentIncrement];
  meshData.AddTriangle (a, d, c);
  meshData.AddTriangle (d, a, b);

3、不同的 高度 拥有不同的 颜色纹理

Procedural Landmass Generation开源库测评
  • 可根据高度配置多种覆盖类型

4、以特定对象为 中心 生成,支持 LOD 网格切换,以及局部 碰撞 计算

Procedural Landmass Generation开源库测评
上图为LOD网格切换图示,黑色区域是密集的网格线条,可以看到由中心到外围有多层LOD
Procedural Landmass Generation开源库测评
绿色高亮区域为碰撞网格,只在中心区域进行碰撞计算

5、灵活的参数控制

  • 下文会介绍部分参数的意义与用法

6、保存已生成的地形

参数

Procedural Landmass Generation开源库测评
地形高度图的生成可以看做多个频谱图的叠加。

Amplitude幅度

Frequency频率

Octave倍频:

频率为一定倍数的频谱图,代表了细节层级的数量。

Lacunarity (>=1)间隙度:

决定倍频的倍数,控制所有频谱图的频率,对层级越高的细节影响越大,增加该值会使细节更“细”,可以形成“嶙峋”的山势。

Persistence(0-1)保持度:

控制所有频谱图的幅度,同样对层级越高的细节影响越大,增加该值会使细节对基本轮廓的影响变大。值为0时只有平滑的基本轮廓,为1时因幅值相同的频谱图叠加与抵消使得地形趋于平面。

Seed种子:

不同值有不同的随机地形。

FalloffMap

原噪声图叠加一副 辐射状灰度图 使单个地形块的四周灰度值接近为0,体现为地形块“四面环海”,如同“群岛”。

通过改变地形块相对于噪声图的大小还也可形成“孤岛”。

Procedural Landmass Generation开源库测评
Procedural Landmass Generation开源库测评

性能测评

我们以 小米5S 为例,结合使用GOT Online的Overview模式和Assets模式,测试其在 自由漫游 下的性能表现:

Procedural Landmass Generation开源库测评 多层LOD网格的测试画面

1、首先是高精度网格测试

LOD0 200码 \ LOD1 400码

Procedural Landmass Generation开源库测评
Procedural Landmass Generation开源库测评
帧数 在更新地图块时会出现 明显的波动
Procedural Landmass Generation开源库测评

查看逻辑代码耗时,不出所料主要集中在了 地形生成更新函数(TerrainGenerator.Update) 里,它是由CPU负责,用来监听和进行 地形块 的生成以及 碰撞网格 的计算。

Procedural Landmass Generation开源库测评 TerrainGenerator.Update 峰值的平均值约为 240ms

2、增加网格细节层级,降低网格精度

LOD1 100码 \ LOD2 200码 \ LOD3 300码 \ LOD4 400码

Procedural Landmass Generation开源库测评
Procedural Landmass Generation开源库测评
降低精度后帧数较之前就稳定了很多
Procedural Landmass Generation开源库测评
TerrainGenerator.Update 耗时有所缩减
Procedural Landmass Generation开源库测评

TerrainGenerator.Update峰值的平均值约为 65ms ,有了大幅降低,表现为卡顿现象明显缓解。

简言之,每次更新新的地图块时,即便是 骁龙821 ,在应对复杂的网格计算以及碰撞计算也会伴随着明显的掉帧与卡顿,因此对于 移动端 ,我们应该适当地 简化 生成的 网格 ,从而获得更好的性能表现。

接下来我们再来看一下它的 内存占用

1、高精度网格

Procedural Landmass Generation开源库测评 网格资源数量(5000帧时约为240个)
Procedural Landmass Generation开源库测评
网格内存占用(5000帧时约为130MB)

2、增加网格细节层级,降低网格精度

Procedural Landmass Generation开源库测评 网格资源数量(5000帧时约为400个)

Procedural Landmass Generation开源库测评 网格内存占用(5000帧时约为50MB)

优化网格精度后虽然网格资源 数目上升 ,但网格内存占用有了明显下降。

值得关注的是,随着 地形块 增加, 内存占用 也不断上升。因而在兼顾游戏的流畅体验和合理的内存占用之间,就必须确定一定的阈值,用来销毁过多的网格资源。

在实际应用中,开放地图的 尺度 主要取决于角色的 行动能力 ,所以在内存占用方面也要根据实际情况进行分析优化。

小结

总的来说, Procedural Landmass Generation 提供了很好的无限随机地形生成方案,性能方面也有很大的优化空间。

从适用性的角度来讲,它更适合于海岛场景,而在多山地形中水源分布没有规律,显得不够自然;对于山洞,峭壁,沟壑等特殊情况还需要对算法进行后续的改进。

今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路......

请不要吝啬您的 点赞和转发 ,让我们知道我们在做对的事。当然如果您可以留言给出宝贵的意见,我们会越做越好。


以上所述就是小编给大家介绍的《Procedural Landmass Generation开源库测评》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Approximation Algorithms

Approximation Algorithms

Vijay V. Vazirani / Springer / 2001-07-02 / USD 54.95

'This book covers the dominant theoretical approaches to the approximate solution of hard combinatorial optimization and enumeration problems. It contains elegant combinatorial theory, useful and inte......一起来看看 《Approximation Algorithms》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具