Unity3d 游戏中的实时降噪-对Square Enix文档的研究与实现
来源:互联网 发布:荧光文字配图美图软件 编辑:程序博客网 时间:2024/04/30 03:32
看到SE的技术文档关于降噪的决定研究一下,
本次试验场景:
文章中提到了3中主要滤波方法,最后一种方法又有三种方式
分别为Conventional geometry-aware filtering,Distribution-Aware Filtering,Specular Lobe-Aware Filtering and Upsampling
根据公式做了一些,自己弄得除噪方法不知道是否正确,虽然有效果= =;
博主的步骤:
1. 找出噪波(包括噪波与贴图上的细节)
2. 算出specular,diffuse的干扰
3. 此处方法众多:a.用别的像素代替噪波b.周围采样求平均值(会造成模糊)。。。。
此方法需要计算深度depth和normal,可通过获取_CameraDepthTexture和_CameraNormalsTexture获取,详细请点
W相当于对过滤正确性的判断,因为物体的边缘可能被当做噪波误判,产生边缘粗糙或者模糊
W权重公式
Si是像素i中屏幕空间点的位置
G为高斯函数
边缘清晰可见,因为是通过depth和normal判断的,所以没有噪波,也包括了diffuse等的细节,通过w我们可以减少对边缘的降噪
然后采样对灰度进行比较,如果当前点与采样点相差过多则为噪波,采样点数越多越准确,但是也有限度
结果如下(图片可点击放大查看)
t2为自定义参数
Ci为光滑分布
b函数为任意smoothing kernel
比如:
高斯滤波Gaussian filtering
各向异性滤波anisotropic filtering
总变分最小化Total Variation minimization
相邻滤波neighborhood filtering
NL-means algorithm
等等
这里博主使用高斯滤波
W结果如下
上图的结果没有开noise,但是这种方法的w是包含噪波的,所以不能用w来判断cut off,
此处的w是其第一种作用,也就是判断噪波,但是这种方法的输入参数β,可以调节对高光部分和阴影部分的过滤程度(可以看到在图中参数下specular处是全黑的,此时高光处时不会过滤的,采样点之间的差别为0),所以这种方法不需要cut off
SE文档中实现结果
W的结果如下
加入了对高光与暗部细节部分的判断,使得高光部分降噪效果良好
三种方法中效果最好的方法
结果如下
三种方法效果比对
本次试验场景:
文章中提到了3中主要滤波方法,最后一种方法又有三种方式
分别为Conventional geometry-aware filtering,Distribution-Aware Filtering,Specular Lobe-Aware Filtering and Upsampling
根据公式做了一些,自己弄得除噪方法不知道是否正确,虽然有效果= =;
博主的步骤:
1. 找出噪波(包括噪波与贴图上的细节)
2. 算出specular,diffuse的干扰
3. 此处方法众多:a.用别的像素代替噪波b.周围采样求平均值(会造成模糊)。。。。
Conventional geometry-aware filtering
基于最基本的高斯滤波,此方法需要计算深度depth和normal,可通过获取_CameraDepthTexture和_CameraNormalsTexture获取,详细请点
W相当于对过滤正确性的判断,因为物体的边缘可能被当做噪波误判,产生边缘粗糙或者模糊
W权重公式
float wk = Gaussian(GetDepth(i_) - GetDepth(j), _Sigma_z);
Si是像素i中屏幕空间点的位置
G为高斯函数
inlinefloat Gaussian(float x, float y){return _A * exp(-(((pow((x - _X0), 2)) / (2 * _Sigma_x *_Sigma_x)) +((pow((y - _Y0), 2)) / (2 * _Sigma_y *_Sigma_y))));}
边缘清晰可见,因为是通过depth和normal判断的,所以没有噪波,也包括了diffuse等的细节,通过w我们可以减少对边缘的降噪
然后采样对灰度进行比较,如果当前点与采样点相差过多则为噪波,采样点数越多越准确,但是也有限度
通过上图可明显发现w起的作用
结果如下(图片可点击放大查看)
放大结果
Distribution-Aware Filtering
对噪波进行判断并锐化,便于识别出噪波t2为自定义参数
Ci为光滑分布
b函数为任意smoothing kernel
比如:
高斯滤波Gaussian filtering
各向异性滤波anisotropic filtering
总变分最小化Total Variation minimization
相邻滤波neighborhood filtering
NL-means algorithm
等等
这里博主使用高斯滤波
W结果如下
上图的结果没有开noise,但是这种方法的w是包含噪波的,所以不能用w来判断cut off,
此处的w是其第一种作用,也就是判断噪波,但是这种方法的输入参数β,可以调节对高光部分和阴影部分的过滤程度(可以看到在图中参数下specular处是全黑的,此时高光处时不会过滤的,采样点之间的差别为0),所以这种方法不需要cut off
结果如下
SE文档中实现结果
Specular Lobe-Aware Filtering and Upsampling
对过滤的正确性判断加强,加上对高光的判断,免去对高光高亮处边缘的误判float ai = v * max(dot(N, lightDir), 0);
W的结果如下
加入了对高光与暗部细节部分的判断,使得高光部分降噪效果良好
三种方法中效果最好的方法
结果如下
三种方法效果比对
代码已上传至github
------ by wolf96 http://blog.csdn.net/wolf96
3 2
- Unity3d 游戏中的实时降噪-对Square Enix文档的研究与实现
- Unity3d Fast Indirect illumination Using Two Virtual Spherical Gaussian Lights-Square Enix论文
- Unity3d Fast Indirect illumination Using Two Virtual Spherical Gaussian Lights-Square Enix论文 ver 2
- [SQUARE ENIX 开放会议 2012]
- Python pyinotify模块实现对文档的实时监控功能
- Unity* 原生 X86 支持使Square Enix的Hitman GO*卓尔不凡
- Unity3D游戏开发游戏读/存档在Unity3D中的实现
- 对Unity3D的PBR的初步研究
- Unity3D游戏开发之Unity与Android交互调用研究
- Unity3D游戏开发之Unity与Android交互调用研究
- Unity3D 烘焙 对游戏包的影响
- Unity3D 官方文档 2D游戏的起始2 2D物理 全局设置与刚体
- 基于HTML5 WebSocket的Web实时通信机制的研究与实现
- 基于中标麒麟的火箭飞行三维实时仿真系统的研究与实现
- 基于HTML5 WebSocket的Web实时通信机制的研究与实现
- MQX实时操作系统在M CF52259上移植的研究与实现
- 实时游戏的设计及实现
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究
- Java 对象序列化和操作文件 正则表达式
- Android中判断网络连接是否可用及监控网络状态
- hadoop初级班(五)
- 多地严防高考作弊:河南用无人机监测防作弊
- JDBC连接数据库的步骤
- Unity3d 游戏中的实时降噪-对Square Enix文档的研究与实现
- iReport 里的各 Band 的解释
- opencv笛卡尔坐标转换为极坐标cvLogPolar的应用
- “无人超市”信用测试:有人扔10元抱走名贵烟酒
- 官媒:CNN消费家属悲伤 误导读者认为中国救援不力
- R语言:词云图
- JS放在head和放在body中的区别
- LevelDb
- 剑指offer之在O(1)时间删除链表节点