自适应的屏幕空间环境光遮蔽方法

文档序号:6432477阅读:595来源:国知局
专利名称:自适应的屏幕空间环境光遮蔽方法
技术领域
本发明涉及图形绘制技术领域,尤其涉及一种自适应的屏幕空间环境光遮蔽方法。
背景技术
环境光遮蔽(Ambient Occlusion,AO)是虚拟场景绘制中ー种十分重要的视觉效果。通过表现从周围环境漫反射过来的光线能够达到当前点的比例,环境光遮蔽能够有效提供关于场景中物体之间的位置关系和物体表面的起伏情况的重要视觉信息,例如在柱子和地面的接触处的明显阴暗区域,以及衣服表面的复杂褶皱细节产生的明暗变化等。环境光遮蔽被广泛的应用到电影和游戏等エ业中,几乎出现在所有的最新CG电影和互动游戏中,如《阿凡达》、《飞屋环游记》、《星际争霸II》等。环境光遮蔽通过在场景中的点上产生ー个标量值来描述由这点向各个方向出射的光线被遮挡的概率,这ー标量值可以用来产生全局的遮挡效果,并为用户提供关于场景中物体之间的位置关系和物体表面的起伏情况的重要视觉信息。计算环境光遮挡的可通过在半球面上对可见性函数的积分来得到,定义如下
Αθ( ρ) = — Γ/i(ゴ(め)cos. θ ω(ι)
Λ Ω
公式(1)是ー个方向积分,Ω是P点朝向法线方向的半球面上的方向集合,ゴ(药是P 点到其沿5方向与场景的第一个交点的距离,M(d)是距离衰减函数,5是5方向跟P点法向的夹角,《S+ θ = max (O,cos θ)。衰减函数_从1开始衰减并在某个固定距离下衰减到 0,我们把这个用户指定的固定距离记作采样半径R。在电影エ业等离线渲染器中,现有技术使用光线跟踪方法计算可见性函数,并用蒙特卡罗(Monte Carlo)积分计算公式(1)。该方法能够精确的绘制环境光遮蔽,但光线与场景的求交运算非常耗时。为了加快光线跟踪计算速度,现有技术采用了静态场景预计算或者简化场景表达等手段,此类方法可參考Sloan P, Kautz J, Snyder J. Precomputed radiance transfer for real-time rendering in dynamic, low-frequency lighting environments. ACM Transactions on Graphics, 2002,21 (3): 527 - 536; Kontkanen J, Aila T. Ambient Occlusion for Animated Characters[C]//Proceedings of the Eurographics Symposium on Rendering. Nicosia, 2006: 343—348; Bunnell M. GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation[M]. California: Addison-Wesleyj 2005: 223-233。
些方法的主要问题在干,其计算复杂度和场景本身的复杂度相关,因此很难在像游戏这样的实时复杂三维系统中得到广泛应用。在游戏エ业等实时渲染器重,最常用的一类技术是屏幕空间环境光遮蔽(Screen Space Ambient Occlusion, SSA0)方法。这类方法的基本思路是将当前视点下的深度缓存当成场景的ー个粗略的近似来计算AO。SSAO方法往往都具有很高的绘制效率,主要原因在于它通过引入场景的屏幕空间近似实现了环境光遮蔽计算和场景本身的复杂性的剥离,这一特性使得这类方法在交互式三维游戏(如《Crysis》、《StarCraft II》、 《Halo:Reach》、《Final Fantasy XIV online》等)中得到了大量的应用。此类方法可參考 Bavoil L, bamz Μ. Image-space Horizon-based Ambient Occlusion[R]. Caliiornia: NVIDIA Corporation, 2008; Filion D, Mcnaughton R. Effects & techniques[C]// Proceeding of the International Conference on Computer Graphics and Interactive Techniques. New York, 2008: 133-164; Loos B, Sloan P. Volumetric Obscurance[C]//Proceedings of the Symposium on Interactive 3D Graphics and Games. New York, 2010: 151-156; Mittring M. Finding next gen: Cryengine 2 [C] //Proceeding of the International Conference on Computer Graphics and Interactive Techniques. New York, 2007: 97 - 121; Shanmugam P, Arikan 0. Hardware accelerated ambient occlusion techniques on GPUs [C]//Proceedings of the symposium on Interactive 3D Graphics and Games. New York, 2007 :73_80oSSAO方法计算环境光遮蔽的步骤如下
步骤一、在当前摄像机处对场景进行光栅化渲染,得到当前视角的深度缓存和法向缓存(可选),作为下一歩骤的输入。步骤ニ、全屏幕后处理,对屏幕空间内每ー个像素,计算其在三维空间里的位置だ,执行
1.1在以ふ'点为中心,/ 为半径的球体空间内(若有法向缓存则为半球体空间内)随机的产生若干三维采样点;
1. 2接着估算每个采样点产生的遮蔽大小,计算每个采样点在深度缓存上的投影点, 用投影点产生的遮蔽近似代替采样点的遮蔽。对于投影点的遮蔽,不同的屏幕空间环境光遮蔽方法使用了不同的计算方法。最简单的方法是直接利用投影点跟与深度值差异计算遮蔽大小,这会带来自身遮蔽等走样问题。Filion方法通过引入法向缓存,使得所有采样点都在ミ上方,并利用采样点跟投影点的深度差异计算遮蔽大小,不会带来自身遮蔽。1.3最后计算所有采样点的平均遮蔽。步骤三、对步骤ニ的结果进行智能高斯模糊以消除噪音,通过法向信息和深度信息判断物体的边界,并只在物体内部执行高斯模糊,这样可以保存原有的边界信息。SSAO方法的主要问题是对场景的粗略近似带来了不可忽略的走样问题,如由于屏幕空间的深度缓存将所有当前视锥外的物体都排除在了环境光遮蔽计算之外,这通常会导致在屏幕边界处错误地对环境光遮蔽的低估。另外,由于深度缓存无法记录被深度剔除 (Visibility Culling)的部分场景,这也会直接造成对环境光遮蔽的错误计算。对于前者, 可以通过略微扩大深度纹理的大小以及相应的增大视野(FOV)来大大缓解;对于后者,人们提出了多层深度缓存下的环境光遮蔽方法。首先,用深度剥离技术获得当前场景的多层深度信息;接着在多层深度信息上采样以获得更为精确地环境光遮蔽估计。通过引入多层的深度缓存,我们可以得到更为精确的环境光遮蔽估计,然而,AO计算需要在多层深度缓存中进行采样。由于计算量随深度层数近似线性的增长,而复杂场景会需要更多的深度缓存来描述,这就失去了屏幕空间环境光遮蔽方法与场景复杂度无关的优势。

发明内容
本发明针对在游戏エ业渲染器中广泛使用的屏幕空间环境光遮蔽方法在多层深度缓存下计算量随层数线性增长的问题,提出了一种自适应的屏幕空间环境光遮蔽方法。本发明的目的是通过以下技术方案来实现的一种基于现有的屏幕空间环境光遮蔽方法,该方法通过改进的采样点遮蔽信息估算方法来近似采样点上的遮蔽信息;通过自适应的估算屏幕空间中每个像素点所需的采样层数,只在深度跳变区域进行多层采样。进ー步地,所述通过改进的采样点遮蔽信息估算方法来近似采样点上的遮蔽信息包括以下子步骤
(1)获取采样点S对应的深度缓存中的采样点;
(2)计算步骤(1)获取的深度缓存中的采样点和着色计算点/7之间的距离d,并通过距离衰减函数/计算着色计算点/7采样方向巧上的遮蔽,再和約与法向之间的夹角余弦相乘得到遮蔽信息的估算。进ー步地,所述通过自适应的估算屏幕空间中每个像素点所需的采样层数,只在深度跳变区域进行多层采样包括以下子步骤
(1)利用深度剥离技术渲染r层深度纹理^ ^ , depikTsx2 ,…,deptkTsxk ,以及ー
层法向纹理《or腦/Ikr1 ;
(2)通过自适应多层SSAO算法来自适应地采样环境光遮蔽;具体如下通过在CPU上生成的が个三维采样点计算屏幕空间内每个像素的环境光遮蔽,M为自然数,这些三维采样点被分为两个部分,第一部分为预测采样点,第二部分为计算采样点;在所有预测采样点上计算最佳环境光遮蔽采样所在的层数,并求得其最大值Aiax,而在计算采样点上采样环境光遮蔽在Aiax层上停止;
(3)降低噪音,步骤ニ中得到的结果往往带有条状噪音,我们使用箱式低通滤波器(box filter)或上采样方法来消除噪音。本发明的有益效果是,由于场景中大部分区域的环境光遮蔽仅由第一层深度缓存決定,通过自适应估算,仅在深度跳变区域进行多层采样,可以极大地提高多层方法的计算效率。本发明解决了多层SSAO计算开销随深度缓存的层数线性增长的问题。本发明可以很容易和游戏エ业中的其他渲染技术相结合,实时绘制出高质量的环境光遮蔽效果。


图1是本发明提出的采样点遮蔽信息估算方法示意图2是本发明的自适应多层屏幕空间环境光遮蔽方法方法与简单多层屏幕空间环境光遮蔽方法方法的对比图,图中,(a) 38 FPS,单层SSAO,(b) 11 FPS,简单多层SSAO,(c) 31 FPS,自适应多层SSAO,(d)光线跟踪5分38秒
图3是本发明的自适应多层屏幕空间环境光遮蔽方法与简单多层屏幕空间环境光遮蔽方法方法在不同场景中的性能对比折线图4是本发明与各种现有环境光遮蔽技术在效果与性能上的对比图。
具体实施例方式多层屏幕空间环境光遮蔽方法需要解决的基本问题有两个,ー是如何在采样点上根据深度缓存中的数据估计遮蔽信息,ニ是如何选取采样点。本发明的具体内容是本发明基于现有的屏幕空间环境光遮蔽方法,通过改进的采样点遮蔽信息估算方法来近似采样点上的遮蔽信息;通过自适应的估算屏幕空间中每个像素点所需的采样层数,只在深度跳变区域进行多层采样。具体阐述如下
一、通过改进的采样点遮蔽信息估算方法来近似采样点上的遮蔽信息
本发明提出了一种与现有SSAO方法不同的采样点遮蔽信息的估算方法。如图1所示,
Filion方法在着色计算点/7采样方向い万向上的采样点(图中用星号标识上通过以下
原则估算该方向上的遮蔽信息
1、若·s对应的深度缓存中的深度大于s点本身的深度,则认为巧上遮蔽为O;
2、若·s对应的深度缓存中的深度小于S点本身的深度,则计算这两个深度的差异d,并通过距离衰减函数/计算巧上的遮蔽。最后将所有采样方向上的遮蔽求平均,就得到着色计算点/7的环境光遮蔽。该估算方法存在如下问题,如果S刚好位于两个物体之间的自由区域(如图1中的
■Si),或·S没有被深度缓存中的采样所覆盖,但在上在/7和·S之间有物体恰巧挡住了这条光线(如图1中的·s2),Filion方法都会得到错误的遮蔽信息。另外,Filion方法计算的遮蔽信息是根据s点和其对应的深度缓存中采样的深度差来计算的,这和环境光遮蔽的正确计算公式(1)有较大的差別。针对这些问题,本发明提出了下述改进的遮蔽信息估算方法
1、获取采样点·S对应的深度缓存中的采样点(如图1中的/7l,/72);
2、计算深度缓存中的采样点和着色计算点/7之间的距离^并通过距离衰减函数,W(J) 计算着色计算点/7采样方向約上的遮蔽,再与A与法向之间的夹角余弦相乘得到遮蔽信
息的估算;其中,距离衰减函数Μめ从1开始衰减到0,通常可以取距离ゴ的一次或二次衰减函数。当然,这两种估算方法本质上都只是实际遮蔽信息的ー种近似,必然在某些特定情形下导致对遮蔽信息的错误估计。但我们通过实验发现,在实际场景中我们的计算方法通常能得到更好的結果,在图1的右边给出了一个简单的分析。其中·Sl采样点所在方向与场景无交,所以真实遮蔽为0,由于投影点/71在采样半径R之外,本文方法对d采样点的
遮蔽估计也为0,而Filion方法认为/71深度小于sl因此产生了遮蔽/。sJ 采样
点所在方向与场景交点为の所以真实遮蔽为ベ、《(■&),在本文方法中估算结果为
//(ImID^cos(α),略小于真实遮蔽,但在Filion方法中由于投影点/72深度值大于采样点 ■s2,估算遮蔽结果为O。由上述分析可知,我们提出的屏蔽信息的估算方法比现有方法能更好地近似实际遮蔽信息,从而获得更高质量的环境光遮蔽效果
ニ、通过自适应的估算屏幕空间中每个像素点所需的采样层数,只在深度跳变区域进行多层采样。为了消除单层SSAO方法因为丢失深度信息带来的走样问题,人们提出了多层深度采样。渲染场景的多层深度缓存,在多层信息中对采样点的遮蔽进行更准确的估算。由于我们计算遮蔽信息的基本思路是在深度缓存中寻找ー个投影点来“代替”当前的采样点并计算遮蔽信息,因此我们只需计算采样点在每ー层深度缓存上的投影点的遮蔽大小,把产生遮蔽最大的有效投影点作为最佳·^裙为遮废;^辟计算环境光遮蔽。这种简单的多层策略可以有效的改进屏幕空间环境光遮蔽的质量,但是计算开销也和深度缓存的数量呈线性增长。将单层和多层的屏幕空间环境光遮蔽绘制结果进行了比较,我们发现,差别较大的部分往往是深度发生跳变的区域。直观上这很容易理解——深度发生跳变的区域附近, 通常场景会具有比较高的深度复杂性,而以单层深度缓存作为场景的近似描述,在这些区域准确度是最低的。反过来看这ー现象,就意味着单层的深度缓存在深度变化平缓的区域已经可以提供足够的近似精度,真正需要多层深度采样的区域往往只占所有像素中很小的一部分。我们在ー些例子场景中对最佳环境光遮蔽采样所在的层数进行了分析。我们把深度缓存编号为1-4,并把每个像素上各采样方向的最佳环境光遮蔽采样所在层号的平均值可视化出来。我们发现,大部分最佳采样落在第一层深度缓存上,所有像素的平均最佳采样层数只有1. 03。因此,如果能在深度变化平缓的区域减少真正參与计算的采样层数,我们就能大大提高多层方法的计算效率。ー个直接的解决方法是在屏幕空间每个像素点周围生成若干采样点并计算这些采样点投影到该像素法线方向的高度,这些高度的方差就反映了该像素领域内的深度变化情況,可以用来确定获取深度缓存的层数。但这一方法需要引入ー个额外的绘制环节和ー 个额外的存储方差或层数的缓存,这就抵消掉了其减少深度缓存采样层数带来的好处。本发明提出了一种新的直接嵌入到屏蔽信息采样过程中的自适应采样方法,可以避免上述为评估像素点周围深度变化情况带来的额外开销。本发明提出的自适应多层屏幕空间环境光遮蔽方法实施流程共分三个步骤
步骤一、利用深度剥离技术渲染是层深度纹理ゴ孕^AIfcc1 , de Mx2 , -,deptkTexk ,以
及一层法向纹理·。步骤ニ、通过自适应多层SSAO算法来自适应地采样环境光遮蔽。具体如下通过在CPU上生成的-V个三维采样点计算屏幕空间内每个像素的环境光遮蔽,N为自然数,这些三维采样点被分为两个部分,第一部分为预测采样点,第二部分为计算采样点。在所有预测采样点上计算最佳环境光遮蔽采样所在的层数,并求得其最大值Aiax,而在计算采样点上采样环境光遮蔽在Aiax层上停止。像素着色器伪代码如算法1所示,其中れ是归ー化屏幕坐标(左上角为(0,0),右下角为(1,1) 为使用的深度缓存层数,V1V2..ろ,是在CPU上生成的个三维采样点。前 ル个采样点为预测采样点,我们计算了所有预测采样点上的最佳环境光遮蔽采样所在的层数,并求得其最大值Aiax (18-19行)。对于ガ个采样点中的其他(1-な)ル个采样,在遍历多层深度采样时我们在Aiax层上停止(9-10行)。
算法1 自适应多层SSAO算法一
权利要求
1.一种基于现有的屏幕空间环境光遮蔽方法,其特征在于,该方法通过改进的采样点遮蔽信息估算方法来近似采样点上的遮蔽信息;通过自适应的估算屏幕空间中每个像素点所需的采样层数,只在深度跳变区域进行多层采样。
2.根据权利要求1所述基于现有的屏幕空间环境光遮蔽方法,其特征在干,所述通过改进的采样点遮蔽信息估算方法来近似采样点上的遮蔽信息包括以下子步骤(1)获取采样点s对应的深度缓存中的采样点;(2)计算步骤(1)获取的深度缓存中的采样点和着色计算点/7之间的距离d,并通过距离衰减函数U{d)计算着色计算点/7采样方向%上的遮蔽,再和巧与法向之间的夹角余弦相乘得到遮蔽信息的估算。
3.根据权利要求1所述基于现有的屏幕空间环境光遮蔽方法,其特征在干,所述通过自适应的估算屏幕空间中每个像素点所需的采样层数,只在深度跳变区域进行多层采样包括以下子步骤(1)利用深度剥离技术渲染r层深度纹理ゴ孕 ^, ChpihTsx2 ,…,ChptkTeKk ,以及ー 层法向纹通舶厂腦オ及巧;(2)通过自适应多层SSAO算法来自适应地采样环境光遮蔽;具体如下通过在CPU上生成的个三维采样点计算屏幕空间内每个像素的环境光遮蔽,3/为自然数,这些三维采样点被分为两个部分,第一部分为预测采样点,第二部分为计算采样点;在所有预测采样点上计算最佳环境光遮蔽采样所在的层数,并求得其最大值Aiax,而在计算采样点上采样环境光遮蔽在Aiax层上停止;(3)降低噪音,步骤ニ中得到的结果往往带有条状噪音,我们使用箱式低通滤波器(box filter)或上采样方法来消除噪音。
全文摘要
本发明公开了一种自适应的屏幕空间环境光遮蔽方法,该方法通过改进的采样点遮蔽信息估算方法来近似采样点上的遮蔽信息;通过自适应的估算屏幕空间中每个像素点所需的采样层数,只在深度跳变区域进行多层采样;本发明通过自适应计算所需采样层数,以接近单层方法的绘制效率获得了和多层方法几乎完全相同的绘制效果,可以直接集成到现有的实时渲染工具中。
文档编号G06T15/50GK102592305SQ20111026137
公开日2012年7月18日 申请日期2011年9月6日 优先权日2011年9月6日
发明者任重, 周昆, 李文耀 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1