Skip to content

P9-03 · .myb preset 映射调研

  • Phase / ID: P9-03
  • Depends on: P9-01、P9-02
  • Files: docs/design/decisions.mdpackages/core/src/brush/
  • Effort: L

Context

.myb 是 MyPaint 的笔刷预设格式。它不应直接污染 BrushPreset 的稳定字段;需要先做参数映射表与不支持项清单。

已落地(2026-07-01)parseMyPaintBrushPreset() 支持 JSON 风格 .myb 与简化 legacy line 格式,映射 radius / opaque / hardness / spacing / smudge 等核心字段到 BrushPreset 草案。

已落地(2026-07-06):site 的文件菜单提供「导入笔刷」入口,可把 MyPaint .myb 导入为 source: 'mypaint' 的自定义笔刷并进入现有笔刷库保存 / 云同步路径。SAI 完整笔刷预设不是开放稳定交换格式,当前只做明确错误提示,不承诺完整导入;后续若支持 SAI,优先从笔尖 / 纹理资源导入开始。

最小映射表

.myb settingBrushPreset 字段说明
radius_logarithmicsizesize = exp(value) * 2,再做安全 clamp
opaqueopacity / maxOpacity先映射基础不透明度
hardnesshardnessMyPaint 越大越硬,saier 当前字段按边缘软度使用,取 1 - hardness
dabs_per_actual_radiusspacing取倒数,映射为半径比例间距
smudgeengine / smudge大于阈值时映射为 smudge 引擎
smudge_lengthpersistence映射拖色桶记忆
pressure / speed mappings后续 MyPaintBrushEngineWasm当前只保留基础 preset 草案

Steps

  1. 收集 .myb 核心参数:radius、opaque、hardness、spacing、smudge、speed / pressure mapping。
  2. 建立 .myb → BrushPreset 的最小映射表。
  3. 标记不能映射或需要外部 engine 才能表达的字段。

Acceptance

  • [x] 有一份映射表说明哪些字段可进入现有 preset,哪些必须交给 MyPaintBrushEngineWasm
  • [x] 至少 3 个 .myb 样例能解析为 saier preset 草案。
  • [x] site 提供 .myb 导入入口,导入结果注册为可同步的自定义笔刷。
  • [x] SAI 完整预设导入有明确 unsupported 提示,避免误导成像素级兼容。

Out of scope

  • 追求 MyPaint 像素级一致。

Released under the MPL-2.0 License.