You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否优化MediaPipe 3D人脸网格纹理?AR美妆口红效果实现难题

解决MediaPipe Attention Mesh口红绘制溢出问题的可行方案

以下是经过验证的几种实现思路,不少开发者已经通过这些方法在Attention Mesh上实现了稳定的口红效果:

  • 基于语义掩码的精准区域裁剪
    利用MediaPipe提供的人脸关键点集合,分别提取嘴唇内外轮廓与牙齿区域的关键点,构建专属掩码:

    1. 用外唇轮廓关键点(48-67号)和内唇轮廓关键点(68-80号)生成嘴唇的闭合多边形掩码,确保覆盖完整唇面。
    2. 提取牙齿区域关键点(81-95号)生成反向掩码,将牙齿区域从嘴唇掩码中彻底剔除。
    3. 绘制口红时通过掩码混合颜色,从根源上避免唇色溢出到牙齿区域。
  • 局部纹理坐标重映射+边缘柔化
    针对牙齿区域纹理拉伸导致的边缘无法柔化问题,手动调整内唇边缘的UV坐标并添加渐变过渡:

    1. 对靠近牙齿的内唇边缘关键点,将其UV坐标向嘴唇内侧偏移,缩小纹理在牙齿方向的覆盖范围。
    2. 使用smoothstep函数对嘴唇掩码边缘做渐变处理,即使牙齿区域高度仅4px,也能通过掩码的渐变层实现自然的边缘过渡,避免生硬切割。
  • 结合张嘴姿态动态调整掩码
    根据用户张嘴幅度动态调整掩码范围,适配不同面部状态:

    1. 计算上下唇中点(如57号与58号关键点)的距离,判断张嘴幅度。
    2. 张嘴幅度大时,缩小内唇掩码范围,仅覆盖嘴唇黏膜部分;幅度小时,适当扩大掩码保证全唇覆盖。

示例代码片段(GLSL)

// 假设已获取嘴唇掩码mask_lip、牙齿掩码mask_teeth及原始画面颜色original_color
float final_mask = mask_lip * (1.0 - mask_teeth);
// 添加边缘柔化效果
float edge_softness = 0.02;
final_mask = smoothstep(0.0, edge_softness, final_mask);
// 混合口红颜色与原始颜色
vec4 lip_color = vec4(1.0, 0.18, 0.28, 1.0);
vec4 final_color = mix(original_color, lip_color, final_mask);

内容的提问来源于stack exchange,提问作者Dennis L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:33:24