首页 > 编程知识 正文

开源掌机rg350测评,心理测评系统开源

时间:2023-05-06 17:32:23 阅读:276191 作者:4477

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

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

简介

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

 

开源库链接:https://lab.uwa4d.com/lab/5b5cd12cd7f10a201fe9680d

特点

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

 

柏林噪声:相比于平常的黑白像素随机排布,它的灰度值拥有平滑过度。

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、不同的高度拥有不同的颜色纹理

 

可根据高度配置多种覆盖类型

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


上图为LOD网格切换图示,黑色区域是密集的网格线条,可以看到由中心到外围有多层LOD


绿色高亮区域为碰撞网格,只在中心区域进行碰撞计算

 

5、灵活的参数控制

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

6、保存已生成的地形

参数

 

地形高度图的生成可以看做多个频谱图的叠加。

Amplitude 幅度
Frequency 频率
Octave 倍频:
频率为一定倍数的频谱图,代表了细节层级的数量。
Lacunarity (>=1) 间隙度:
决定倍频的倍数,控制所有频谱图的频率,对层级越高的细节影响越大,增加该值会使细节更“细”,可以形成“嶙峋”的山势。
Persistence(0-1) 保持度:
控制所有频谱图的幅度,同样对层级越高的细节影响越大,增加该值会使细节对基本轮廓的影响变大。值为0时只有平滑的基本轮廓,为1时因幅值相同的频谱图叠加与抵消使得地形趋于平面。
Seed 种子:
不同值有不同的随机地形。

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

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

 

 

性能测评

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

多层LOD网格的测试画面


1、首先是高精度网格测试
LOD0 200码 LOD1 400码

 

帧数在更新地图块时会出现 明显的波动
​​​​

 


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

TerrainGenerator.Update峰值的平均值约为 240ms

 

2、增加网格细节层级,降低网格精度
LOD1 100码 LOD2 200码 LOD3 300码 LOD4 400码

 

降低精度后帧数较之前就稳定了很多

 

TerrainGenerator.Update耗时有所缩减

 

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


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

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

1、高精度网格

网格资源数量(5000帧时约为240个)

 

网格内存占用(5000帧时约为130MB)

 

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

网格资源数量(5000帧时约为400个)

 

网格内存占用(5000帧时约为50MB)


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

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

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

小结

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

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

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

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

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。