【Unity Shaders】抖音变身漫画 2
此篇文章只讨论图像处理部分,AI换脸暂不讨论。上图左边手机拍摄效果,右图是自己通过算法实现。
不同角度和亮度,不同参数的效果对比。
提亮图像
由于不同手机或图片的亮度信息不同,这里咱们先加了亮度调整,但是又不能平均加亮,这样会导至图片丢失很多细节,所以选择非线性提亮。
for(int i = 0; i < _Light; i++)
{col = pow(col, (1 - col/3.0));
}
非线性提亮方法有很多,大家下载工程后可自行发挥。
减少图像般色级别
提取象素明度信息,以明度为附加参数,减少色阶
fixed4 col = tex2D(_MainTex, i.uv);
fixed lum = luminance(col);
col.rgb = floor((col.rgb * _quantizationLevels) + lum) / _quantizationLevels;
边缘提取
使用Sobel算子提取信息,拿到当前象素周围9个象素UV,然后采样得到象素信息,卷积拿到边缘信息。最后与边缘阀值比较,当前象素是否为边缘处理。
float bottomLeftIntensity = tex2D(_MainTex, i.bLR.xy).r;
float bottomRightIntensity = tex2D(_MainTex, i.bLR.zw).r;
float topLeftIntensity = tex2D(_MainTex, i.tLR.xy).r;
float topRightIntensity = tex2D(_MainTex, i.tLR.zw).r;
float leftIntensity = tex2D(_MainTex, i.leftRight.xy).r;
float rightIntensity = tex2D(_MainTex, i.leftRight.zw).r;
float topIntensity = tex2D(_MainTex, i.topBottom.xy).r;
float bottomIntensity = tex2D(_MainTex, i.topBottom.zw).r;
float h = -topLeftIntensity - 2.0 * topIntensity - topRightIntensity + bottomLeftIntensity + 2.0 * bottomIntensity + bottomRightIntensity;
float v = -bottomLeftIntensity - 2.0 * leftIntensity - topLeftIntensity + bottomRightIntensity + 2.0 * rightIntensity + topRightIntensity;
float mag = length(float2(h, v));
float thresholdTest = 1.0 - step(_threshold, mag);
图像混合
边缘信息后与减色阶后的图像混合得到最终颜色,漫画脸的颜色是固定的偏暖黄色,所以这里还要加一个颜色叠加,让最后的颜色看起来和脸部是相近色。
float3 finalCol = col * thresholdTest;
finalCol = you * finalCol;
finalCol = 1 - (1 - finalCol) * (1 - _Color.rgb);
return float4(finalCol, 1);
C#代码部分
这个算法共两个Pass,提亮图像为一个Pass,减少色阶+边缘提取+图像混合为一个Pass,所以我们要先生成一个RenderTexture用来存提亮后的图像,然后以在这个图像上做相应处理。
void OnRenderImage(RenderTexture src, RenderTexture dest)
{if (material != null){material.SetFloat("_quantizationLevels", quantizationLevels);material.SetFloat("_threshold", threshold);material.SetColor("_Color", col);material.SetFloat("_radius", radius);material.SetFloat("_Light", lighten);
RenderTexture buffer0 = RenderTexture.GetTemporary(src.width, src.height, 0);buffer0.filterMode = FilterMode.Bilinear;Graphics.Blit(src, buffer0, material, 0);
Graphics.Blit(buffer0, dest, material, 1);RenderTexture.ReleaseTemporary(buffer0);}else{Graphics.Blit(src, dest);}
}
工程代码 加 微信号:ITComputerGraph
更多精彩内容,关注公众号《IT木子李》
【Unity Shaders】抖音变身漫画 2相关推荐
- 【Unity Shaders】抖音变身漫画1
先来看一下手机拍出来的效果,我们发现有一张人像变成了卡通漫画脸,其它的只是做了一些图像处理. 你可以再拍几张看一下,会发现千篇一律的大眼.小嘴有没有.你想的没错,这个是AI换脸技术,抖音特效里有很多了 ...
- 【Unity Shaders】Lighting Models —— 灯型号Lit Sphere
考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同一时候会加上一点个人理解或拓展. 这里是本书全部的插图.这里是本书所需的代码和资源(当然你 ...
- 【Unity Shaders】Mobile Shader Adjustment —— 为手机定制Shader
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- 我赢助手详解:抖音变现目前流行的是七种方式之直播变现和Ip变现
抖音变现目前流行的是七种方式,电商卖货.广告营销.内容付费.品牌导流.直播变现.IP变现.社群营销. 今天我们来说一说直播变现模式.直播变现,他有两种模式: 第一种就是直接在直播中去带货,然后就转化. ...
- 短视频运营详解:抖音变现目前流行的是七种方式之一电商卖货
短视频运营详解:抖音变现目前流行的是七种方式之电商卖货 抖音变现目前流行的是七种方式,电商卖货.广告营销.内容付费.品牌导流.直播变现.IP变现.社群营销. 我们分别来说一下:权威的三方报告提到过,抖 ...
- 【Unity Shaders】最简单的顶点/片元着色器3
微信号:ITComputerGraph 更多精彩内容,关注公众号<IT木子李> Shader "Unity Shaders/Simple Shader3" {SubSh ...
- 【Unity Shaders】Reflecting Your World —— Unity3D中的法线贴图和反射
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- 【Unity Shaders】游戏性和画面特效——创建一个夜视效果的画面特效
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- 独家揭秘!抖音爆款漫画变身特效的背后技术
记者 | 夕颜 来源 | CSDN(ID:CSDNnews) 动漫伴随着我们大部分人的青春,很多人悄咪咪地都有一个动漫梦,如果有一天能变身成为漫画中的人,感觉一定很奇妙吧? 还真就有人用技术手段帮我们 ...
最新文章
- LeetCode-剑指 Offer 04. 二维数组中的查找
- 保存tensorboard的损失曲线为图片
- Spring Boot开发框架优点诠释
- ROS笔记(18) Gazebo仿真
- 查看邮箱号是否存在_腾讯企业邮箱--新版本
- 2011最赚钱的行业和公司排行榜(verified 版本)
- Mac 抓包工具wireshark使用
- 分享:EditText默认不弹出软件键盘
- fluidsim元件库下载_模块七 FluidSIM软件应用
- php加ajax,PHP – AJAX 与 PHP | 菜鸟教程
- Python调用Matplotlib绘制分布点图
- 三菱运动控制电子凸轮应用 三菱Q173系列的电子凸轮使用
- 哈工大C语言程序设计精髓第十三周
- spark.jars.packages使用镜像源加速
- (2)ubuntu 中安装epics 的额外插件---asyn 以及 streamdevice
- 华为首个芯片工厂封顶!
- ADB屏蔽知乎视频答案
- Python中随机数的使用
- 【Linux项目】 --P2P下载器的详细介绍
- PTA L1-062 幸运彩票 C++实现
热门文章
- 架构师的职责、核心能力、能力修炼手册
- maven官网应该下载binary还是sources
- wps打开两个文档用两个窗口独立显示
- 对象遍历php,PHP对象的遍历
- 儿童护目台灯哪种好用?几款真的保护视力的台灯品牌推荐
- java中遍历集合_java中遍历ArrayList集合的四种方式
- mysql中如何大量删除数据_mysql批量删除大量数据的方法
- 2018河南对口升学计算机专业试题,河南省2018年计算机类基础课对口升学考试题...
- 单片机蓝牙模块与手机蓝牙通信(6)小结
- 51单片机实战教程(一 数据类型别名定义)