码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3d 游戏中的实时降噪-对Square Enix文档的研究与实现

时间:2015-06-07 09:31:00      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:shader   图形学   unity3d   post-processing   降噪denoise   

看到SE的技术文档关于降噪的决定研究一下,
本次试验场景:
技术分享

文章中提到了3中主要滤波方法,最后一种方法又有三种方式
分别为Conventional geometry-aware ?ltering,Distribution-Aware Filtering,Specular Lobe-Aware Filtering and Upsampling
根据公式做了一些,自己弄得除噪方法不知道是否正确,虽然有效果=  =;

博主的步骤:
1.    找出噪波(包括噪波与贴图上的细节)
2.    算出specular,diffuse的干扰
3.    此处方法众多:a.用别的像素代替噪波b.周围采样求平均值(会造成模糊)。。。。

Conventional geometry-aware ?ltering

基于最基本的高斯滤波,

此方法需要计算深度depth和normal,可通过获取_CameraDepthTexture和_CameraNormalsTexture获取,详细请点


W相当于对过滤正确性的判断,因为物体的边缘可能被当做噪波误判,产生边缘粗糙或者模糊

W权重公式
 技术分享
 
float wk = Gaussian(GetDepth(i_) - GetDepth(j), _Sigma_z);


Si是像素i中屏幕空间点的位置
G为高斯函数

 技术分享



σ是高斯分布的标准差


inline	float 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))));

		}



算出w结果图
 技术分享

边缘清晰可见,因为是通过depth和normal判断的,所以没有噪波,也包括了diffuse等的细节,通过w我们可以减少对边缘的降噪

然后采样对灰度进行比较,如果当前点与采样点相差过多则为噪波,采样点数越多越准确,但是也有限度

技术分享

通过上图可明显发现w起的作用



结果如下(图片可点击放大查看

技术分享

放大结果

技术分享



Distribution-Aware Filtering

对噪波进行判断并锐化,便于识别出噪波

 技术分享
 
t2为自定义参数
Ci为光滑分布

b函数为任意smoothing kernel
比如:
高斯滤波Gaussian ?ltering
各向异性滤波anisotropic ?ltering
总变分最小化Total Variation minimization
相邻滤波neighborhood ?ltering
NL-means algorithm
等等
这里博主使用高斯滤波
技术分享




W结果如下
 技术分享
上图的结果没有开noise,但是这种方法的w是包含噪波的,所以不能用w来判断cut off,
此处的w是其第一种作用,也就是判断噪波,但是这种方法的输入参数β,可以调节对高光部分和阴影部分的过滤程度(可以看到在图中参数下specular处是全黑的,此时高光处时不会过滤的,采样点之间的差别为0),所以这种方法不需要cut off

结果如下

技术分享

技术分享

比之前方法的图片细节(见lena)保真度高,高光等细节损失几乎为0


SE文档中实现结果
 技术分享




Specular Lobe-Aware Filtering and Upsampling

对过滤的正确性判断加强,加上对高光的判断,免去对高光高亮处边缘的误判

 技术分享
	float ai = v * max(dot(N, lightDir), 0);




W的结果如下
 技术分享
加入了对高光与暗部细节部分的判断,使得高光部分降噪效果良好

技术分享

三种方法中效果最好的方法


结果如下
技术分享


技术分享


SE文档中实现结果

技术分享   



三种方法效果比对

技术分享


 代码已上传至github

                                                ------ by wolf96   http://blog.csdn.net/wolf96

 
 

Unity3d 游戏中的实时降噪-对Square Enix文档的研究与实现

标签:shader   图形学   unity3d   post-processing   降噪denoise   

原文地址:http://blog.csdn.net/wolf96/article/details/46397989

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!