Graphite 2024 年第一季度开发进展全解析网格吸附、程序化散布节点与矢量编辑能力升级【免费下载链接】GraphiteCommunity-built comprehensive 2D content creation appplication for graphic design, digital art, and interactive real-time motion graphics powered by a node-based procedural graphics engine项目地址: https://gitcode.com/GitHub_Trending/gr/GraphiteGraphite 是一款基于节点化程序化生成引擎的 2D 矢量图形编辑器本篇技术报告聚焦其在 2024 年 Q11 月至 3 月的里程碑式更新全新的网格覆盖层与形状吸附系统、Copy to Points与Poisson-Disk Points等程序化散布节点、Morph与Solidify Stroke节点以及钢笔/路径/自由手绘工具的精细化改造。读完本文你将掌握这些特性的设计动机、使用方式与仓库内的源码实现位置并能直接复用Isometric Fountain等演示作品探索其效果。说明本文依据仓库内 website/content/blog/2024-05-09-graphite-progress-report-q1-2024.md 进度报告撰写并结合当前仓库源码位于editor/src与node-graph目录进行印证与延伸。文中涉及的演示作品源文件位于 demo-artwork 目录。背景从季度报告看 2024 年的 Graphite 开发节奏Graphite 自 2024 年起改为按季度发布开发进度报告用于总结新增功能与改进项。Q1 2024 报告发布于 5 月 9 日是该系列的第二篇前一篇为 2023 年度回顾。报告提到项目在这一阶段获得了大量新老贡献者的支持并通过 Google Summer of Code 2024 实习计划 吸引了学生参与。从仓库结构看Q1 的成果横跨两大核心代码库editor编辑器的消息系统、工具、叠加层与画布交互逻辑Rust WASM / 桌面node-graph基于节点的程序化生成引擎包括各类节点实现nodes/、核心类型库libraries/与编译器graph-craft/。Q1 最具代表性的两个新特性是**网格Grid与吸附Snapping**系统报告中展示的Isometric Fountain等轴喷泉演示作品正是对这两项能力的实战检验。新增特性详解Additions以下按功能板块逐一解析 Q1 新增的核心能力每个特性均给出仓库内的实现位置以便深入阅读。1. 画布网格覆盖层矩形与等轴网格Q1 引入了可自定义的矩形与等轴网格覆盖层相关 PR#1521为画布提供了精确布局的参照系。从源码看网格渲染与参数配置集中在 grid_overlays.rsgrid_overlay_rectangular/grid_overlay_rectangular_dot绘制矩形网格含点状变体grid_overlay_isometric/grid_overlay_isometric_dot绘制等轴网格需要y_axis_spacingY 轴间距与angle_a/angle_b两轴角度三个参数grid_overlay作为统一入口按GridType枚举Rectangular { spacing }与Isometric { y_axis_spacing, angle_a, angle_b }分发到具体绘制函数。网格类型在弹层popover中通过单选切换切换时参数会在两种类型间保持见overlay_options中on_update回调。等轴网格绘制时会调用GridSnapping::compute_isometric_multiplier计算随缩放级别document_ptz自适应的间距乘数确保网格在不同缩放比例下保持视觉稳定。使用建议矩形网格适合像素级对齐的 UI/图标设计等轴网格适合技术插图、等轴建筑与游戏场景素材绘制——Isometric Fountain演示作品即采用等轴风格。2. 全新吸附系统形状互相对齐 网格对齐与网格配套Q1 重构了吸附系统支持将形状与形状、形状与网格进行对齐相关 PR#1521、#1567、#1547、#1570、#1574。吸附实现位于 editor/src/messages/tool/common_functionality/snapping 模块采用多路吸附器snapper协作的架构grid_snapper.rs负责网格吸附提供free_snap自由吸附与constrained_snap受约束吸附如沿轴两个入口layer_snapper.rs负责图层/形状之间的对齐吸附alignment_snapper.rs、distribution_snapper.rs负责对齐与分布吸附snap_results.rs汇总各吸附器的结果。各吸附器将候选点SnapCandidatePoint与约束SnapConstraint输入计算后写入SnapResults由上层工具统一取用。这套架构使得钢笔、路径、形状、选择等工具都能复用同一套吸附逻辑。使用建议绘制工程图、图标或需要精确对齐的插图时开启吸附绘制自由线条时建议临时关闭避免锚点被强制吸附到网格。3.Copy to Points节点规模与旋转的随机化散布Copy to Points节点可将任意内容图形、矢量、字符串、栅格、颜色、渐变等复制到一组点上Q1 为其新增了带偏置bias的随机规模与随机旋转能力相关 PR#1540、#1541、#1592 等。节点定义位于 vector_nodes.rs其输入参数充分体现了随机化的精细程度参数类型/默认值作用pointsListVector散布的目标点集合可来自其他采样节点contentListGraphic/Vector/String/Raster/Color/Gradient要复制放置的内容random_scale_min/random_scale_maxMultiplier默认1范围0..2每个副本随机缩放的最小/最大值倍率random_scale_biasf64范围-50..50随机尺寸概率分布的偏置0 为均匀负数偏小尺寸正数偏大尺寸random_scale_seedSeedValue尺寸随机的随机种子random_rotationAngle范围0..360度每个副本的随机旋转角度范围random_rotation_seedSeedValue旋转随机的随机种子源码实现要点每个点独立使用StdRng::seed_from_u64生成尺度与旋转随机数流同一种子可复现相同散布保证程序化设计的一致性偏置缩放采用对数加权公式scale_factor (1 - rand * horizontal_scale_factor).log2() / random_scale_bias其中horizontal_scale_factor 1 - 2^random_scale_bias——偏置为 0 时退化为线性均匀分布旋转在-random_rotation/2到random_rotation/2度之间均匀取值即参数值表示“顺时针到逆时针的总体范围”。典型用法将Poisson-Disk Points的采样点喂给points把一片树叶/石子/粒子素材喂给content即可生成自然散布的自然场景类似Procedural String Lights灯串作品的效果。4.Poisson-Disk Points节点形状内均匀随机采样Poisson-Disk Points节点用于在形状内部采样随机分布的点且任意两点间距不小于指定直径从而避免普通随机采样常见的聚簇现象相关 PR#1586、#1590、#1596。配套的Red Dress演示作品即用它生成裙摆上的图案散布。底层算法位于 poisson_disk.rs实现基于论文Poisson Disk Point Sets by Hierarchical Dart Throwing分层掷飞镖法其特点包括复杂度 O(n)时间与内存通过空间加速结构AccelerationGrid快速判断新点是否与已有点过近采用分层活跃列表ActiveListLevels先随机选中一个活跃方格“掷飞镖”若飞镖落点与已有泊松点冲突则将该方格细分为 4 个子方格继续尝试直到达到最深细分层级DEEPEST_SUBDIVISION_LEVEL_BEFORE_DISCARDING 8后丢弃点是否落在形状内部由回调point_in_shape_checker判定因此采样严格限制在矢量形状内poisson_disk_sample接收offset、width、height、diameter最小间距与随机数发生器rng返回VecDVec2点集。典型用法该节点通常与Copy to Points串联构成“形状内均匀散布素材”的标准程序化流程也适用于粒子、纹理点阵、装饰图案等生成场景。5.Morph节点矢量形状的渐变动画Morph节点用于在两个矢量形状之间进行 tween补间生成平滑过渡的中间形态相关 PR#1576 中可以看到Morph 在计算中点形态时会保留ATTR_APPEARANCE外观属性确保过渡过程中填充/描边颜色保持不变源码注释明确说明 “Morph should keep the appearance at the midpoint”。这使 Morph 不仅能做几何变形还能用于制作形状切换动画的关键帧。典型用法在动画场景中将两个关键帧形状接入 Morph再配合动画相关节点驱动补间进度即可得到矢量形状渐变动画。6.Solidify Stroke节点描边转填充Solidify Stroke节点可将描边stroke转换为填充形状便于后续布尔运算、路径编辑或应用其他仅作用于填充的处理相关 PR#1650说明它“changes how many vector items its content holds”即会改变其内容承载的矢量项数量。转换后得到的填充路径可用Path工具继续编辑也可配合Morph等节点参与程序化变形。7. 节点图 UI 与工作流改进节点图界面优化#1564、#1568图类型错误来源可视化#1577当节点图存在类型错误时直观标出是哪个节点引发了错误大幅缩短排查时间节点图框选#1616支持在节点图中拖出矩形框批量选择节点拖拽节点仅沿单轴移动时回弹的问题修复见 Fixes 中的 #1619。8. 画布与文档操作文档倾斜tilting改进与复位优化了画布倾斜操作并支持一键复位倾斜自动保存#1580文档每 30 秒自动保存一次减少意外丢失风险自动平移auto-panning#1625、#1652、#1682、#1690使用交互工具绘图时当指针移出视口边缘画布自动跟随平移支持连续绘制长线条SVG 导入#1579、#1656支持导入 SVG 矢量文件进一步完善互操作性。9. 工具与交互细节恢复 Select 工具丢失的功能#1583修复此前代码改动导致的选择工具功能回退钢笔工具逐点撤销#1587、#1597绘制过程中可撤销单个锚点而不会清空整个尚未完成的路径自由手绘工具扩展开放路径端点#1594、#1623可从开放路径的任一端点继续接续绘制路径工具删除锚点断开闭合形状#1593删除而非溶解路径上的点可将闭合形状断开为开放路径路径工具滑动插入锚点#1581在路径段上滑动到目标位置即可插入新锚点路径工具共线手柄锁定复选框勾选后锁定锚点两柄保持共线便于绘制平滑曲线菜单列表搜索#1499在菜单列表中直接输入即可过滤搜索项多个工具的动态输入提示改进Alpha 3 发布系列2024 年 2 月启动 Alpha 3 版本线。修复项盘点FixesQ1 修复了大量影响稳定性与体验的问题按类别归纳如下节点与数据正确性Sample Points节点性能问题与开放路径 bug#1542、#1546部分数值节点数据与其他数据不兼容#1543、#1618非填充形状的Fill节点丢失纯色字段#1572Circular Repeat节点无输入连接时崩溃#1571类型推断哈希表内存泄漏#1566图像缓存失效导致性能问题#1595。路径与图层编辑无法选中倒置负缩放图层#1560路径工具锚点坐标使用了错误的坐标系#1626路径工具在视口平移后拖动锚点出现偏移#1693图层面板分组导致意外的顺序重排与命名丢失#1627、#1645、#1672、#1678、#1637取消分组/删除组后遗留孤儿子图层#1655画板删除时连带删除其子作品#1651复制粘贴的图层未保留隐藏/可见状态#1698已选中隐藏图层仍可编辑#1697多选图层时缩放微调nudge行为错误#1699。历史记录与输入拖拽输入控件每帧产生大量历史步骤#1584、#1598多处多余的撤销/重做历史步骤#1660、#1668、#1675部分工具缺少右键/Esc 取消交互#1658、#1664、#1666。渲染与平台Safari 下浮动菜单的渲染 bugWindows 用户每次渲染重复三次的性能问题叠加层未与像素网格对齐导致的难看抗锯齿#1603粘贴图片时放置位置错误多边形工具绘制的星形/凸多边形带有不期望的倾斜#1640下拉菜单无法用方向键键盘导航#1630、#1649工具选项修改后需再次使用才生效#1646快捷键修饰键在 UI 中的显示顺序错误切换标签页到另一文档时节点图未更新#1691。内部重构与工程化InternalQ1 在架构层面的投入同样可观若干大规模重构与代码清理#1565、#1582、#1620、#1695、#1708矢量格式属性化重构#1624 中丰富的属性定义一脉相承为后续数据兼容与扩展奠定基础预配置开发容器dev containersflake.nix 与相关配置支持一键搭建容器化开发环境降低新贡献者的上手门槛。实践建议如何亲手复现 Q1 特性如果你希望亲自体验上述特性推荐以下路径打开演示作品仓库 demo-artwork 目录下存放了多份.graphite演示文件其中 isometric-fountain.graphite 展示了网格与吸附在等轴场景中的运用red-dress.graphite 展示了 Poisson-Disk 采样散布效果procedural-string-lights.graphite 则串联了Copy to Points等程序化节点构建并运行编辑器仓库根目录 README.md 提供了完整的构建指引支持 WebWASM与桌面端对于首次接触的开发者可优先使用预配置的容器化开发环境快速启动阅读关键源码网格绘制见 grid_overlays.rs吸附见 snapping 模块散布节点见 vector_nodes.rsPoisson 采样算法见 poisson_disk.rs跟随路线图项目在 features 页 维护 2024 年及以后的目标路线图可了解这些特性的后续演进方向。结语Q1 2024 的更新清晰地展现了 Graphite 的两条主线一方面通过网格、吸附与路径编辑的精细化打磨让传统矢量绘制工作流更精确、更顺手另一方面通过Copy to Points、Poisson-Disk Points、Morph、Solidify Stroke等节点持续强化程序化生成能力使“节点化、非破坏性”的理念在真实创作中得到落地。如果你对程序化矢量设计或 Rust 图形引擎开发感兴趣Q1 的这些成果及其源码是很好的学习样本。【免费下载链接】GraphiteCommunity-built comprehensive 2D content creation appplication for graphic design, digital art, and interactive real-time motion graphics powered by a node-based procedural graphics engine项目地址: https://gitcode.com/GitHub_Trending/gr/Graphite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考