《飘渺之旅》算得上修真小说的开山之作,我一直挺喜欢。最近突发奇想:能不能让 AI 先把整本小说读完,再用 Three.js 把书里的世界观宇宙"架构"出来——不是画几张概念图,而是做成一个能在浏览器里拖拽、缩放、点击的 3D 宇宙。

于是有了这个项目:一个零依赖、纯静态、完全离线的单页应用,双击 index.html 就能打开。

第一步:先让 AI 把小说读完

原始文本是 5.8MB 的 txt,46,806 行,GB18030 编码,而且尾部拖了两段垃圾——一段第 14 集的残章,加一段第 15~24 集的逐字重复拷贝(约 12,000 行)。

第一件事就是把语料洗干净:

  • 删掉全部垃圾,46,806 行 → 34,311 行,精确统计出 28 集 × 292 章
  • 编码从 GB18030 转成 UTF-8,macOS 直接能打开
  • 修了第 2 集标题里的 ?? 乱码(“星星宫??寒冰原” → “星星宫·寒冰原”)
  • 修了 2 处 GB18030 私有区字符(“水流突然化作…"、“突然出现一个巨大的黑洞”)

干净的语料是一切的基础。后面 AI 写的所有世界观数据,都要能回到这份原文里查到出处。

第二步:逐条考据世界观

这一步是最好玩的。书里那些设定散落在 292 章里,我让 Codex 全文检索核对,不许自由发挥:

  • 五层主界域:凡人界 → 修真界 → 仙界 → 原界 → 神界(书中正式叫法其实是"天神界”)
  • 平行界与神秘地带:灵鬼界、黑魔界、佛宗,以及鑫波角、幻星神阵
  • 修真界七颗星球:封缘星、天庭星、潜杰星、霖明星、坦邦星、幻树星、紫魂星
  • 修炼体系:修真十一境(加散仙旁支)→ 仙界七级 → 修神九重天(九重 × 三境 = 27 境)
  • 主角线:李强从第 1 集"误入天庭"一路到第 28 集"神罚之眼"

顺便考据出几个有意思的冷知识:神界在书里叫天神界,全书没有"大罗金仙、仙帝、神域"这些说法;傅山用紫炎心给李强筑基;赤明魔尊是李强师弟,两人同拜青帝;原界大约只有幻星神阵的十分之一;神之战魂来自紫魂星。

第三步:一个单文件的 3D 宇宙

最终交付物非常朴素:一个 index.html(946 行,HTML + CSS + 内联 JS)+ vendor/ 里两个本地文件(three.min.js r128 + OrbitControls.js)。没有构建步骤、没有 npm、没有 CDN,file:// 直接双击打开,断网也能玩。这是故意的——越简单的交付越长寿。

页面有三种视图模式:

  1. 宇宙总览:五层界域竖直堆叠,加上三个平行界、两处神秘地带、七颗星球,以及连接凡人界与修真界的"逆行通道"
  2. 修炼阶梯:修真十一境 → 仙界七级 → 修神九重天,27 个境界排成一条螺旋阶梯,像在爬一座无形的塔
  3. 主角旅程:李强 28 集剧情节点的紫色螺旋线,从误入天庭一路到神罚之眼

交互上就是常规三板斧:OrbitControls 拖动旋转、滚轮缩放、raycast 点击节点弹出详情面板。细节上花心思的是标签系统:所有标签都是 DOM 元素,每帧把 3D 坐标投影到屏幕坐标,还要做防重叠排版(固定组先放,可移动组最多重试 10 次下移)和 SVG 引导线,保证缩放之后不会糊成一团。另有侧栏 chip 跳转、自动旋转开关、920px / 640px 两档响应式断点。

验证:headless 跑一遍才算数

写完不是直接交付,而是用无头 Chrome + SwiftShader 软件 WebGL 实测了一轮:

  • 0 个 JS 错误
  • 三种模式切换正常
  • 点击"元婴"标签 → 面板正确显示元婴期;点击"第 28 集" → 显示"神罚之眼"
  • 侧栏 chip 跳转、自动旋转、700px 移动端视口全部正常

软件渲染下 13~18 FPS,真实 GPU 上应该满帧——这不是性能问题。

几点收获

  1. 动手前先定"事实底线"。中途有一次 review 误报章数应该是 296,其实是把垃圾残章的 4 个标题数进去了。定死"原文是唯一考据源、292 章是清洗后的精确数",AI 才不会在细节上自由发挥。
  2. 无构建交付很舒服。一个 HTML 文件加两个本地库,没有依赖链可以坏,拷到任何电脑都能开。
  3. vendor 文件要成对升级。three.js r128 和它的 OrbitControls 是配对关系,只换一半必然出问题;换版本必须全量回归三个视图。
  4. 清洗语料是最值的苦力活。5.8MB 的脏文本 → 34,311 行干净的 UTF-8,决定了后面所有 AI 工作的质量上限。

目前这个 3D 宇宙已经挂到博客上了,在线可以直接玩:飘渺之旅 · 世界观宇宙。整个项目以 Hugo 静态文件的形式原样托管,没有加任何依赖和构建步骤,双击本地 index.html 和在线打开是同一个版本。

这次自娱自乐的 AI 折腾算是闭环了——从读小说、考据、建模到上线,全程只花了一个周末的碎片时间。