首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Lorien:基于 Godot 引擎的无限画布矢量笔记应用 —— 特性、工具、文件格式与源码实现深度解析
📅 2026/10/8 8:14:48
✍️ 爱科研究院
👁 阅读 3,247
桌面应用图形学【免费下载链接】LorienInfinite canvas drawing/whiteboarding app for Windows, Linux and macOS. Made with Godot.项目地址https://gitcode.com/gh_mirrors/lo/Lorien点击查看免费下载Lorien 是一款面向数字笔记与头脑风暴场景的无限画布绘图应用它不采用 Krita、GIMP、Photoshop 式的位图像素存储而是把每一笔笔画保存为坐标点集合并在运行时渲染原理上类似 SVG从而同时实现极小的保存文件、无限撤销/重做与接近无限的缩放。本文以仓库根目录的 README.md 为主线结合 官方手册、变更日志、国际化文档 与核心 GDScript 源码带你完整掌握 Lorien 的定位、六大绘图工具、快捷键体系、.lorien 文件二进制格式、设置项与本地化机制并给出可直接对照源码验证的实现级解读。项目定位Lorien 是什么根据 README.md 的官方定义Lorien 是一个infinite canvas无限画布绘图/记笔记应用设计目标聚焦三点性能performance、极小的保存文件small savefiles与简洁simplicity。它与传统绘图软件的核心区别在于数据模型Krita、GIMP、Photoshop 等软件基于**位图bitmap**存储画布本质是一张像素网格Lorien 则把每一次落笔保存为一组points点集合并在渲染时动态绘制工作方式与 SVG 矢量图形相似。因此它被定位为数字笔记本digital notebook和头脑风暴工具brainstorming tool。官方明确说明它完全可以胜任小型草图与示意图但不是用来替代基于位图的传统美术软件的。Lorien 整个应用完全由 Godot 游戏引擎编写当前版本已迁移到 Godot 4.3见 docs/changelog.md这意味着它的画布、工具、UI 与文件读写全部基于 Godot 的节点体系实现下文会看到大量 Godot 特性Line2D、VisibleOnScreenNotifier2D、FileAccess.open_compressed等在源码中的直接运用。⚠️ 官方在 README 中明确警告项目仍处于WIPWork In Progress阶段还有点粗糙且保存文件格式未来可能发生变更。README 同时呼吁贡献者参与 bug 报告、代码、美术与翻译工作。核心特性全景v0.7.0-devREADME 列出了当前开发版v0.7.0-dev的完整特性清单逐条归纳如下特性说明Infinite canvas无限画布没有边界限制Infinite undo/redo无限撤销/重做(Almost) Infinite zoom接近无限缩放缩放以鼠标光标为基准Infinite grid无限网格提供点状/线状/无三种模式Zen mode禅模式一键隐藏全部 UI进入无干扰的纯绘制状态Extremely small savefiles极小的保存文件详见 docs/file_format.md 与下文文件格式解析Multiple documents可同时打开多个文档以标签页管理标签可滚动、可拖拽排序Tools六大工具自由画笔、橡皮擦、直线、矩形、圆形/椭圆、选区见官方手册Move delete strokes可移动、删除选中的笔画SVG export可将画布内容导出为 SVG 矢量文件Rebindable shortcuts全部键盘快捷键可自定义重绑定Color palettes内置调色板 可自定义调色板Tablet support面向数位板Wacom 等设计支持压感F12 surprise按下 F12 触发隐藏彩蛋在鼠标位置生成一个可玩角色能在笔迹上行走/跳跃/下蹲Cross-platform支持 Windows、Linux 与 macOSLocalizations多语言支持德语、英语、西班牙语、法语、意大利语、韩语、巴西葡萄牙语、俄语、土耳其语、乌克兰语、中文简体/繁体另按变更日志加入阿拉伯语、乌克兰语等基础操作导航、绘制与打开文件根据 manual_v0.7.0 的「Basic Usage」章节入门操作非常简单数位板是被支持且官方推荐的方式纯键盘鼠标同样可用绘制按住鼠标左键LMB或用数位板笔尖在画布上自由绘制平移按住鼠标中键MMB拖拽画布官方建议把笔上的按键映射到中键以便快速导航缩放滚动鼠标滚轮也可以在按住CTRL的同时按住MMB并上下移动鼠标该方式对数位板用户尤其有用打开文件直接把.lorien文件拖入窗口或通过菜单打开快捷键CTRLO。此外从变更日志 v0.3.0 可知Lorien 还支持通过CLI 参数打开文件并支持 Windows 的「打开方式」功能。六大绘图工具详解所有工具都集中在工具栏中单击图标或按快捷键即可切换把鼠标悬停在图标上会显示包含快捷键的简短提示。工具的完整行为与快捷键均以 manual_v0.7.0 为准下面逐一展开。画笔工具Brush Tool默认选中的工具可用鼠标或数位板在画布上自由绘制笔刷大小通过工具栏中的调节器slider修改笔刷颜色通过工具栏中紧邻大小调节器的彩色按钮修改支持压感pressure sensitive。从源码看画笔并非简单的线宽常量BrushTool.gdlorien/InfiniteCanvas/Tools/BrushTool.gd会把数位板压感与笔速共同折算进每一点的压力值——当压感接近满值时根据screen_velocity衰减压力实现画得快线就细的速度型线宽效果对应变更日志 v0.7.0 的 Velocity based line thickness 特性。详见下文「画笔渲染与平滑的源码实现」。矩形工具Rectangle Tool绘制完美无填充矩形不支持压感v0.7.0 起按住SHIFT可绘制完美正方形。直线工具Line Tool绘制完美直线按住Shift时以 15° 为增量吸附snap不支持压感根据变更日志 v0.4.0直线工具产生的线段会被细分首尾之间插入更多点便于后续用选区工具精确选中。圆形工具Circle Tool绘制完美椭圆与正圆按住Shift绘制正圆否则默认为椭圆不支持压感。橡皮擦工具Eraser Tool笔画级擦除SuperEraser橡皮擦扫过时只要与某条笔画相交整条笔画即被移除而不是像位图软件那样涂抹覆盖笔刷大小影响擦除的作用范围使用支持笔尾擦除的数位笔时自动切换为擦除模式该能力由 docs/changelog.md v0.6.0 记录。从变更日志 v0.5.0 可以看到早期版本曾用与背景同色覆盖的假擦除实现后已彻底移除并全面替换为 SuperEraser旧版本中遗留的擦除笔画在加载时会被跳过见下文文件格式中TYPE_ERASER_STROKE_DEPRECATED。选区工具Selection Tool按住LMB拖拽框选与选区矩形相交的笔画会被加入当前选区按住Shift拖拽可追加更多笔画到现有选区按RMB或Esc取消选区按住LMB拖拽可移动选中的笔画若按下LMB后没有移动鼠标将自动取消全部选中按Delete删除选区CTRLC复制CTRLV粘贴CTRLD一步完成复制粘贴复制粘贴/就地复制能力自 v0.3.0 引入移动后的笔画在导出 SVG 时位置正确v0.6.0/v0.7.0 修复了相关偏移 bug。颜色调色板Color Palettes调色板用于在不同预定义颜色间快速切换通过工具栏中紧邻笔刷大小调节器的彩色按钮打开支持新增/编辑/删除自定义调色板默认调色板不可编辑、不可删除如需自定义可先复制一份再编辑副本。调色板的底层由 lorien/Palette/PaletteManager.gd 管理调色板数据保存于user://palettes.cfg见 lorien/Config.gd。从变更日志可知v0.4.0 以调色板体系取代了旧的取色器工具与默认笔刷颜色设置。快捷键速查表以下快捷键来自 manual_v0.7.0全部可在设置中重新绑定快捷键功能CTRLS保存当前文件CTRLN新建文件CTRLO打开文件新标签页CTRLE打开 SVG 导出对话框CTRLZ/CTRLY撤销 / 重做笔画CTRLC/CTRLV/CTRLD复制 / 粘贴 / 就地复制选中笔画B/R/E/L/C/S画笔 / 矩形 / 橡皮擦 / 直线 / 圆形 / 选区工具Esc或RMB取消全部选中Delete删除选中笔画Tab切换禅模式隐藏全部 UIF12彩蛋在鼠标位置生成可玩角色补充说明来自变更日志与manual_v0.6.0v0.7.0 新增默认退出快捷键CTRLQv0.6.0 及更早版本还提供SPACE以鼠标位置为中心重定位画布v0.7.0 起SPACE改为按住平移画布的备选方式。画笔渲染与平滑的源码实现从 README以点集存储、运行时渲染的理念出发lorien/BrushStroke/BrushStroke.gd 是理解 Lorien 数据模型的最佳入口。该脚本定义了BrushStroke节点继承Node2D每个笔画本质上就是两个并行数组points: Array[Vector2]—— 笔画经过的世界坐标点pressures: Array[float]—— 每个点对应的压力值0.1 ~ 1.0。渲染时refresh()L105-L134脚本用 Godot 的Line2D逐点重建折线并把每个点的压力写入Line2D.width_curve的采样值从而实现随压感变化的线宽。Line2D的起止线帽begin_cap_mode/end_cap_mode根据设置项rendering_brush_rounding选择平头FLAT或圆头ROUNDED。几个值得注意的实现细节压力平滑add_point相邻两点压力差超过MAX_PRESSURE_DIFF0.05时会被钳制官方注释说明是为了应对 Linux 上偶发的高压力尖峰压力值被限制在MIN_PRESSURE_VALUE0.1与MAX_PRESSURE_VALUE1.0之间单笔点数上限MAX_POINTS : 1000L5。当一条笔画达到上限时BrushTool会自动结束当前笔画并新建一条继续BrushTool.gd L89-L94原因是 Godot 的Line2D/多边形索引数量有限碰撞体enable_colliderL82-L102可为每条笔画按线段生成SegmentShape2D碰撞体这是 F12 彩蛋中可玩角色能在笔迹上行走的物理基础从源码结构看可推断该碰撞体服务于彩蛋角色行走/跳跃离屏优化VisibleOnScreenNotifier2D把进入屏幕的笔画加入onscreen_stroke组便于按需参与选区/擦除等计算L31-L32。稳定器、速度与点识别BrushTool.gdlorien/InfiniteCanvas/Tools/BrushTool.gd 实现了画笔的核心手感笔画稳定器L58-L73当general_stabilizer_strength设置开启时新点会用最近三个点与当前光标位置做三次贝塞尔插值Utils.cubic_bezier插值系数t落在[0.5, 1.0]稳定器越强t越接近 0.5线条越平滑。这是变更日志 v0.7.0 Brush stroke stabilizer/smoothing 特性的源码实现压力速度双重线宽L76-L86_current_pressure按屏幕速度衰减快画时压力自动降低再乘以general_pressure_sensitvity灵敏度系数最终经pressure_curve见 lorien/InfiniteCanvas/constant_pressure_curve.tres采样单击成点_is_stroke_a_dotL99-L117总位移不超过 6 个单位的短笔画会被识别为点并以三点微三角的形式补绘确保点击一下就能留下清晰的墨点对应变更日志 v0.6.0 修复的单击无法绘制简单圆点问题。保存文件格式极小的 .lorien 文件README 将 Extremely small savefiles 列为核心卖点之一。docs/file_format.md 目前只是一份指向实现的 TODO 占位因此真实的文件格式细节只能从源码确认lorien/ProjectManager/Serializer.gd 是唯一权威来源文件头亦注明TODO: 所有内容都需要校验请读者注意格式仍可能变化。从 Serializer.gd 的save_project()看.lorien文件是一个使用 DEFLATE 压缩的二进制流FileAccess.COMPRESSION_DEFLATEL9按顺序写入格式版本号uint32当前VERSION_NUMBER : 1L12元数据以 Pascal 字符串store_pascal_string写入keyvalue,keyvalue,...形式的元数据串见_dict_to_metadata_strL124-L132逐笔画数据每条笔画依次为笔画类型uint8TYPE_BRUSH_STROKE : 0TYPE_ERASER_STROKE_DEPRECATED : 1为旧版擦除笔画读取时被跳过L14颜色RGB 各 1 字节共 3 字节笔刷尺寸uint16点数uint16每个点x、y 各一个 4 字节浮点 1 字节压力0~255换算为 0~1文件末尾为EOF标记读取时以file.eof_reached()结束循环L116。load_project()L61-L121是对称的反序列化过程并按VERSION_NUMBER校验旧版擦除笔画会打印Skipped deprecated eraser stroke后忽略。写入时还会把笔画节点的global_position偏移叠加到点上L49-L51确保移动工具拖拽过的笔画坐标不会丢失。文件之所以小从格式可以看出原因没有任何位图/栅格数据只有颜色 尺寸 点坐标 压力这些紧凑数值再经 DEFLATE 压缩后普通手写笔记往往只有几 KB 到几十 KB。官方在 README 中也以 kind of like SVG 类比说明其矢量本质。SVG 导出实现SVG 导出CTRLE由 lorien/Misc/SvgExporter.gd 实现L11-L43遍历所有笔画计算包含全部内容的包围盒并四周留出EDGE_MARGIN : 0.0252.5%的边距L8写出svg viewBox...头与背景色rect每条笔画写出一个polyline pointsx y,x y,...颜色来自笔画的 RGBL62-L73。从源码结构看导出的折线统一使用stroke-width:2压力/线宽数据暂未写入 SVG文件头部注释Stroke width / pressure data仍在 TODO 列表中。需要注意官方在变更日志 v0.5.0 中移除了早期的 PNG 导出改以 SVG 导出为主。设置项与配置详解Lorien 的运行时配置由 lorien/Misc/Settings.gd 统一读写 Godot 的ConfigFile存储路径由 lorien/Config.gd 定义user://settings_v4.cfg—— 设置与快捷键settings/keybindings两个 sectionuser://palettes.cfg—— 调色板user://state.cfg—— 运行时状态如最近使用的调色板 UUID。user://是 Godot 的用户数据目录具体落在哪个系统路径取决于操作系统与引擎版本。Settings.gd 定义的键名与 Config.gd 中的默认值对照如下来源Settings.gd L8-L29、Config.gd L15-L30配置键默认值说明general_pressure_sensitvity1.0压感灵敏度倍率注意源码键名如此拼写general_constant_pressurefalse关闭压感、恒定笔宽v0.7.0 新增general_stabilizer_strength0.5笔画稳定器强度0~1general_default_brush_size10默认笔刷大小general_default_project_dir—默认项目目录general_languageen界面语言general_tool_pressure0.5工具默认压力general_tablet_driver—内部数位板驱动v0.7.0 新增可在设置中更换appearance_theme0主题dark/light见 lorien/UI/Themesappearance_ui_scale_mode/appearance_ui_scaleAUTO/1.0UI 缩放模式与缩放值高 DPI 支持appearance_grid_pattern/appearance_grid_sizeDOTS/25.0网格图案点/线/无与网格尺寸appearance_canvas_colorColor(202124)画布背景色自 v0.6.0 起由设置控制不再随文件保存rendering_foreground_fps/rendering_background_fps144/10前台/后台帧率窗口失焦时降到 10 FPS 以省电v0.7.0 增加自适应帧率rendering_brush_roundingROUNDED笔刷线帽平头flat或圆头rounded快捷键重绑定keybindingssection 以InputEventKey形式存储每个 action 的按键事件由 lorien/Misc/KeybindingsManager.gd 管理。由于 v0.7.0 更换了键位存储格式从旧版本升级时需要重新设置自定义键位见变更日志 v0.7.0 的 Breaking Changes。重绑定的快捷键会实时反映在 UI 工具提示中——I18nParser.gd 会读取InputMap并拼出(Ctrl...)形式的提示文本。本地化机制13 种语言与自定义翻译README 宣称支持德语、英语、西班牙语、法语、意大利语、韩语、巴西葡萄牙语、俄语、土耳其语、乌克兰语、中文简/繁等多语言仓库 lorien/Assets/I18n 目录下实际存放了ar.txt、de.txt、en.txt、es.txt、fr.txt、it.txt、ko.txt、pt-BR.txt、ru.txt、tr.txt、uk.txt、zh-CN.txt、zh-TW.txt等 13 份语言文件。Lorien 的本地化方案docs/i18n.md与 Godot 内置的 CSV / Gettext 方式不同它使用自定义的简单.txt翻译文件配合TranslationServer在代码中注册。文件格式规则每行一条翻译格式为键 翻译键与翻译之间至少一个空格分隔第一行必须是LANGUAGE_NAME键值为该语言的自称用该语言书写而非英文支持注释整行以#开头为注释行内#之后也为注释支持\n转义为换行。en.txt示例来自 docs/i18n.mdLANGUAGE_NAME English GREETING Hello World! SAVE Save # This is a comment SAVE_AS Save as.. # This is also a comment TOOL_BRUSH Brush Tool加载实现见 I18nParser.gdL26-L68启动时扫描res://Assets/I18n/下所有.txt逐行解析键值对剔除空行与注释再以文件名为 locale 注册到TranslationServer。新增语言只需在Assets/I18n/下新建一个文本文件即可应用会自动加载无需改动代码docs/i18n.mdv0.6.0 起切换语言也不再需要重启应用。获取、构建与跨平台运行下载渠道README 说明官方提供最新稳定版发布与持续集成CI构建同时提醒使用 CI 主分支版本前务必备份文件并做好遇到 bug 的准备获取源码可通过git clone gitcode.com/gh_mirrors/lo/Lorien克隆本仓库从源码构建项目根目录包含 Godot 工程文件 lorien/project.godot 与 lorien/export_presets.cfg变更日志 v0.7.0 记录已从 Godot 3.5.3 迁移至Godot 4.3因此建议使用 Godot 4.3 及以上版本导入lorien/目录后运行或导出Linux 桌面集成从仓库结构看public/linux 提供了桌面入口文件.desktop、AppStream 元数据.metainfo.xml以及.lorien文件的 MIME 类型注册x-lorien-canvas.mimetype.xml便于打包分发与文件关联。文档导航与致谢围绕 Lorien 的更多资料集中在docs/目录官方手册 v0.7.0工具与快捷键的最新权威说明历史手册 v0.6.0含已变更的SPACE居中画布等旧特性文件格式规格当前为 TODO 占位实现在 Serializer.gd国际化文档 与 变更日志、路线图、贡献指南最后README 的 Credits 部分记录了第三方致谢笔画的抗锯齿效果借鉴了 godot-antialiased-line2d 思路UI 图标使用了 Remix Icon 图标集演示截图的模糊背景图来自 Unsplash。这些致谢只涉及素材与算法参考Lorien 本体代码完全由 Godot GDScript 编写正是这种点集存储 运行时渲染的简洁架构成就了它无限画布、无限撤销与极小保存文件的三大招牌能力。赞分享桌面应用图形学【免费下载链接】LorienInfinite canvas drawing/whiteboarding app for Windows, Linux and macOS. Made with Godot.项目地址https://gitcode.com/gh_mirrors/lo/Lorien点击查看免费下载相关推荐Lorien开发者指南基于Godot引擎的无限画布实现原理Lorien开发者指南基于Godot引擎的无限画布实现原理 Lorien 是一款基于Godot引擎开发的跨平台无限画布绘图应用支持Windows、Linux桌面应用图形学揭秘智能窗口管理器的5个高效技巧专业用户必看指南揭秘智能窗口管理器的5个高效技巧专业用户必看指南 Spectacle是一款专为macOS设计的开源窗口管理器通过键盘快捷键实现高效的窗口布局管理让用户彻底桌面应用解锁无限创意Lorien无限画布绘图工具深度体验解锁无限创意Lorien无限画布绘图工具深度体验 想象一下在一张永远画不到边的画布上自由挥洒创意这就是Lorien带给你的神奇体验 作为一款基于Go桌面应用图形学上一篇OpenClaw Fleet 实战指南用容器隔离的 Cell 构建多租户 Gateway 集群下一篇MkDocs Material 内置 projects 插件完全指南拆分多项目管理、并发构建与统一预览创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/8 8:14:48
Superpowers技能包:AI编程助手从随机发挥到确定性输出的实战指南
2026/10/8 8:09:47
基于微信小程序的英语学习平台:Java毕业设计SSM源码与部署全攻略
2026/10/8 8:09:47
Agent-Reach:面向终端工程师的CLI型Agent调度器
2026/10/8 9:00:01
Docker默认bridge网络与iptables机制解析及端口故障排查
2026/10/8 9:00:01
Docker网络核心:默认bridge驱动与iptables交互机制全解析
2026/10/8 9:00:01
智能电源路径保护:TPS259483AYWPR与PIC18F46K22协同设计
2026/10/8 9:00:01
OJ刷题瓶颈期如何突破:判题逻辑、复杂度分析与边界自测全攻略
2026/10/8 9:00:01
医疗大模型方案PPT全拆解:技术选型、RAG落地与汇报避坑指南
2026/10/8 8:54:58
静态时序分析(STA)实战指南:从timing violation定位到纳米工艺signoff
2026/10/8 0:04:11
Agent Skills 完全指南:原理、写法、安装与实战避坑
2026/10/8 0:04:11
Agent Skills 实战:从 Genkit 定义到 GKE 部署与排查
2026/10/8 0:04:11
Agent Skills 实战:从设计到调试的完整指南
2026/10/8 5:02:14
Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化
2026/10/7 9:55:49
多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系
2026/10/7 14:02:03
hindsight:面向LLM应用的事后可观测性工程实践
2026/10/8 4:30:43
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/8 2:46:15
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/8 4:32:33
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)