创造巨大的低聚地形

问题描述 投票:2回答:2

我正在使用GLFW和GLEW在C ++中开始一个新项目。

计划是有一个相当大的低聚地形。它不会随机生成,我打算在Blender中制作它。

我的问题是,我不能在Blender中创建一个巨大的Low Poly地形,因为程序变得非常慢,具有地形所具有的顶点数量。我创建了一个500米x 500米的地形,并将其细分为1000.这给了我很多顶点,使程序无法使用。

创造巨大地形的最佳方法是什么?我不知道如何创建地形块,因为我必须对它们进行建模。

  • 如何创建一个大的Low Poly地形,而没有程序运行缓慢的问题?

我的另一个担忧显然是将世界加载到我的自定义游戏引擎中。我认为像这样的大世界在加载时会遇到很大的问题。

c++ blender terrain vertices
2个回答
3
投票

Unity,虚幻引擎和CryEngine等游戏引擎中的地形与平均静态或骨架网格物体的处理方式不同。通常在运行时创建不同级别的细节,而不是预先创建其LOD的普通网格。从像Blender或3DS Max这样的3D程序加载网格作为整个地形是不可行的。

rastertek的Direct3D教程非常适合学习,但显然不是OpenGL。这是在Java OpenGL中创建基本地形的基本教程(这不会进入我不认为的LOD处理)。

Java OpenGL terrain

最常见的我认为我已经看到了一个四叉树系统,你有地形补丁,每个补丁被细分为四个其他补丁,具体取决于条件(是否与摄像机的距离或屏幕空间大小)。

这就是标准四树LOD系统的样子,特别是对于Kerbal Space Program游戏。

enter image description here

在此过程中,您需要弄清楚如何解决一些问题,例如如何摆脱具有不同LOD水平的两个地形斑块之间的裂缝和间隙。 Kerbal空间程序通过不同地处理边缘顶点以排队,并且不允许任何两个相邻地形补丁超过一个LOD级别的差异来解决这个问题。

我尝试的一种方法是为每个顶点上传两个顶点位置,当前LOD位置和LOD顶点从一个级别向下的位置,并根据摄像机距离在两者之间进行线性插值。但我很确定有比这更优雅的方式。

我刚刚发布了一段视频来讨论这个东西,它显示了基本的四叉树模式,裂缝问题,然后是顶点插值方法。有些人在CPU上创建补丁,在GPU上创建其他补丁,并使用变换反馈回读任何必要的信息(例如物理学)。有很多方法可以做,我希望能回到它。

TerrainPatches


3
投票

多年前我做了类似的事情,发现本教程非常有用:

http://www.rastertek.com/tertut05.html

它描述了创建一个四叉树,其中包含分区为AABB的地形网格中的特定三角形,使用视锥体剔除可以在运行时剔除地形的大部分区域,并且应用程序的性能应该得到改善。只要您有信心导入从混合器导出的网格物体(它们是否在.obj中?),您就可以使用本教程中概述的策略轻松地对不同的三角形进行分区。

进一步的优化可能是根据与摄像机的距离为四叉树中的节点提供各种LOD,即,如果节点距摄像机的设定距离,则通过跳过某些顶点使较小的三角形“折叠”来渲染较低的多边形网格变成更大的。我建议生成特定的索引列表来执行此操作并使用相同的顶点数据,而不是使用单独的预生成的网格块来节省内存。

© www.soinside.com 2019 - 2024. All rights reserved.