news 2026/10/8 14:23:21

Lorien 版本演进深度解析:从 v0.1.0 到 v0.7.0 的无限画布应用迭代全记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Lorien 版本演进深度解析:从 v0.1.0 到 v0.7.0 的无限画布应用迭代全记录
  • 桌面应用
  • 图形学

【免费下载链接】Lorien

Infinite canvas drawing/whiteboarding app for Windows, Linux and macOS. Made with Godot.

项目地址:https://gitcode.com/gh_mirrors/lo/Lorien
点击查看免费下载

本文以 Lorien 官方 docs/changelog.md 为核心骨架,结合仓库内 GDScript 源码、Godot 工程配置与 docs/manuals/manual_v0.7.0.md 使用手册,完整梳理这款基于 Godot 引擎的无限画布绘图/白板应用从首版到 v0.7.0 的功能演进、关键架构决策与破坏性变更。读完本文,你将掌握 Lorien 各版本的核心能力边界、画笔与橡皮擦的底层实现原理、设置项与快捷键系统的设计脉络,以及 Godot 3 到 Godot 4 迁移过程中的工程取舍。

一、Changelog 概览:七个版本的迭代主线

Lorien 的完整开发历程横跨 2021 年 5 月至 2024 年底(v0.7.0),其变更记录遵循 Keep a Changelog 格式,按Added / Fixed / Changed / Breaking Changes分类。以下时间线可纵览全局:

版本发布日期引擎版本里程碑主题
[0.1.0]2021-05-23—首版:无限画布、无限撤销、极小存档
[0.2.0]2021-06-03GLES2选择工具、移动/删除笔画、颜色拾取器、PNG 导出
[0.3.0]2021-07-23GLES3无限网格、复制粘贴、命令行打开、性能优化
[0.4.0]2021-10-10Godot 3.3.4专注模式、色板系统、矩形工具、F12 彩蛋
[0.5.0]2022-06-12Godot 3.4.4SuperEraser 破坏性变更、SVG 导出、圆形工具、全屏
[0.6.0]2023-11-06Godot 3.5.3可重绑定快捷键、画笔倒置即橡皮、点状网格、简体/繁体中文
[0.7.0]—Godot 4.3笔刷稳定器、速度感知线宽、原生文件对话框、UI 大改版

从演进脉络看,Lorien 的开发路径非常清晰:先夯实基础画布能力(v0.1–v0.2),再补齐工具与文件管理(v0.3–v0.4),随后引入破坏性更强的矢量橡皮擦与导出能力(v0.5),最后转向可用性、快捷键与性能(v0.6–v0.7)。其中 v0.5.0 与 v0.7.0 分别带来了存档兼容性与快捷键格式两类破坏性变更,是升级时必须重点关注的版本。

二、v0.1.0:无限画布的基因起点

首版奠定了 Lorien 的全部核心基因,后续所有版本都是在这套架构上的增量演进:

  • 无限画布(Infinite canvas):对应源码中的 lorien/InfiniteCanvas/InfiniteCanvas.gd 与 lorien/InfiniteCanvas/PanZoomCamera.gd。相机系统支持无限平移与缩放,是后续"(几乎)无限缩放"能力的源头。
  • 无限撤销/重做(Infinite undo/redo):依赖 Godot 内置的UndoRedo机制,在 lorien/ProjectManager/Project.gd 中维护,撤销重做粒度细化到单个笔刷笔画(见后文橡皮擦的源码佐证)。
  • 极小存档文件(Extremely small savefiles):这是 Lorien 区别于位图绘图软件(Krita/GIMP/Photoshop)的本质——它不以像素存储画面,而是将笔画保存为点集,运行时再渲染,原理类似 SVG。存档格式规范详见 docs/file_format.md。
  • 多文档同时工作:对应 lorien/ProjectManager/ProjectManager.gd,从 v0.3 起与文件标签页机制配合。
  • 三件初始工具:自由画笔、橡皮擦、直线工具,分布在 lorien/InfiniteCanvas/Tools/ 目录下。
  • 颜色拾取器与画布背景色:v0.1 允许通过易用的颜色拾取器为笔画和画布背景设置不同颜色(该能力在 v0.4 被色板系统取代、v0.6 将画布背景色迁入设置面板)。
  • 数位板支持与压感:设计目标明确面向 Wacom 等数位板,支持压力敏感度(压感管线细节见第五节)。
  • 三平台支持:Windows、Linux 与 macOS。

三、工具系统演进:从三件套到完整矢量工具集

v0.7.0 的手册 docs/manuals/manual_v0.7.0.md 列出了完整工具集:自由画笔、橡皮擦、直线、矩形、圆/椭圆、选择工具。它们在 changelog 中的登场顺序如下:

3.1 直线工具(v0.1)与 15° 吸附(v0.2)

v0.1 首发即包含直线工具;v0.2.0 新增"按住 Shift 以 15° 步进吸附";v0.3.0 又改进为"直线端点细分(首尾间插入更多点)以降低选中难度",对应源码 lorien/InfiniteCanvas/Tools/LineTool.gd。工具类均继承自 lorien/InfiniteCanvas/Tools/CanvasTool.gd 基类,统一实现tool_event(event)事件入口。

3.2 矩形工具(v0.4)与正方形约束(v0.7)

v0.4.0 引入矩形工具(lorien/InfiniteCanvas/Tools/RectangleTool.gd);v0.7.0 增强为按住 Shift 绘制完美正方形,与直线/圆工具的 Shift 约束逻辑形成一致的交互范式。

3.3 圆形/椭圆工具(v0.5)

v0.5.0 新增 Circle/Ellipse 工具(lorien/InfiniteCanvas/Tools/CircleTool.gd),默认绘制椭圆,按住 Shift 约束为完美圆形。

3.4 选择工具与批量编辑(v0.2 起持续增强)

  • v0.2.0:选择工具上线,可移动选中笔画、Delete 键删除、新增"选中笔画时修改颜色"的体验。
  • v0.3.0:支持CTRL+C/CTRL+V复制粘贴、CTRL+D一步复制;选择工具按住 Shift 可逐个取消选择独立笔画;选中判定规则改为"只要至少一个笔画点落入选择矩形即选中"。
  • v0.5.0:选中状态下更换画笔颜色会实时改变已选中笔画颜色;优化了大文档下的选择工具性能。
  • 实现细节可参考 lorien/InfiniteCanvas/Tools/SelectionTool.gd 与 lorien/InfiniteCanvas/Tools/SelectionRectangle.gd。

3.5 颜色拾取器工具的进退(v0.2 → v0.4)

v0.2.0 实现了画布颜色拾取工具(吸取画布上任一颜色);v0.4.0 引入色板系统后将其移除,同时移除默认笔画颜色设置——颜色管理从此统一收敛到色板。

四、橡皮擦的两次革命:从"伪橡皮"到 SuperEraser

橡皮擦是 Lorien 历史上最典型的架构决策案例,v0.5.0 的 Breaking Changes 章节给出了详细说明:

旧实现(v0.1–v0.4):传统橡皮擦"只是用背景色在笔画上画新笔画",制造出位图软件(GIMP/Photoshop)橡皮擦的视觉错觉。

v0.5.0 破坏性变更:全新SuperEraser以几何相交判定替代绘制覆盖——橡皮擦笔刷一旦与笔画相交,整条笔画即被删除。旧实现被完全移除。存档格式未变,但旧版本保存的橡皮擦笔画在加载时会被跳过,重新保存后永久丢失。changelog 明确警告:依赖旧橡皮擦笔画的用户不要升级,或升级前务必备份.lorien文件。

从源码 lorien/InfiniteCanvas/Tools/EraserTool.gd 可还原其实现原理:

  • 按下左键时先为所有笔画构建包围盒缓存(_update_bounding_boxes(),边距BOUNDING_BOX_MARGIN = 20.0);
  • 每一帧对屏幕内笔画(get_strokes_in_camera_frustrum())做线段-圆相交检测:将笔画按压力拆分为线段,叠加橡皮笔刷半径后用Geometry2D.segment_intersects_circle()判定,OVERLAP_THRESHOLD = 0.95略收紧判定;
  • 相交的笔画批量进入UndoRedo的单个 action("Erase Stroke"),保证整批擦除可一步撤销。

后续增强:v0.6.0 支持数位笔倒置自动切换橡皮模式;v0.7.0 修复了擦除单个点(dot)困难的体验问题。

五、画笔系统:压感、稳定器与速度感知线宽

v0.7.0 集中落地了画笔的三项核心升级,源码证据在 lorien/InfiniteCanvas/Tools/BrushTool.gd 与 lorien/BrushStroke/BrushStroke.gd:

  1. 笔刷稳定器/平滑(v0.7.0 Added):Settings.GENERAL_STABILIZER_STRENGTH(默认值见 lorien/Config.gd 的DEFAULT_STABILIZER_STRENGTH = 0.5)。当强度 ≥ 0.01 时,用最近三个采样点加新点做三次贝塞尔插值(Utils.cubic_bezier(p3, p2, p1, pos, t)),其中t = 0.5 + (1.0 - strength) * 0.5,即强度越高插值系数越保守、线条越平滑。

  2. 速度感知线宽(v0.7.0 Added):在原有压感基础上叠加速度维度。_current_velocity来自event.screen_velocity归一化后的长度;绘制时按速度对压力做衰减(_current_pressure -= min(velocity * 1.5, 0.33)),最终经pressure_curve.sample()采样(曲线资源见 lorien/InfiniteCanvas/default_pressure_curve.tres)得到该点压力。这解释了"快速划过线条更细、慢速更粗"的书写手感。

  3. 恒定笔画宽度开关(v0.7.0 Added):Settings.GENERAL_CONSTANT_PRESSURE(默认false),开启后禁用压感、始终以恒定笔宽绘制,适合不需要压感的场景。

笔画的底层数据结构在 lorien/BrushStroke/BrushStroke.gd:

  • 每笔画持有平行数组points: Array[Vector2]与pressures: Array[float],渲染时通过Line2D+width_curve逐点映射宽度;
  • 压力值会被平滑与钳制(MAX_PRESSURE_DIFF = 0.05防止 Linux 上的压力尖峰,MIN/MAX_PRESSURE_VALUE = 0.1/1.0);
  • 单笔画点上限MAX_POINTS = 1000——这是 GodotLine2D/Polygon索引数量限制的工程妥协:笔画超长时自动结束当前笔画并另起新笔画(BrushTool.gd中points.size() >= BrushStroke.MAX_POINTS分支),从根上修复了 v0.3.0 记录的"长笔画消失"问题(changelog 中引用 issue #26);
  • v0.3.0 将压力灵敏度默认值从 1.0 提升到 1.5(当前 lorien/Config.gd 中DEFAULT_PRESSURE_SENSITIVITY := 1.0,可在设置中调整);v0.7.0 将最大线宽从 50 降至32,v0.5.0 起默认圆头笔帽(DEFAULT_BRUSH_ROUNDING = ROUNDED)。

点击一次即画出"点"(dot)的行为在 v0.7.0 得到修复:_is_stroke_a_dot()综合点数量与累计距离(DOT_MAX_DISTANCE_THRESHOLD = 6.0)判定单击,并通过_draw_point()写入三个微小偏移点保证可见渲染。

六、导出能力:从 PNG 到 SVG 的取舍

  • v0.2.0:实现整张画布 PNG 导出。
  • v0.5.0:新增基础 SVG 导出器,并移除粗糙的 PNG 导出("Removed rudimentary png export in favor of the new SVG exporter")——这一取舍与"笔画即点集"的矢量内核完全自洽。
  • v0.7.0 Fixed:修复"使用移动工具移动过的笔画导出 SVG 后停留在原位置"的 bug。

导出实现见 lorien/Misc/SvgExporter.gd:以所有笔画的包围盒并集计算画布尺寸(含EDGE_MARGIN = 0.025边距),输出<svg>+ 背景<rect>+ 每条笔画的<polyline>,并统计导出耗时。注意当前实现采用固定stroke-width:2,changelog 与源码 TODO 均承认"笔画宽度/压力数据尚未写入 SVG",这是已知限制。

七、画布交互与相机:缩放、平移与网格

  • v0.3.0:引入无限网格;设置菜单新增前台/后台 FPS 设定、线帽(flat/round)与压力灵敏度倍率选项;禁用 VSync 并将固定目标 FPS 设为144(低刷新率屏幕手感更顺滑);窗口失焦时降为10 FPS以降低负载(这两个默认值至今保留在 lorien/Config.gd:DEFAULT_FOREGROUND_FPS := 144、DEFAULT_BACKGROUND_FPS := 10);切换 GLES3 后端;引入最小窗口尺寸防缩为 0。
  • v0.5.0:CTRL+MMB缩放(数位板用户友好);SPACE键按当前鼠标位置居中画布;窗口尺寸跨重启保存恢复。
  • v0.6.0:网格新增点状图案,可在设置中切换回直线或完全关闭(Settings.APPEARANCE_GRID_PATTERN,默认DOTS,网格尺寸默认 25.0);网格开关按钮从工具栏移入设置。
  • v0.7.0:SPACE键 + 移动鼠标的替代平移方式;缩放至鼠标光标精度优化。渲染设置常量在 lorien/Misc/Settings.gd 中以RENDERING_*、APPEARANCE_*前缀分组定义。

八、文件管理、标签页与命令行打开

  • v0.2.0:改进含未保存更改文件的关闭流程;About 对话框列出贡献者。
  • v0.3.0:菜单实现"打开/保存";新增"另存为";支持从文件系统拖拽打开文件;支持命令行参数打开文件及 Windows 的"打开方式"集成;修复切换标签页时相机位置与缩放被重置的问题;新开标签页使用设置中的默认画布色。
  • v0.5.0:自动记忆并在退出/启动时自动重开.lorien文件(对应 lorien/Misc/StatePersistence.gd)。
  • v0.7.0:原生文件对话框取代 Godot 自带对话框;文件标签支持响应式滚动与拖拽排序。

九、设置系统与快捷键:v0.6/v0.7 的破坏性变更

9.1 设置项全貌(源码级)

设置持久化由 lorien/Misc/Settings.gd 负责,写入user://settings_v4.cfg(路径常量见 lorien/Config.gd),分settings与keybindings两个节区。按前缀分组的完整配置键如下(均为 changelog 中对应能力的落点):

分组配置键默认值(lorien/Config.gd)
常规general_pressure_sensitvity1.0
常规general_constant_pressurefalse(v0.7 新增)
常规general_stabilizer_strength0.5(v0.7 新增)
常规general_default_brush_size10
常规general_languageen(切换即时生效,无需重启,v0.6)
常规general_tablet_driver平台相关(v0.7 新增)
外观appearance_theme/appearance_ui_scale_mode/appearance_ui_scaleAUTO / 1.0
外观appearance_grid_pattern/appearance_grid_sizeDOTS / 25.0(v0.6)
外观appearance_canvas_color#202124(v0.6 迁入,.lorien文件不再存储背景色)
渲染rendering_foreground_fps/rendering_background_fps144 / 10(v0.3)
渲染rendering_brush_roundingROUNDED(v0.3)

9.2 可重绑定快捷键(v0.6)与格式变更(v0.7)

v0.6.0 由贡献者实现可重绑定键盘快捷键,核心机制在 lorien/Misc/KeybindingsManager.gd:启动时遍历InputMap中所有非ui_/player_前缀的 action,用Settings.get_keybinding()覆盖默认事件,并通过rebind_action()写回InputMap;快捷键定义于 lorien/project.godot 的[input]节。

v0.7.0 Breaking Changes:keybindings 的存储格式发生变化,自定义过快捷键的用户升级后需要重新设置。同时 v0.7.0 新增默认退出快捷键CTRL+Q。

完整默认快捷键表可查阅 docs/manuals/manual_v0.7.0.md(如CTRL+S保存、CTRL+O打开、CTRL+ESVG 导出、CTRL+Z/Y撤销重做、TAB专注模式、F12彩蛋等),对应 lorien/project.godot 中shortcut_*与toggle_*系列 action。

十、v0.7.0 的 Godot 4 迁移与工程决策

v0.6.0 明确预告"这是 Godot 3 的最后一个大版本,接下来将移植到 Godot 4",v0.7.0 落地迁移。工程证据:

  • lorien/project.godot 中config/features=PackedStringArray("4.3"),渲染方法为gl_compatibility(延续了 v0.3 起 GLES3 与低端硬件兼容的折中路线);
  • run/low_processor_mode=true呼应 v0.7.0"空闲时自适应帧率降低 GPU/CPU 负载"(配合 lorien/Config.gd 的BACKGROUND_IDLE_TIME_THRESHOLD := 250ms 与后台 10 FPS 策略);
  • [audio] driver/driver="Dummy"印证 v0.7.0 的"禁用所有继承自 Godot 的音频功能";
  • pen_tablet/driver.windows="wintab"对应 v0.7.0 新增的"设置中更换数位板驱动"选项;
  • 迁移期修复了 macOS 模糊界面(v0.6)、隐现光标丢失、UI 自动缩放(尤其 Windows/macOS)等问题。

v0.7.0 还包含:UI 全面翻新、Windows 图标分辨率优化、新增乌克兰语与阿拉伯语翻译(v0.6 已加入简体/繁体中文,完整语言列表见 lorien/Assets/I18n/ 目录与 docs/i18n.md)。

十一、升级与兼容性注意事项(实操结论)

综合 changelog 的破坏性变更与已知限制,面向实际使用者给出结论:

  1. v0.5.0 起:旧存档中的橡皮擦笔画会被丢弃,升级前备份.lorien文件;
  2. v0.6.0 起:.lorien文件不再保存画布背景色(背景色由设置管理);语言切换无需重启;
  3. v0.7.0 起:自定义快捷键需重新配置;最大线宽上限为 32(旧设置中的更大值会受限);
  4. SVG 导出:当前为固定线宽(stroke-width:2),压力/宽度数据尚未写入,精确复刻笔触请以.lorien原生格式为准;
  5. 存档格式稳定性:README 明确提示项目仍为 WIP,存档格式未来可能变化。

结语

从 2021 年的首版到 Godot 4.3 时代的 v0.7.0,Lorien 的 changelog 完整记录了一个"点集渲染型"无限画布应用的成长轨迹:矢量内核决定了它必然走向 SuperEraser 与 SVG 导出,数位板定位推动了压感、稳定器与速度线宽的三重进化,而 v0.5/v0.7 的两次破坏性变更则展示了项目在可用性与格式自由之间的清醒取舍。对开发者而言,docs/changelog.md 是理解该项目设计决策的第一手史料;对用户而言,配合 docs/manuals/manual_v0.7.0.md 与 docs/file_format.md 即可完整掌握其能力边界。

  • 桌面应用
  • 图形学

【免费下载链接】Lorien

Infinite canvas drawing/whiteboarding app for Windows, Linux and macOS. Made with Godot.

项目地址:https://gitcode.com/gh_mirrors/lo/Lorien
点击查看免费下载
上一篇:拆解Windows窗口样式位:SRWE如何用复选框轻松开关标题栏、边框与菜单按钮
下一篇:如何用xmpp4cj管理联系人和在线状态:Roster与Presence完整实战指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 14:22:14

90DaysOfDevOps:Docker 网络与安全实战指南(Day 47)

文档/教程 【免费下载链接】90DaysOfDevOps This repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Pri…

作者头像 李华
网站建设 2026/10/8 14:20:45

【消息队列】如何选型?

初步介绍了Kafka、RabbitMQ、RocketMQ和ActiveMQ4种消息队列的优缺点&#xff0c;并进行了简单的对比。这个系列计划会更新5-6篇文章&#xff0c;前面介绍常用消息队列的初步原理&#xff0c;后面会选一种消息队列&#xff0c;重点介绍环境搭建和实战部分&#xff0c;文章内容大…

作者头像 李华
网站建设 2026/10/8 14:20:08

OpenMontage:用AI智能体驱动视频剪辑的开源实践

1. 当剪辑台变成对话窗口&#xff1a;OpenMontage 到底在解决什么问题第一次看到 OpenMontage 这个名字&#xff0c;我脑子里蹦出来的不是某个具体功能&#xff0c;而是一个很朴素的疑问&#xff1a;视频剪辑这件事&#xff0c;能不能像跟人说话一样完成&#xff1f;不是那种&q…

作者头像 李华
网站建设 2026/10/8 14:12:54

微信聊天记录导出与永久备份:WeChatMsg(留痕)免费一键教程

微信聊天记录导出与永久备份&#xff1a;WeChatMsg&#xff08;留痕&#xff09;免费一键教程 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.co…

作者头像 李华