“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
实时程序化地牢生成器:Three.js 驱动的确定性迷宫与电影级渲染管线
一个基于 Three.js 的实时程序化地牢生成器,支持确定性种子、Delaunay/MST 图布局、房间语义、五种主题以及自定义泛光/移轴渲染管线。
项目概览
majidmanzarpour/threejs-procedural-dungeon 是一个开源的 JavaScript 项目,利用 Three.js 在浏览器中实时生成程序化地牢。它不仅仅是一个迷宫生成器,更是一套完整的地牢创作系统:从图论布局到房间语义分配,从五种视觉主题到定制化的后期特效管线。项目目前拥有 295 颗星,代码质量高,文档清晰,适合游戏开发者、图形学爱好者以及 Three.js 学习者深入研究。
痛点与解决方案
痛点
- 传统地牢设计依赖手工铺设,耗时耗力,且难以生成大量多样化的关卡。
- 现有的程序化生成算法(如随机 BSP、随机行走)往往缺乏结构控制,生成的房间布局散乱、连通性差。
- 多数地牢生成器输出的是 2D 网格或简单 3D 模型,缺乏完整的渲染管线与视觉风格支持。
- 游戏开发者需要快速原型,但缺乏开箱即用、可扩展的 Web 端地牢生成方案。
解决方案
本项目提供了一整套端到端的解决方案:
- 确定性种子:相同的种子始终生成相同的地牢,方便调试与复现。
- Delaunay 三角剖分 + 最小生成树 (MST):将随机放置的房间通过 Delaunay 三角网连接,再用 MST 提取主干路径,保证所有房间连通且没有冗余循环。
- 房间语义:为每个房间分配标签(如“出生点”、“Boss房”、“宝箱房”),支持基于规则的游戏逻辑扩展。
- 五种主题:包括“古墓”、“地下洞穴”、“冰窟”、“熔岩”和“神殿”,通过材质、颜色和光照快速切换视觉风格。
- 定制渲染管线:内置泛光(Bloom)和移轴(Tilt-shift)效果,无需额外后期库,直接输出电影级画面。
安装与使用
环境要求
- Node.js >= 16.x
- 现代浏览器(支持 WebGL2)
安装步骤
bash
克隆仓库
git clone https://github.com/majidmanzarpour/threejs-procedural-dungeon.git
cd threejs-procedural-dungeon
安装依赖
npm install
启动开发服务器
npm run dev
浏览器打开 http://localhost:5173 即可看到实时生成的地牢,并可通过界面参数调整种子、主题、房间数量等。
核心代码示例
javascript
import { DungeonGenerator } from './src/DungeonGenerator.js';
import { ThemeManager } from './src/ThemeManager.js';
// 初始化生成器,指定种子
const generator = new DungeonGenerator({ seed: 42 });
// 设置参数:房间数量、最小房间尺寸、最大房间尺寸
generator.setParameters({ roomCount: 30, minRoomSize: 5, maxRoomSize: 15 });
// 执行生成
const dungeonData = generator.generate();
// 获取房间语义列表
console.log(dungeonData.rooms);
// 输出示例:
// [
// { id: 0, position: {x:0, z:0}, size: {w:10, d:8}, semantic: 'spawn' },
// { id: 1, position: {x:15, z:20}, size: {w:12, d:10}, semantic: 'boss' },
// ...
// ]
// 切换主题
const themeManager = new ThemeManager();
themeManager.setTheme('lava'); // 可选:'tomb', 'cave', 'ice', 'lava', 'temple'
// 渲染场景(内部使用 Three.js)
const scene = generator.buildScene(themeManager);
核心亮点深度解析
1. 图论驱动的布局算法
传统程序化地牢常使用 BSP(二叉空间分割)或随机放置后暴力连接。本项目采用更优雅的图论方法:
- 房间放置:在二维平面上随机放置矩形房间,使用简单碰撞检测避免重叠。
- Delaunay 三角剖分:以房间中心为顶点,构建 Delaunay 三角网,确保每个房间与最近的邻居连接。
- 最小生成树 (MST):从三角网中提取 MST,保留最少的边以保证所有房间连通。这一步消除了冗余通道,使地牢结构紧凑。
- 走廊生成:对 MST 中的每条边,使用 A* 或简单 L 形走廊连接房间门。
这种方法的优势在于:
- 确定性:相同种子产生相同三角网和 MST。
- 可控性:通过调整房间数量、尺寸和 MST 权重,可以生成从紧凑迷宫到开放大厅的不同风格。
- 可扩展性:可以在 MST 基础上随机添加额外边,制造循环路径,增加探索自由度。
2. 房间语义系统
每个房间在生成时被赋予一个语义标签,目前支持:
spawn:玩家起始点boss:Boss 房间(通常最大、最远)treasure:宝箱房(含奖励)normal:普通战斗/探索房间secret:隐藏房间(需要特定条件进入)
语义分配基于规则:例如,boss 房间总是离 spawn 最远(通过 MST 路径距离计算)。开发者可以轻松扩展语义类型,并在游戏逻辑中根据标签触发事件。
3. 五种主题的视觉实现
主题不仅仅是换色,而是完整的材质、光照和雾效组合:
| 主题 | 主色调 | 光照特点 | 雾效 | 特殊元素 |
|---|---|---|---|---|
| 古墓 (tomb) | 土黄、暗金 | 暖色点光源 | 浅黄色薄雾 | 石柱、火把 |
| 地下洞穴 (cave) | 深灰、暗绿 | 冷色环境光 | 深灰色浓雾 | 钟乳石、苔藓 |
| 冰窟 (ice) | 冰蓝、白色 | 高光、反射 | 淡蓝色雾 | 冰柱、霜面 |
| 熔岩 (lava) | 红、橙、黑 | 动态火焰光 | 深红色雾 | 岩浆池、焦痕 |
| 神殿 (temple) | 白、金、蓝 | 明亮全局光 | 无雾 | 雕像、符文 |
主题通过 ThemeManager 统一管理,材质使用 Three.js 的 MeshStandardMaterial,支持 PBR 属性(粗糙度、金属度)。
4. 定制后期渲染管线
项目内建了一个轻量级后期管线,无需引入 PostProcessing 库:
- 泛光 (Bloom):基于亮度的模糊叠加,使发光物体(如熔岩、魔法符文)产生辉光效果。
- 移轴 (Tilt-shift):模拟微距摄影的景深效果,通过垂直渐变模糊实现,让地牢看起来像微缩模型。
管线使用 Three.js 的 EffectComposer 和自定义着色器,性能优化良好,在中等配置 GPU 上可保持 60fps。
5. 交互式控制面板
开发服务器包含一个基于 dat.GUI 的实时控制面板,支持:
- 调整种子(数字输入或随机按钮)
- 切换主题
- 调节房间数量、尺寸范围
- 开关 Bloom / Tilt-shift 效果
- 导出当前地牢的 JSON 数据
适用场景
- 游戏关卡原型设计:独立游戏开发者可快速生成多种地牢布局,测试玩法机制。
- 图形学教学:演示 Delaunay 三角剖分、MST、程序化生成等算法在 3D 场景中的实际应用。
- Three.js 学习:项目代码结构清晰,包含 Three.js 核心概念(场景、材质、光照、后期)的实践范例。
- 艺术创作:利用移轴效果和多种主题,生成风格化的 3D 场景截图或动画。
- AI 训练数据生成:导出地牢 JSON 数据,用于强化学习中的迷宫导航任务。
同类项目对比
| 特性 | 本项目 | dungeon-generator (npm) | procgen-dungeon (Python) |
|---|---|---|---|
| 渲染引擎 | Three.js (WebGL) | 无(仅输出 JSON) | 无(仅输出 ASCII/JSON) |
| 布局算法 | Delaunay + MST | BSP | 随机行走 + 手动规则 |
| 房间语义 | ✅ 内置分类 | ❌ | ❌ |
| 主题系统 | 5种完整主题 | ❌ | ❌ |
| 后期特效 | Bloom + Tilt-shift | ❌ | ❌ |
| 实时交互 | ✅ 控制面板 | ❌ | ❌ |
| 确定性种子 | ✅ | ✅ | ✅ |
| 语言 | JavaScript | JavaScript | Python |
本项目在可视化丰富度、实时交互和即用性上明显优于同类工具,特别适合 Web 端游戏和演示场景。
总结与展望
threejs-procedural-dungeon 是一个小而精的项目,它巧妙地将图论算法、语义化设计和电影级渲染融为一体。对于游戏开发者,它提供了一个可立即运行的 Web 地牢原型;对于学习者,它是理解程序化生成与 Three.js 管线的绝佳案例。
未来可能的扩展方向:
- 支持更多主题(如“水下宫殿”、“机械要塞”)
- 集成物理引擎(如 Cannon.js)实现可交互的门、陷阱
- 导出为 glTF 格式,用于 Unity/Unreal 导入
- 添加多人同步功能
无论你是想快速生成游戏关卡,还是深入钻研程序化生成算法,这个项目都值得一试。
项目链接:https://github.com/majidmanzarpour/threejs-procedural-dungeon