P9-03 · .myb preset 映射调研
- Phase / ID: P9-03
- Depends on: P9-01、P9-02
- Files:
docs/design/decisions.md、packages/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 setting | BrushPreset 字段 | 说明 |
|---|---|---|
radius_logarithmic | size | size = exp(value) * 2,再做安全 clamp |
opaque | opacity / maxOpacity | 先映射基础不透明度 |
hardness | hardness | MyPaint 越大越硬,saier 当前字段按边缘软度使用,取 1 - hardness |
dabs_per_actual_radius | spacing | 取倒数,映射为半径比例间距 |
smudge | engine / smudge | 大于阈值时映射为 smudge 引擎 |
smudge_length | persistence | 映射拖色桶记忆 |
| pressure / speed mappings | 后续 MyPaintBrushEngineWasm | 当前只保留基础 preset 草案 |
Steps
- 收集
.myb核心参数:radius、opaque、hardness、spacing、smudge、speed / pressure mapping。 - 建立
.myb → BrushPreset的最小映射表。 - 标记不能映射或需要外部 engine 才能表达的字段。
Acceptance
- [x] 有一份映射表说明哪些字段可进入现有 preset,哪些必须交给
MyPaintBrushEngineWasm。 - [x] 至少 3 个
.myb样例能解析为 saier preset 草案。 - [x] site 提供
.myb导入入口,导入结果注册为可同步的自定义笔刷。 - [x] SAI 完整预设导入有明确 unsupported 提示,避免误导成像素级兼容。
Out of scope
- 追求 MyPaint 像素级一致。