加载中......
输入验证码,即可复制
微信扫码下载好向圈APP, 登陆后即可进入消息页面查看验证码
只需要3秒时间
视频类APP没有美颜功能大概没人会用吧?

鉴于此,有点心血来潮,打算用Unity实现简单的美颜。

真正的商业级美颜算法是很复杂的,经过无数次打磨才成型,包括磨皮、美白、瘦脸、大眼等等细节,我这里只是用Unity3D的后处理技术做个简单的磨皮、美白。

首先,美颜一般针对的是脸部区域,我们得先识别出脸部区域。

完整的人脸识别算法,这在Unity3D中实现起来有点困难(不借助SDK),因此我们需要换个思路,仔细想想,我们也没必要进行人脸识别,我们大可识别出肤色区域,然后在肤色区域进行美颜。

「Shader」 Unity3D中实现美颜-1.jpg

SkinCheck.shader-Pass 1

效果图[脸又圆了,不想放我的大脸]

「Shader」 Unity3D中实现美颜-2.jpg

爪子

最终我们发现,肤色识别算法可以大体识别出肤色区域,但是会有噪点(环境中类似肤色的点被误识别),我们可以继续优化,去除部分噪点,也可以放任不管,毕竟这只是一个Mask, 环境中有少量的点被美颜了也没事。

接下来是磨皮,磨皮的本质是模糊算法,以祛痘祛斑。

模糊算法有很多,我这里主要选择的是双边滤波算法(一种保边算法),高斯模糊作为辅助,相较于一般模糊算法,双边滤波可以在降噪平滑的同时保留边缘的一些细节,至于具体的原理,请同学们自行搜索(懒Orz)

我们直接上核心源码,是不是简单粗暴?

「Shader」 Unity3D中实现美颜-3.jpg

双边滤波算法-BilateralFilters.shader

「Shader」 Unity3D中实现美颜-4.jpg

高斯模糊算法-GaussBlur.shader

再来,美白提亮算法

我也已经很贴心地帮你们把原理说明找到了

「Shader」 Unity3D中实现美颜-5.jpg

美白提亮

核心源码技术点就是这些,我们只需要将这些整合一下,即可形成一个完整的美颜功能。

后处理函数入口

「Shader」 Unity3D中实现美颜-6.jpg

OnRenderImage


「Shader」 Unity3D中实现美颜-7.jpg

beauty.shader

搞定收工!
程序员圈
14096 查看 0 0 反对

说说我的看法高级模式

您需要登录后才可以回帖 登录|立即注册

还没人评论此主题哦

相关阅读