我发现即使使用四核和多肉的显卡,《我的世界》奇妙的大世界也极难导航。
我认为Minecraft的运行缓慢来自:
- Java,因为空间分区和内存管理在本机C ++中更快。
- 弱世界分区。
两种假设我都可能错了。但是,这让我开始思考管理大型体素世界的最佳方法。由于这是一个真实的3D世界,其中块可以在世界的任何部分存在,它基本上是一个大的3D阵列[x][y][z]
,其中在世界的每个块具有类型(即BlockType.Empty = 0
,BlockType.Dirt = 1
等)
我认为要使这种世界表现良好,您需要:
- 使用某种树(oct / kd / bsp)将所有多维数据集拆分出来;似乎oct / kd会是更好的选择,因为您可以仅在每个多维数据集级别而不是每个三角形级别进行分区。
- 使用某种算法来确定当前可以看到哪些块,因为距离用户最近的块可能会混淆后面的块,从而使其变得毫无意义。
- 保持块对象本身轻巧,因此可以快速将其从树中添加和删除。
我想对此没有正确的答案,但是我很想看到人们对此问题的看法。 在大型体素世界中,您将如何提高性能?