Arnis完整指南:把真实城市1:1搬进Minecraft,从框选区域到可玩世界
【免费下载链接】arnisGenerate any location from the real world in Minecraft with a high level of detail.项目地址: https://gitcode.com/GitHub_Trending/ar/arnis
Arnis 是一个用 Rust 编写的开源工具(Apache-2.0 协议),它读取 OpenStreetMap 的街景级地理数据与真实高程数据,把任意一片现实区域生成为可直接进游戏的 Minecraft 世界,同时支持 Java 版(1.17+)、基岩版和 Luanti(Minetest)三种格式,面向想重建家乡、做地理教学或进行游戏内容创作的初学者与创作者。
场景:当"想带朋友看家乡"变成几千个方块的体力活
假设你要把学校门口那条街搬进游戏。手工模式意味着:查地图确认路宽、数格子摆方块、一栋楼一栋楼地捏外观,一条几百米的街道就要耗掉整个周末,而水面、坡度、树木这些"背景"基本只能放弃。
Arnis 的做法相反:你只需要在地图上框一个矩形,工具自动去 OpenStreetMap 拉取道路、建筑、水体、植被的矢量数据,从高程数据源(如 Matterhorn、USGS 3DEP)下载真实地形,然后按比例把这些要素逐个"落地"为方块——道路有真实宽度,建筑有楼层和朝向,山坡按真实海拔起伏。
它的定位不是"地图插件",而是一个独立运行的生成器:GUI 版本适合普通用户点点鼠标,命令行版本适合批量和自动化,产物就是一个标准世界存档,双击即可进游戏。
能力总览:输入一块区域,输出一个世界
| 项目 | 内容 |
|---|---|
| 数据来源 | OpenStreetMap(道路/建筑/水体/地标)、Overture Maps(补充建筑轮廓)、多源高程数据 |
| 生成对象 | 地形起伏、道路、桥梁、建筑(可选室内结构)、树木、水体、招牌与地面贴纸 |
| 输出格式 | Java 版世界目录、基岩版 .mcworld 文件、Luanti 的 map.sqlite |
| 使用方式 | Tauri 图形界面 / 命令行参数 / Nix 一键运行 |
| 可选天体 | 地球之外还支持月球、火星的纯地形生成(NASA PDS 数据) |
几个值得注意的细节:树木不是随机撒的,仓库内置了 assets/tree-packs/ 目录,按九个植被区(欧洲、东亚、澳洲等)提供数百棵真实树种的方块模型,选到哪里就长哪里的树;招牌系统(src/decals/)能把路名、公交站、广告牌渲染成游戏内可读的贴图。
上手路径:环境准备 → 执行生成 → 验证产出
环境准备
不需要自己写代码。普通用户从官方渠道下载对应系统的预编译版本即可;想用源码或想改参数逻辑的读者,装好 Rust 工具链后克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ar/arnis
源码构建有两条路径:带 GUI 的完整构建,或去掉 GUI 依赖的纯命令行构建(cargo run --release --no-default-features)。用 Nix 的话一条nix run命令也能直接跑,仓库根目录的 flake.nix 已配好。
执行生成
打开 GUI 后,左侧是一张可缩放的在线地图:用矩形工具拖框选出目标区域,框选时界面会实时显示经纬度边界。区域确定后,右侧面板配置世界比例、生成模式(对象+地形 / 仅对象 / 仅地形)、出生点等选项,点击 Start Generation 开始。
命令行等价操作只需要两个参数:输出目录和包围盒(格式为 最小纬度,最小经度,最大纬度,最大经度),例如cargo run --release --no-default-features -- --output-dir="~/saves/mytown" --bbox="48.13,11.55,48.15,11.58"。参数定义在 src/args.rs,所有可选项及默认值都写在注释里,直接看源码即可当文档用。
验证产出
Java 版会在输出目录生成完整世界文件夹,把它放进 .minecraft/saves 就能启动;基岩版产出一个 .mcworld 文件,双击导入;Luanti 则写入标准的 worlds 目录。生成完毕可以加--map-preview输出一张俯视 PNG 总览图,不进游戏先检查布局是否符合预期。
关键参数与取舍:哪些选项值得动
| 参数 | 推荐值 | 实际效果 | 适用场景 |
|---|---|---|---|
| 世界比例(--scale) | 1.0 | 1 米现实 = 1 方块,建筑按真实尺寸 | 城区重建 |
| 世界比例 | 0.1–0.3 | 每方块代表数米到数十米 | 覆盖大范围区域 |
| 生成模式(--mode) | geo-terrain | 真实地形 + OSM 对象 | 默认首选 |
| 生成模式 | terrain-only | 只有地形,跳过全部网络抓取 | 快速看山形水系 |
| 室内结构(--interior) | 关闭 | 建筑只有外壳;开启后生成楼层与房间 | 想"走进"某栋楼时 |
| 招牌(--signage) | basic | basic 为路名/公交站;full 加店铺铭牌、门牌号 | 街道还原度优先选 full |
| 树木尺寸(--max-tree-size) | giant | 控制单棵树的方块上限,越大越接近真实树冠 | 自然景观 |
| 旋转(--rotation) | 0 | 顺时针旋转 -90 到 90 度,可把道路摆正 | 对齐出生点朝向 |
原理一句话:比例值决定"一个方块等于几米",它是全局唯一的缩放轴——地形起伏、道路宽度、建筑尺寸都乘它,所以改这一个数字就能在"细节丰富但区域小"和"覆盖大但细节简化"之间滑动。
效果展示与案例
上图是不同区域生成的俯瞰效果:密集街区、河岸绿地、道路网都来自同一套数据管线,差异只在包围盒位置。
地理课堂上的洪水教学。项目被一篇 K-12 教育研究(Floodcraft)采用:研究者用 Arnis 生成真实河网与地形,学生在 Minecraft 里体验水位上涨过程,把课本上的流域概念变成可以亲自"淹"一次的场景。真实地形是这类教学成立的前提,平面地图给不了坡度带来的汇水感。
媒体验证的"家乡复刻"。Tom's Hardware、Hackaday 等科技媒体在 2024 年底报道过该项目:核心演示就是把某城市街区 1:1 搬进游戏,连街名招牌都对得上。对普通玩家来说,这是"给朋友展示自己城市"的最省事方式。
地标与植被的内容化用法。仓库内置了大量可放置结构:assets/structures/landmarks/ 下有慕尼黑奥林匹克体育场等标志性场馆的 schem 文件,还有车辆、塔吊、风力发电机等道具。配合九大区树的树种模型,创作者可以把"真实地形"当底图,叠加这些地标做主题地图。
常见坑与排查
- 现象:生成了地形但没有建筑道路。原因:比例值低于 0.3 时道路宽度不足一个方块,工具会自动跳过所有对象。解决:把 --scale 提到 0.3 以上,或接受纯地形(--mode terrain-only)的用法。
- 现象:一次生成耗时数小时甚至中断。原因:大包围盒 × 1.0 比例下,方块数量与下载量呈乘积关系。解决:拆成 2–4 个包围盒分批生成,或用 web_mercator 投影模式让多次生成拼进同一个大坐标空间。
- 现象:报错 "Provide --bbox, or --file…"。原因:既没给包围盒也没给本地 OSM 文件。解决:二选一;注意 terrain-only 模式不读本地文件,必须给 --bbox。
- 现象:Java 版启动后世界是空的或路径报错。原因:--output-dir 对 Java 版是必填项且必须指向目录;基岩版则要求目录已存在。解决:按平台核对参数,见 src/args.rs 中 validate_args 的校验逻辑。
- 现象:某些偏僻地区建筑比预期多。原因:Overture 卫星检测默认开启,会补上 OSM 缺失的轮廓,偶尔混入误检。解决:加 --overture=false 回到纯 OSM 数据。
- 现象:出生点落在水面或墙里。原因:--spawn-lat/--spawn-lng 只校验在包围盒内,不校验地形高度。解决:生成后看 --map-preview 的俯视图,重新选一个开阔点。
进阶与扩展:源码里值得深挖的模块
- src/coordinate_system/:分 geographic(经纬度包围盒 llbbox.rs)与 cartesian(XZ 方块坐标)两层,transformation.rs 负责两者换算,是理解"一个经纬度如何变成一个方块位置"的入口。
- src/elevation/providers/:每种高程源一个文件(aws_terrain.rs、mapterhorn.rs、usgs_3dep.rs 等),selector.rs 决定区域用哪个源。想接自定义高程服务,照着现有 provider 实现即可。
- src/element_processing/:按要素类型拆文件,buildings.rs 管楼房、bridges.rs 管桥梁、waterways.rs 管河道。新增一类要素(比如给"停车场"画标线)从这里入手。
- src/map_transformation/:以 JSON 描述的旋转、平移算子链,tests/map_transformation/example_transformations.json 是格式范例。
- src/world_editor/:java.rs、bedrock.rs、luanti.rs 分别负责把方块写入三种格式;想输出到别的引擎(如 Minetest 之外的沙盒游戏),在这里新增一个 writer 是清晰的切入口。
收尾:一条可以立刻跑通的最小路径
- 下载最新版 Arnis(或克隆仓库后执行
cargo run --release启动 GUI); - 在地图上框选一个约 1–2 平方公里的街区,比例保持 1.0;
- 点 Start Generation,等待完成后把输出目录放入我的世界存档文件夹;
- 进入世界,从出生点沿一条你熟悉的街道走一圈做验收。
之后想覆盖更大范围,再回来对照参数表调比例和模式即可。仓库的完整文档(技术原理、FAQ、路线图)维护在官方 Wiki,代码内的注释覆盖度也足够支持直接读源码改行为。
【免费下载链接】arnisGenerate any location from the real world in Minecraft with a high level of detail.项目地址: https://gitcode.com/GitHub_Trending/ar/arnis
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考