Arnis:把整个家乡搬进 Minecraft 的开源生成器,完整上手指南 📅 发布时间:2026/9/9 19:19:32 👁 浏览次数: Arnis:把整个家乡搬进 Minecraft 的开源生成器,完整上手指南【免费下载链接】arnisGenerate any location from the real world in Minecraft with a high level of detail.项目地址: https://gitcode.com/GitHub_Trending/ar/arnisArnis 是一款用 Rust 编写的开源工具,它读取 OpenStreetMap 真实地理数据和高程数据,把任意现实地点——你的家乡、某座大城市、一片自然景观——按较高保真度生成成 Minecraft 世界文件,同时支持 Java 版、基岩版和 Luanti(Minetest)。一分钟看懂:一条地理数据是怎么变成游戏世界的整条链路其实是一条单向流水线,数据只向前流动:经纬度框选区域 → 下载 OSM 与高程数据 → 投影换算成方块坐标 → 逐类生成建筑/道路/植被 → 写入对应版本的世界文件你在地图上画一个矩形,Arnis 就去 Overpass 拉取该区域的道路、建筑轮廓等信息(src/retrieve_data.rs负责网络请求),同时从高程数据源下载地形高度(src/elevation/ 下有多家 provider 可切换)。随后所有经纬度点都会被翻译成 Minecraft 的 X/Z 方块坐标——这一步可以理解为两种地图之间的翻译:地球是个球,游戏世界是个平面网格,总得有个换算器。翻译完成后,建筑、道路、树木各自走独立处理器(src/element_processing/ 下有二十多个处理文件,从buildings.rs到waterways.rs),最后由 src/world_editor/ 按你选的版本格式落盘。三个文件看懂坐标转换:经纬度如何落到方块上坐标换算是最容易出错、也最容易被忽略的一环。Arnis 把它单独放在 src/coordinate_system/ 下,内部只分两家:geographic/存经纬度相关的点与框,cartesian/存游戏内的 XZ 坐标,中间的换算全部集中在 transformation.rs。这个文件里的核心结构是CoordTransformer,它的入口函数llbbox_to_xzbbox(llbbox, scale)接收一个经纬度包围盒和一个缩放比例(1.0 表示真实大小,1 米对应 1 个方块),返回换算器和对应的 XZ 范围。对一个小城区,默认的线性插值就够了;如果想在 Minecraft 世界里拼多块生成的区域、保持全球坐标连续,可以切到web_mercator投影模式(命令行参数--projection),此时四角投影取包络,避免大范围下的拉伸误差。元素生成:每种地理要素一个处理器OSM 数据里,建筑和高速公路本质上都只是一串带标签的折线点。把它们变成能看的方块,靠的是 src/element_processing/ 里按要素类型拆分的处理器:buildings.rs把建筑轮廓挤出高度并决定屋顶样式,highways.rs按道路等级给出宽度和材质,waterways.rs、water_areas.rs负责线性水系和湖泊,还有桥梁、铁路、广告牌、游乐设施等等。这种一类一文件的拆法带来两个直接好处:新加一种要素(比如某种公共建筑)只需新增一个文件,不动别人;每类处理器互相独立,某类数据缺失时其余部分照常生成。另外它还会把共享端点的路径片段合并成闭合环(merge_way_segments),这是水系和边界能正确填充成面的前提。世界写入:同一套数据,三种格式落盘生成好的方块数据是通用的,真正因版本而异的只有存储格式,这层隔离做在 src/world_editor/:common.rs定义统一的方块修改结构,java.rs写 Anvil 区块,bedrock.rs打包成 .mcworld,luanti.rs输出 Minetest 的 map.sqlite。Java 与基岩的方块 ID 并不一一对应,src/bedrock_block_map.rs专门维护这份映射表,保证两边观感一致。写入过程按区块(section)分批推进而不是整世界一次性落盘,磁盘写满时还能通过错误链识别StorageFull并给出明确提示,而不是留下一堆损坏文件。上手实践:五步跑通第一次生成到官方 Release 页面下载对应平台的预编译包,或从源码构建:cargo run --release得到 GUI 版,加--no-default-features则进入命令行模式打开 GUI,在左侧地图上选择矩形工具,框住你想生成的区域(框选过程会实时换算出游戏内坐标范围)在右侧配置面板里选择目标世界(Java/基岩)、世界缩放比例、出生点,以及是否生成建筑内部等细节点击 Start Generation,进度条会按数据拉取、解析、生成、写入几个阶段推进完成后到输出目录(默认指向.minecraft/saves/)打开世界即可命令行用户一条命令就能复现:cargo run --release --no-default-features -- --output-dir你的世界路径 --bbox最小纬度,最小经度,最大纬度,最大经度,再配--mode选geo-terrain(建筑地形,默认)、geo-only(纯建筑平地面)或terrain-only(只要地形)。性能与兼容性:大城区为什么跑得动从源码看,几个决定速度的选择相当直接:整条管线基于 rayon 做线程池并行,按瓦片切分任务;分配器换成 mimalloc,因为按块并行处理时小块内存分配极密集,官方注释里明确提到系统分配器在这个负载下表现更差;高程网格在城市级区域能超过千万个采样点,数据因此用 f32 存储,内存直接减半,并在单轴 16384 采样点处封顶,超出部分用双线性插值补齐——地形仍然生成,只是采样略粗。随机部分由src/deterministic_rng.rs的确定性随机数接管,同样的区域、同样的参数,多次生成结果完全一致,方便定位 bug 也方便分享复现。兼容性方面,除了三端游戏格式,它还能处理月面、火星这类 NASA 高程数据集(--body参数),并在 GUI 中内置版本检查。接下来可能往哪走结合项目现状,几个比较确定的演进方向:区域拼接:Web Mercator 全局投影模式已经铺好了路,多次生成保持坐标连续、拼出超大城市是自然的下一步建筑内部:目前--interior是可选的生成项,后续在房型推断上还有明显提升空间数据源扩展:OSM 覆盖稀疏的地区,项目已默认接入 Overture Maps 补充建筑轮廓,类似多源互补的思路会更容易复制到其他要素树与植被:仓库自带了数万个按区域分类的树木 schematic 资源包,植被保真度大概率会持续加码对想动手的人,源码注释密度较高,README 里的贡献指南也强调模块化与性能两条主线,顺着element_processing加一个新要素处理器,是门槛最低的上手切入点。【免费下载链接】arnisGenerate any location from the real world in Minecraft with a high level of detail.项目地址: https://gitcode.com/GitHub_Trending/ar/arnis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考