Skip to content

wys-ssm/Optimization-Based-on-3D

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

Optimization-Based-on-3D

基于三维点阵模型的邻块数据优化

摘要

在 Minecraft 等基于体素(Voxel)的游戏或三维建模应用中,数据存储和指令优化更能提速。本文提出了一种基于三维点阵模型的邻块数据优化方法,以减少 setblock 指令的数量,并使用 fill 指令批量替代连续的块数据。利用广度优先搜索(BFS)算法进行区域合并,同时优化 fill 指令的拆分和扩张策略。实验结果表明,该方法能有效减少命令总量,提高 Minecraft 地图数据的加载效率。

  1. 引言

在 Minecraft 地图导入过程中,大量 setblock 指令的执行会导致严重的性能瓶颈。为了解决这一问题,我们提出一种基于三维点阵模型的邻块数据优化算法,该算法通过扫描并合并相邻的相同块,将其转换为 fill 指令,从而减少指令数量,提高导入效率。

  1. 相关工作

在 Minecraft 地图优化领域,常见的方法包括:

逐块导入:每个方块使用 setblock 命令单独放置,虽然灵活但效率低。

区域填充:利用 fill 命令批量放置连续的相同方块,减少命令数量。

数据压缩:使用结构化数据格式(如 .schematic 或 .mcstructure)存储方块信息。

然而,现有的 fill 指令优化方法通常依赖简单的线性扫描,未充分利用空间搜索算法进行最大区域合并。

  1. 方法

3.1 数据结构

使用三维点阵模型(3D Grid Model)存储所有方块数据,其中:

blocks[(x, y, z)] = (block_name, state_string) 记录每个方块的类型及其状态。

3.2 邻块合并策略

3.2.1 最大填充区域搜索(BFS)

使用广度优先搜索(BFS)找到最大的连续相同方块区域,定义如下算法:略

3.2.2 fill 指令拆分策略

Minecraft 的 fill 指令最多支持 32367 个方块,因此需要进行拆分。采用 非递归分块策略,确保每个 fill 指令块数不超过限制:略

  1. 实验与结果

我们使用 148574 个 setblock 命令的随机建筑作为输入数据,并在优化后分析命令总数的变化。

方法

------------------setblock 命令数--------fill 命令数--------运行时间---------------------------------------

原始 setblock--------148574--------0--------1.5s

线性扫描 fill--------58352--------23671--------1.2s

BFS+优化填充--------24824--------8879--------0.8s

结果表明,优化后的算法能有效减少命令数,提高运行效率,但在针对十亿量级及以上数据处理时,所需要的时间过于长久,并且此时扩展策略并不是我们的最优选。

  1. 后记

本文提出了一种基于三维点阵模型的邻块数据优化方法,结合 BFS 搜索和 fill 指令拆分策略,在减少 setblock 指令数量的同时,保证了数据的完整性。未来的研究可考虑:

进一步优化合并算法,提高 fill 指令的覆盖范围。

哈希字典插入,结合 NBT 数据格式,实现更高效的数据存储和转换。

在 Minecraft 服务器环境中测试优化效果,验证实际性能提升。

※参考文献

Mojang Studios. Minecraft Wiki - Commands. https://minecraft.wiki

Minecraft Structure Formats and Optimization Techniques. https://mcdevs.org

陈志豪,张伟伟,基于体素数据的三维建模优化方法,《计算机工程》,2023年。


About

基于三维点阵模型和BFS的邻块数据优化

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages