Profile
Back to NewsBack
GitHub Trending 1 min
Reader Mode
guaner-334/civ-atlas: 在浏览器里生成一颗完整的星球并推演它的历史,得到可以编辑的地图和编年史。面向小说、设定集、跑团等原创世界观创作。

guaner-334/civ-atlas: 在浏览器里生成一颗完整的星球并推演它的历史,得到可以编辑的地图和编年史。面向小说、设定集、跑团等原创世界观创作。

15 hours ago

文明与地图

在浏览器里生成一颗完整的星球并推演它的历史:用板块运动、河流侵蚀、气候与洋流算出地形和生态,再模拟民族、国家、战争与王朝更替,得到可以编辑的地图和编年史。面向小说、设定集、跑团等原创世界观创作。

在线使用 | 路线图 | 开发说明 | 反馈问题 | QQ 交流群 925687934

License: AGPL-3.0</a> Release</a>

!种子 2024 推演结束时的政区图:左侧是国家列表和最近大事,底部是时间轴

本页图片均为程序模拟生成的地图,不是真实地图。

网站免费使用。生成、推演、编辑、存档和导出全部在浏览器中完成,不需要安装或注册。同一版本下,相同的种子和参数在任何设备上生成逐位一致的世界;存档只记录种子、参数和修改,通常只有几 KB。

特性

星球生成

!新建世界的开场:板块漂移、碰撞,形成今天的大陆,再卷成球体

  • 球面网格:球面泊松圆盘采样加球面 Delaunay 三角剖分,默认约 3.6 万个不规则地块,可调到 20 万。地图东西相连、包含两极,没有平面拼接缝。
  • 板块构造:大小悬殊的板块绕欧拉轴运动;汇聚带造山,俯冲带形成海沟,离散带形成洋中脊。生成大陆、微大陆、岛弧和极地大陆。
  • 河流侵蚀:流水功率侵蚀定律(stream power law),用 Braun & Willett (2013) 的隐式解法求解;Priority-Flood 填平洼地,河网和湖泊由排水计算得出。
  • 气候:气温按纬度和海拔计算;三圈环流的风带顺风输送水汽,迎风坡多雨,背风坡形成雨影。
  • 洋流:按大洋环流的规律布置暖流、寒流和沿岸上升流,改变沿岸的气温和降水。
  • 生物群落:按年均温和年降水(Whittaker 图)划分雨林、草原、荒漠、苔原等。
!同一颗星球的六个数据图层:板块、高程、气温、降水、洋流、生态

历史推演

!拖动时间轴,国家依次出现、扩张、分裂、灭亡

  • 民族与国家:民族从发源地沿宜居地扩散,受山脉、海洋、荒漠阻隔;建城、立国、扩张,战争与议和,分裂、合并、复国、迁都。
  • 王朝与人物:王朝更替和世系;每位君主、将领都有生平(在位年份、父子、前任与继任、亲征、结局),每个朝代一棵家谱树;每个朝代还有几位名臣,和将领一样有字号、籍贯、官职和一段生平,经手的议和、辅政、迎立写进编年史。
  • 社会变迁:民族同化与迁徙,城市兴衰(洗劫、毁城、重建、旧都衰落),宗教从大城市传播,成为国教并分出教派。
  • 编年史:推演中的事件写成中文纪事,可以按国家筛选,点击一条跳到对应的年份和地点。
  • 国旗:按民族、国体和王室起源为每个国家生成国旗,随改朝换代、分裂、复国变化。
  • 地名:山、河、湖、海、国家、城市按多种语感自动命名,按中文地图的习惯排版;新建世界时可以设置中原、江南、帝国、北境等 12 种语感各占多少,默认自动。
  • 时间轴:可以播放或拖动到任意一年查看当时的政区。
!编年史:推演中的事件写成中文纪事,改朝、战争等分类标注

!世系图:每个朝代一棵家谱树,数字是这一朝的第几位君主,虚框是没有即位的宗室

编辑与创作

  • 干预历史:保护、禁止分裂、禁止扩张、结盟、宣战、迁都,或在某一州立国、把它划给别国,从指定年份起重新推演。
  • 改名:国家、城市、山河都能改名;名称绑定在稳定的标识上,重新推演后仍然保留。
  • 作者的人物:添加自己故事里的人物(生卒、出生地、经历、亲友),经历和亲友可以关联推演中的事件和人物,地图上显示一生的足迹。
  • 标记:在地图上放置带年份范围的图钉或区域标记。人物和标记都是附加的注记,不影响推演结果。
  • 编辑地形:新建世界时用画笔涂出陆地、丘陵、山地、高原、浅海、群岛,放置火山、湖泊和河流,程序按草图生成整颗星球;也可以导入一张图片作为草图(在本机识别,不上传)。
  • 地形大事:在指定年份触发火山喷发、地震抬升或海水侵入;这一年以前的历史不变,之后按新地形继续推演。
!改写历史:巴拉尔汗国原本在 2984 年灭亡;在 2890 年加上「保护」后重新推演,到 2998 年仍然存在

!编辑地形:圈出一块大陆、涂一道山脉、画一条河、涂一片群岛,星球按草图生成

!作者的人物:左侧是人物卡片和经历,地图上是从观雨城到扎里亚的足迹

显示与导出

  • 画风与图层:手绘风(政区、民族、信仰、地形)、写实风(实景),以及生态、高程、板块、气温、降水、洋流等数据图层;可以回放地形的形成过程。
  • 投影:等距圆柱(左右无限拖动)、罗宾森、自然地球、摩尔威德、墨卡托,以及 3D 地球仪。
  • 存档与分享:世界自动保存在浏览器中,也可以存成文件,或生成包含全部修改的分享链接。
  • 导出:地图图片(PNG / JPEG,按当前投影)、图例、高度图(16 位 / 8 位)、编年史(Markdown / 纯文本)、地球仪当前视图。
!同一个世界的几种显示方式:手绘地形、实景、政区地球仪、实景地球仪

AI 辅助(可选)

填入自己的 DeepSeek 或阿里云百炼 API Key 后,可以用 AI 把推演出的历史写成史书、解释和生成名称,或用一句话描述想要的修改:AI 列出改动清单供勾选执行(改历史的会先试推演给出结果,改地形的要重新生成整个世界,不能试推演),执行后可以撤销。AI 生成的内容都标有「AI 写」,在「AI 设置」中可以整体关闭。地形和历史本身不由 AI 生成。

实现

球面网格 → 板块构造 → 抬升与侵蚀 → 河流、湖泊 → 气温、风、降水、洋流 → 生物群落
        → 宜居度 → 州与城址 → 民族扩散 → 国家、战争、王朝……(事件推演) → 编年史
  • 技术栈:TypeScript、React、Vite;没有后端依赖。生成和推演在 Web Worker 中运行,生成代码不依赖 DOM,也能在 Node 中运行;地球仪用 WebGL2,不支持时退回 CPU 绘制。
  • 推演引擎:事件堆加变化日志,每 100 年存一个检查点;时间轴可以跳到任意一年,修改后从指定年份重新推演。
  • 确定性:所有随机数都从种子按用途派生;经纬度换算用的三角函数,以及推演中要比较或保存的指数、对数、幂运算,结果舍入到 24 个二进制有效位(与单精度浮点数相同),抹平不同 CPU、浏览器之间最后一位的差别。同一个种子在不同电脑、浏览器上生成同一个世界,由单元测试核对。
  • 渲染与数据分离:画风和投影只读取世界数据,切换时不重新生成。
  • 性能预算:默认 3.6 万地块,生成加铺像素在 2 秒以内。
  • 生成器版本:生成算法的改动会让同一个种子得到不同的世界,这时生成器版本号加一;旧版本的存档和链接始终可以打开,打开时网页会说明世界变了什么。

路线图

已在测试网站

新版本先发到测试网站(世界和正式网站分开保存),每周日同步一次到正式网站。

逐年推演

  • 打开任一世界,侧栏点「从这里演绎」,世界从这一年起一步步自己往下走。每隔一段停下来,列出这一段的大事,可以在「现在」加干预,下一步生效;随时存回成普通世界。新建世界时也能直接选「演绎」。
  • 演绎到一半想重来:时间轴往回翻,或打一个以前的年份,点「从这里重新演绎」,原来那份默认先另存一个。
  • 导播:播放时镜头自己飞到出事的地方,标出事发地,底下一条字幕;拖一下地图,镜头就交还给你。
  • 再推 N 年:推完的世界在时间轴尽头点「再推」,选 100 / 500 / 1000 年或自己填,接着往后推,最多到第 6 万年;前面的历史不变,推完可以撤销。
历史
  • 各地会闹饥荒、起民变、起瘟疫(地图上能看到疫区);年头久、地方大的国家会突然崩解,称霸一块大陆的大国盛极而衰,大陆分了又合。
  • 君主、将领、名臣可以改名。
  • 保护、禁止扩张、结盟这些命令可以设「到哪一年为止」。
  • 同一张地图可以换一个文明种子从头推演,原来的世界不动;「我的世界」分成「地图」「文明」两页。
  • 世界概览的国家表多了人口、国教、时代和外交;新增「民族」页,已经消亡的民族也列出来。
编辑地形
  • 新的「板块」页:拖箭头改板块往哪走、走多快,改陆壳洋壳,切开、合并,也能照一张画好的板块图分板块;山脉、海沟跟着重新长。
  • 画草图时能选程序补全多少(随意发挥 / 只补细节 / 完全照画),没涂的地方可以不长新陆地;程序生成的河和湖点一下就能删。
  • 照手绘图建的世界也能细改高度、气候、板块。
  • 涂一笔以后地图换上更快,页面不再一顿一顿。
显示和导出
  • 导出海拔、气温、降水这类数据地图时带色阶。
  • 手机上的地球仪、新建世界的星球上有地名了。
  • 第一次打开网站快了很多;手机上少占内存;点国家时面板先出来。
同步到正式网站以后,之前建的世界照原样打开;新建的世界,同一个种子推演出的历史会和以前不同。

接下来做

大致按这个顺序做,做好一项就先发到测试网站。先后会按实际情况调整,改了会在这里写明原因。

  • 分享停在那一刻:别人打开你的分享链接,直接停在你分享时的那一年、那个国家、同样的地图位置;新建世界的参数也能复制成链接发给朋友。
  • 时间轴上找立国年份:更容易看出一个国家是哪年立国的。
  • 加载画面:打开网站先出加载画面和进度,不再白屏干等。
  • 手机更稳:继续省内存,减少闪退。
  • 故事长图:导出一张竖着的长图,开头是全图,往下一个时代一段,配那时的地图和大事,适合发到社交平台。
  • 地图上写出民族、信仰、时代的名称:国名、族名这些能单独开关。
  • 自己建的人物进入推演:能参与并改写后面的历史,比如当上某国君主。
  • AI 写史书少套话:不再混进现实里的词。
  • 编辑地形先出地图:涂完一笔先出地图,历史在后台补上。
上一版路线图里的两项有变化:「分段推演」已经以「逐年推演」的形式做出来了;「季节影响推演」从第一位挪到了「以后考虑」,因为季节要让推演的一步比一年更短,要等逐年推演再打牢一些、上面几项做完以后再动。

云存档、多人协作和不用自备 API Key 的 AI 需要登录账号;生成、推演、修改、存档、导出始终不需要登录。

以后考虑

先后还会调整,调整时写明原因。

  • 逐年推演继续加深:给国家设倾向、从某一年另开一支历史、跟着一个人物看他的一生、先写好剧情让世界配合着演。
  • 更多干预:灭国、让人物死亡、天灾让人口锐减。
  • 政体和国体的演变:一直到现代国家。
  • 战争更像战争:开战前看君主、内政、资源和国际局势,会拉锯,有统一的大势。
  • 季节影响推演:出兵避开严冬和雨季、冬季迁徙放缓、海面封冻、收成影响人口。月份、跳年和每年月数已经能用。
  • 多人协作:一人创建世界,朋友进来一起看、一起改同一个世界。需要先有账号和云存档,所以排在后面;多人一起逐年推演还在研究可行性。
  • 精选作品墙:在网站上看到大家做的世界,能直接拿来用。
  • 地表两种画法:卫星观感和自然地理图之间切换。
  • 宗教、物产和民族:宗教影响战争和起事(立国教、改宗、禁教),标出各地特产、主要贸易路线命名为商道,民族分得更细。
  • 星球大小和地貌细节:可调整星球大小;区域级地图,放大看一个地区的地貌。
  • 自定义世界观:把设定文档交给 AI、历史剧本、幻想种族和魔法。
  • 其他候选:
- 作者人物之间的关系图、家族对历史的影响 - 编年史叙事:时代命名、君主绰号、写明事件起因 - 点选地块,说明它为什么形成这样的地形和气候 - 修改历史后说明「这次变了什么」 - 同一个世界两种历史的并排对比 - 导出整理好的设定资料,以及 SillyTavern 世界书 - 按城市特点生成一段音乐 - 提高 AI 史书的准确性:减少年份和地名错误,长篇中断后可以续写

暂不考虑

  • 以真实地球为底图:公开发布的真实世界地图需要审核,推演出的国界无法通过。

最近更新

  • 2026-10-18:发布 1.2.0:各地生产越先进城越大,各国国都交通够了才开始远洋,编年史记下世上第一次的发明;新增时代、物产、地理图、白模图层,底图和填色随意搭配;地图文字能调字号和颜色、区域名沿形状排,经纬网可选间隔,新增按柯本估算的气候分类;立国更早,隔海隔山的民族会分化出亲缘民族;人物有了头像;回放可以导出成视频或长图;新建世界的参数更多,最多推演 6 万年;从这个版本起,建好的世界会在浏览器里存一份原样,以后网站升级时照原样打开(这以前建的世界没有存原样,打开时会提示「来自旧版本」)。
  • 2026-10-11:发布 1.1.0:国家之间会称臣纳贡、结盟、背盟,议和写清割了哪几州;君主有了开拓、好战、发展、重商的倾向,扩张前先掂量划不划算;地形大事以后老城的港口和人口跟着新地形变;实景地图放大后有地面纹理和河谷绿带;新建世界先选随机生成还是照手绘图生成。从这天起,新版本先上测试网站。
  • 2026-10-10:新建世界时可以设置地名风格:12 种语感各配几份,按比例分给各民族;只换名字,历史不变。
  • 2026-10-08:编辑地形(按草图生成星球、导入图片作为草图);地形大事;精细度上限从 8 万提高到 20 万地块;实景放大后显示更细的地形、小河和海岸线。
  • 2026-10-07:发布 1.0.0,代码开源。

已知问题

  • 网站服务器在新加坡,部分国内网络加载较慢。
  • 手机竖屏可用,但一屏只能看到世界的一小部分,部分面板较挤,建议在电脑上使用。
  • 清除浏览器数据会删除保存在网页中的世界;重要的世界请在「我的世界」中存成文件。
  • AI 生成的史书偶尔算错年份或张冠李戴地名。

本地运行

需要 Node 22 以上和 pnpm。

git clone https://github.com/guaner-334/civ-atlas.git
cd civ-atlas
pnpm install
pnpm dev        # http://localhost:5188

测试命令、截图脚本、网址参数和代码结构见 docs/development.md。

反馈与参与

  • 问题和建议请提交 Issue。报告画面问题时请附上完整网址(其中包含种子,同一个种子会生成同一个世界)和截图。
  • QQ 交流群:925687934,反馈问题、聊聊你的世界都可以。
  • 目前不接受外部的 Pull Request,详见 CONTRIBUTING.md。
  • 安全问题请通过仓库的 Security → Report a vulnerability 私下报告,不要发公开 Issue。

隐私

世界的生成和推演都在浏览器中完成。网页中没有统计、广告或跟踪代码,也不使用 cookie。

  • 不登录时,世界、存档和 AI 生成的内容只保存在当前浏览器中,不会上传。网站提供账号、你登录以后,世界和 AI 生成的内容会保存到账号中,以便在其他设备上继续;AI 调用记录和 API Key 不会上传。
  • 使用自己的 API Key 时,Key 只保存在当前浏览器中,请求由网页直接发给所选服务商(DeepSeek 或阿里云百炼),不经过我们的服务器;每次发送的内容可以在「AI 设置 → 调用记录」中查看。
完整说明见网站上的隐私政策和用户协议,源文件在 public/ 中,可以对照代码核实。

许可

代码以 GNU AGPL-3.0(仅第 3 版)发布,© 2026 guaner-334。可以自由使用、修改和再发布;将修改后的版本作为网络服务提供给他人使用时,也必须以同样的协议公开修改后的完整源代码。网站账号、云同步、短链接等功能使用的账号服务器是另一个独立程序,不包含在本仓库中。

用这个工具做出来的世界(起的名字、干预、改过的地形、标记和人物)、导出的地图图片、AI 为你写的书,都归你所有,我们不主张任何权利,可以自由使用,包括商业用途。AGPL-3.0 只约束代码本身,不约束用它生成的地图和文字;AI 生成的内容同时受 AI 服务商条款的约束。程序生成的地名可能与真实名称重合,商用前请自行核对。

第三方依赖各有许可(MIT / ISC / Unlicense;导出视频用的 mediabunny 是 MPL-2.0,未作修改);字体使用 SIL Open Font License 1.1(见下)。

致谢

算法思路参考了以下公开资料(未复制代码):

  • Braun & Willett (2013):流水功率侵蚀的隐式解法
  • Barnes et al. (2014):Priority-Flood 洼地填平
  • Cordonnier et al. (2016):构造抬升与河流侵蚀生成大尺度地形
  • Red Blob Games《mapgen4》、Martin O'Leary《Generating fantasy maps》、Azgaar Fantasy Map Generator
地图文字使用的字体按地名字表裁剪成子集,放在 public/fonts/,不依赖在线字体服务:
  • 霞鹜文楷 GB(LXGW WenKai GB,lxgw/LxgwWenkaiGB v1.522):手绘风。© LXGW,基于 Fontworks 的 Klee One;SIL Open Font License 1.1,许可证附加条款允许为网页裁剪、转换后沿用原名。
  • 思源宋体 Google 版(Noto Serif SC,google/fonts 2.003):写实风。© Adobe;SIL Open Font License 1.1。
许可证全文和来源校验值见 public/fonts/ 中的 OFL-*.txt、SOURCES.txt。

人物头像的部件图放在 public/portraits/,由图像生成工具生成后裁切、去底、调色,以 CC0 1.0(公有领域贡献)发布,随便用、不用署名;说明见 public/portraits/LICENSE.txt。

Chat with me