文件
paintfcp-fxplug/docs/analysis/新版磨皮参数迁移.md
T

4.9 KiB
原始文件 Blame 文件历史

2.4.0 面板参数迁移

2026-10-22(Asia/Shanghai)。用户通过截图纠正原需求:迁移新版面板参数,并非新增身体瘦身。此前瘦身目标核对保留为历史调查;本次继续工作使用 codex/new-beauty-controls,不再等待其他目标包。

参考与证据

目标:/Users/dayu/Downloads/MSE18V2.app,2.4.0 / 20260724150000;插件通用二进制 SHA-256:577303e0de72e07feb576c882e82382b3f056b023a7e987d990ffb37f6b16109;arm64 切片:afc71d0d21fd3c1ca95ca745ddafcd729e36ad95f17d8638009f2e45d9b7e8df。分析使用 Ghidra 12.1.4 与只读 Mach-O 元数据/反汇编,原文件未改。

参考面板 目标字段/转换 本项目入口
磨皮程度 ID12 → midtoneDetail,直接 0–100% 保留 PGMidtone 12,调整名称
微细锐化 ID4 → sharpness,局部细节恢复 新 PGMicroDetail 77;原全局锐化 4 留在更多设置
五官保护 ID30 → featureProtectionRelease = 1 − UI;旧 bool 随 release 接近 1 而关闭 新 PGFeatureProtectionAmount 75,直接保护量;旧 bool 30 保留类型与读取
非肤色区保护 ID17 → highPassDetail = 1 − UI;新主路径用于肤色蒙版扩展 新 PGNonSkinProtection 76;原独立全局磨皮 17 留在更多设置
白牙、检测框预览、多人及脸型 截图中的这些项已经存在 保留;检测框名称调整、多人模式增加提示

两个新保护量默认为 100%,微细锐化默认为 0%。内部使用直接保护量,不直接复用参考包的反向 release 数值。

setFloatValue:parameterID:minValue:maxValue:(0x1000116d8)分别反转 17/30 的输入;Evidence:ev_1fb7d2361dabf814edd6f22d217265b63efa9af24739741772ad5f579e0c67e3。valuesForControlPanelValue: 返回相应原始字段;Evidence:ev_20da8abf4eb5101b0902627255c643a783b7a15337aa4a757820ab71616f33e7。显示格式 strength 是直接乘 100,只有 protectionInverse 格式自身反转;17/30 在绘制与交互同步时提前反转,不能把所有 strength 控制都解释为反向。格式函数汇编 Evidence:ev_8e2a143f81d173c7643ecee2f1dac4a02145edbf82f113c8a48271428baf747c。

目标原生处理入口 applySkinSmoothingToImage:…(0x1000358d8)把 params+0x50 用于非肤色参与,把 params+0x48 用于五官保护释放。Evidence:ev_34eb4fe26dbaed9fc37d664d9363db903339c1447b6cd7fdb1980dcd61e99572。可读 CI 内核字符串建立两个关键关系:肤色蒙版向白色线性扩展;保护蒙版与未保护蒙版按 release 线性混合。细节恢复使用原画与低频图的差,并受局部蒙版和亮度/纹理门控。字符串证据:ev_d02bfe8046953e9287bd46c5403e6585354a5aa6df782a775d6a6fd0d96f1d62。这里只记录公式和含义,不提交目标模型、metallib 或资源。

实施与兼容

本项目继续使用自研 Vision 几何蒙版与 Core Image 管线。新的平滑支持蒙版通过现有未保护/已保护覆盖率恢复五官衰减比例,再对非肤色区域扩展;两个控制独立于曝光/肤色蒙版。默认 100%/100% 直接沿用原覆盖路径。微细锐化在局部支持区域恢复亮度细节与少量色彩细节,可在磨皮量为零时独立使用。

原目标的语义蒙版、特征形状、纹理处理和复杂组合尚未全链对齐,因此本次是参数含义、连续控制和对应局部处理的迁移,不表示整个新版已逐像素复刻。旧版全局磨皮/全局锐化仍可通过更多设置使用,不与新保护项偷换含义;历史工程保留原强度。

PGBeautySettings v2 尾部增加三个 float,保留 v1 的 160 字节前缀。解码只接受 v1+160 字节或 v2+新完整长度;旧状态补中性默认值。PGInspectorState 仍使用 schema 1 数值字典,旧 bool 30 迁移到缺失的 75,新数值存在时优先采用新值。面板提交先保存权威对象 210,成功后再镜像旧 bool;每次拖动步进仍使用独立宿主 action。

模板继续发布原 210 对象与两项署名。新隐藏参数由插件注册和缺省值补齐,原 .moef 字节未改,无须覆盖用户模板。固定 Bundle ID、滤镜 UUID、安装路径及宣传资源不变。

验证

最终通过 1636 项:Beauty 57、Face 116、几何 796、宿主适配 ASan 341、OSC ASan 98、Inspector ASan 228(其中 1 项为可选离屏 PNG 输出)。新增检查包含保护量 0/50/100 的像素响应、非肤色保护只改变局部磨皮支持、微细锐化区域、颜色覆盖隔离、v1 状态迁移与错误长度拒绝、新滑杆归档/插值/输入/重置/旁路/主开关、松手前中间状态发布。离屏 AppKit 面板在多种宽度检查;原生宿主视觉验收需另记实际结果。

完整 REA 证据仅在忽略的 build/body-analysis/new-controls-evidence.json。本文保留目标身份、入口、公式与边界,恢复构建不依赖该本地调查目录。