文件
paintfcp-fxplug/docs/analysis/短脸与下颌骨分析.md

4.6 KiB

短脸与下颌骨局部变形

本次将短脸与下颌骨从包围框近似场替换为目标产物中恢复的76点局部场。几何实现在PGFaceProcessor.m;PGBeautyRenderer.m负责外观,不是这次位置问题的修改点。

证据是目标ARM64二进制的只读CPU汇编、常量字节与已有Apple metal-objdump AIR。未运行原版APP或shader,未操作Motion/FCP。CPU证据见rea-jaw-short.json,带原始行号的GPU IR见short-jaw-air.txt,推导及来源摘要见short-jaw-report.json。

确认的规则

两项共用像素尺寸增益:

gain = clamp(280 / max(|(P75-P59)*imageSize|, 2*|(P67-(P74+P60)/2)*imageSize|, 1), 1, 2.25)。

距离为UV时,点与采样坐标统一采用全图归一化、Y向下;像素增益另用实际渲染宽高计算。产品内部76点采用Y向上,因此在同一个kernel中统一转换,未改宿主图像方向。

下颌骨按顺序使用六组(origin, radiusNeighbour, directionAnchor):

(72,71,29), (62,63,29), (71,70,29), (63,64,29), (70,71,29), (64,63,29)。

半径是前两点的相邻轮廓距离,方向是P29-origin。每步令weight=clamp(1-|q-origin|/radius,0,1),再依次更新q=clamp(q-direction*ratio*weight,0,1)。ratio=clamp(jaw,0,1)*0.05*gain。不能把半径替换为到嘴锚点的距离,也不能将六步合并为在同一原始坐标上求和。

短脸使用P62...P72构成的11边闭合下半脸区域。内部权重为1;外部权重按到最近线段的UV距离线性下降,在距离达到|P46-P48|时为0。位移轴为P46-P48(公开Vision的鼻梁点区域),ratio=clamp(short,-1,1)*0.25*gain,采样更新q=clamp(q-axis*ratio*weight,0,1)。正值的可见运动沿鼻梁方向收短,负值延长。半径不超过0.0001时跳过;线段投影的平方长度门限为0.000001。

CPU字节证据ID:ev_d1b8a49fc62e384710bac234967c3e8cbf7c5127081c9b2c6f6a0bbd80b80967。0x10005f9a8的double值为0.05;0x10005f9e0为0.25,0x10005f9d0和0x10005f9f0分别是短脸下限-1与缩放后下限-0.25。汇编ID:ev_8bc31392c07788d2482546121297c3f177d527282275ef21fd3e5edef9921544。结构字段xiaegu偏移12、duanlian偏移24,结合CPU写入与AIR读取顺序确认映射。

产品改动及边界

移除旧jaw*0.20*jawBand和-shortFace*0.16*lower。保留瘦脸17步、下巴3步的点位、系数和数学,新的局部顺序为jaw6 → chin3 → short polygon,仍在同一个CIWarpKernel内更新采样坐标,对每张输入图像或蒙版,每张脸仅进行一次重采样。图像、磨皮/肤色/牙齿/眼睛四张蒙版调用同一变形路径。没有完整合法76点时,这四项恢复算法安全直通;旧记录、其他参数和离线归档继续可读。

原版完整顺序为thin → narrow → V → jaw → cheek → chin → short → small-head → eyes。产品其余五项仍采用原有近似body/眼睛场:body先于jaw,故组合全链不宣称原版等价。原版CPU另接受共同形变强度;本产品该乘数固定为1,未映射到任何用户参数。PGAmount/s.amount仅表示磨皮强度,不参与thin/chin/jaw/short比例;四项共用同一像素尺寸gain。用户分别调节各项脸型值,最终PGMix由宿主适配器独立混合总输出。没有新增共同形变强度控制,以保持磨皮、美白和脸型卡片各自的含义。这里没有证实或添加3D姿态识别、yaw衰减或五官恢复锁定。

旧算法与原版不同是确定事实;单凭静态代码,不能替某张已安装宿主画面的“太阳穴变化”断言唯一原因。下述位置验证针对真实PNG,宿主适配和原生交互由父任务验收。

验证

scripts/test.sh:Beauty49、Face116、Slim796,共961项通过。旧394项thin/chin测试保留;新增独立double oracle从上述AIR规则写成,比较实际GPU坐标场,最大UV误差1.09828022e-05。覆盖非零extent、横竖画幅、侧脸投影与roll、正负短脸、小脸增益上限、相邻轮廓半径反例、组合顺序、缺失/非法76点和四张蒙版一致性。

ASan专项以NASA公开肖像及本地用户正面/侧脸帧运行:886项通过,无ASan诊断。独立CGImage Vision请求对照了瞳孔、嘴唇、鼻梁和上下轮廓索引,防止与生产CIImage路径共用一次Y翻转假设。实际GPU采样场确认下半脸有响应,处于支持域外的瞳孔和上部轮廓位置不响应。

用户帧、完整坐标和测试构建只留在忽略的build/目录,不进入证据文件。上述不代表原版逐像素一致,也未替代新版本Motion/FCP原生验收;本次未构建APP、安装或提交。