李华,杨华民,赵建平,陈纯毅,马爱斌
(长春理工大学 计算机科学技术学院,长春 130022)
交互式全局光照计算是目前计算机图形学真实感绘制领域的主要研究内容之一,全局光照效果绘制的瓶颈来自于准确的间接光照计算。目前,全局光照算法有两个主要类别—光线跟踪和辐照度,这两类方法都需要几分钟或几小时来生成一个具有全面全局光照效果的单一图像。全面的全局光照与交互式应用通常是不相容的。已有的能达到交互式应用级别的算法也都是依赖消耗大的预先计算实现的,不适用于动态场景[1,2]。交互式光线追踪能以交互式帧频生成全局光照效果,但需要多台PC集群才能实现在高分辨率情况下的互动。实践证明,全局光照的解决方案,尤其是间接光照计算并不要求精确,在许多情况下,考虑只反弹一次的间接光照即可[3]。而且,多数情况下,间接光照的遮挡关系也可以忽略。因此,很多近似的全局光照模拟方法被提出。在反射阴影图中,描述了一种基于阴影图原理的粗略近似地计算场景中一次反弹的间接光照计算方法,能够快速获得视觉可接受的全局光照效果。该方法通过对场景中的可见点进行采样,作为间接光照的虚拟点光源,实现一次弹射的间接光照计算。但是受阴影图分辨率的影响,间接光照计算成本仍然很高。本文对反射阴影图的虚拟点光源采样进行了分析,提出一种动态划分采样分辨率的细化算法,能够有效的去除无贡献或者贡献小的采样点,在相同的采样方式下能明显减少采样点的数量,提高计算效率。
反射阴影图(Reflective Shadow Map,RSM)[4],是标准阴影图[5]的扩展。在RSM中,存储光源到可见表面点的深度值(Depth)即阴影图(SM)、阴影图中点的表面法向量(Normal)和辐射通量(Flux)以及世界空间坐标(Position)。反射阴影图的基本思想来自于瞬间辐照度(Instant Radiosity,IR)法[6],生成的纹理图可以包含直接光照信息和一次反弹的间接光照信息。因此,能够快速近似计算全局光照[7,8]。
在反射阴影图算法中,首先将阴影图里的每个纹素视为一个虚拟点光源(VPL),通过对虚拟点光源的采样,进行基于法向量的光照贡献判断和屏幕空间的间接光照计算,为了加快计算过程,利用屏幕空间插值快速模拟场景的全局光照效果。反射阴影图在动态场景中的主要缺陷是性能低和遮挡计算复杂。近些年,大量的近似全局光照绘制方面的研究方法被提出,比较著名的包括Ritschel T的Imperfect shadow map(ISM)[9],此方法利用低分辨率的均匀采样计算间接光照,能提高间接光照计算的效率,可以应用在大规模、全动态场景中,但是由于其分辨率低,使得间接光照的计算近似程度不高。Kien T Nguyen[10]提出在动态场景中利用层次采样结构,建立光照缓存,稀疏的计算间接光照,利用帧间相干性和插值方法完成近似全局光照计算,该方法计算复杂性高。Carsten D等提出利用与RSM相反的过程SII[11],首先在RSM中采样一定数量的VPLs,根据每个VPL的辐射通量和法向量,计算得到一个该点光源影响的区域范围,再利用延迟渲染合成计算间接光照。Greg N等[12]对SII进一步的改进,不再限制每个VPL的影响范围是一个狭小的影响域,而是每个VPL都可以影响到整个屏幕空间。上述算法的间接光照都是基于采样点光源实现的,采样方式主要包括重要性采样,均匀采样,随机采样等手段。其中,反射阴影图是基于重要性和随机相结合的采样方法,由于阴影图是二维深度值,没有考虑世界坐标空间中的距离关系,因此具有改进空间。
在反射阴影图中假设在阴影图中的邻近关系等同于世界坐标空间的邻近关系,即在阴影图中邻近的两个点,在世界坐标空间中两个点的位置关系也是邻近的。因此,在采样时邻近的点一定会被考虑进来。但是由于在阴影图中采样本身考虑的是平面的邻近关系,不能体现三维空间的邻近关系。如果深度值的差过大,则代表两点在世界坐标中的距离远,在采样计算时,这些点光源的计算就会引起过度光照的偏差,严重时引起走样。
采样自适应细化算法(ARRSM),通过阴影图的深度方差分析,估算某个采样区域的有效VPLs分布密度及光照贡献强度,可实现自动调节采样分辨率。假设场景的所有表面为漫反射表面(diffuse),需存储的信息包括SM中的每个像素 p的深度dp;像素对应的世界空间坐标xp;像素法向量np;辐射通量ϕp;假设像素光源足够小(点光源),那么,光源发射到ω方向的光强表示为:
其中<|>为点乘。像素 p在一个表面上点x处产生的对于法向量为n的方向辐射度表示如下:
其中φp是表面反射系数 fc与辐射通量flux的乘积。在平行光源下辐射通量flux为常量,在点光源下,辐射通量flux值随着出射角度增大而余弦减小,即:
表面法向量为n的一点x的亮度为所有采样点辐射度的总和E(x,n)表示为:
由于一个典型的阴影图的纹素数量是很大的(512×512=262144 VPLs),所以估算上述的总和开销非常大,不能适用于实时环境。而且,延迟的阴影缓冲区的应用也不能完全解决场景复杂性与渲染时间之间的矛盾。所以,让初始的子采样根据深度值与法向进行自适应细化,可以大大降低场景复杂性的影响[4]。
阴影图中一点x(s,t)的值,代表了该点到光源的距离。在RSM中,x和xp在阴影图上的距离合理近似于它们在世界空间中的距离,以此为依据进行VPLs的采样及间接光照的计算。在RSM中没有考虑由于深度差带来的世界空间距离差别,因此RSM方法的间接光照计算是高估了影响。
在采样范围内的点与点x在世界空间中的距离如果大于采样半径rmax会导致过度计算点光源。相对而言,距离点x更近的点光源,由于相同的采样率而被忽略了更有价值的点,如图1所示。其中Sk=|dx-di|≤rmax。
图1 RSM采样点的空间范围关系
算法采用方差作为深度分析的主要手段,结合方差的数学含义,自适应细化采样算法主要包括:(1)计算阴影图深度值方差,以方差自适应划分阴影图;(2)划分不同采样分辨率,屏幕空间插值计算一次间接光照。
方差刻画了随机变量的取值对于其数学期望的离散程度。在这里用深度方差来表示场景深度的分散程度,确定深度分布密度及采样分辨率。首先,将深度值理解为离散随机变量,对视口区域计算深度方差按式(5)计算。
其中,di为深度值,c为控制常数。设定方差阈值为ξ0,若K≤ξ0,深度值相对一致,分布比较集中,则按照RSM的随机方式采样,通过式(5)进一步减少可采样点数量,若方差K>ξ0,深度值分布分散,那么以均值为界,将阴影图分成两个子图,使得深度值集合分成两部分,且S1和S2满足式(6),如图1所示。
若dx∈S2,则在S2子图范围内设置高分辨率采样,S1子图范围内设置低分辨率采样。设ξ1和ξ2是均匀分布的随机数,则对于屏幕空间点x,采样方法满足式(7):
其中ξ0为控制常数,用来根据深度方差而确定采样密度,深度方差与平均深度davg的关系满足k=c×davg,c为大于1的整数。
采样区间细化的实施是在渲染的第二个通道中完成的,即从照相机视角绘制场景。在这一过程中,关键是对比阴影图中存储的深度值和光源到该像素点的距离,以确定该点是否在阴影中。将采样点x坐标投射到光照空间。若x不在阴影中,则x的亮度直接来自光源,累加后产生是色渗效果。而在全局光照模式下,阴影中的点的亮度是由接收到的一次反射光照决定的。因此自适应采样细化算法的光照计算限制在式(5)表示的范围内:设dx为待计算场景点深度,p为RSM采样范围内一点,且dp为其深度值,只有当为采样半径,本算法rmax=0.03m),计算 p点的辐照度,减少低贡献VPLs的计算数量。
另外,深度方差的计算还应用在屏幕空间插值过程中,方差越大插值采样点越多,可以有效增加抗失真性能。图2和图3表示了分级采样的原理,图中深蓝色表示绘制场景点x所在深度级别,橙色为深度差值大于rmax而可以不予采样的阴影子图。此外,由于计算阴影图的深度均值与深度差值复杂性是O(n),操作在线性的时间内完成,不增加系统开销。
由于间接光照通常是低频的,因此一个像素点受到的照明情况与其相邻点受到的照明情况在大多数情况下都是非常接近的,采样点具有区域性。按照方差的采样方法,构造分级采样,如图2所示。
图2 阴影图的分级采样及细分
图3 深度图(左),法向量(中)和采样算法反射光分布(右)
本实验通过采样点法向量方向和光照计算点x的法向量方向来计算光照,当x与xp的法向量夹角接近90°时,cosα及cosβ的值可以忽略,方法是设定阈值kn,去掉点乘小于kn(本算法kn=0.01)的采样点。计算采样区间的平均法向量nˉ并比较其它所有法向量nij计算采样点中对x光照产生影响的VPLs。
反射阴影图的采样算法的改进并在可编程管线中 实 现 ,实 验 环 境 为 Intel(R)Xeon(R)CPU E5620@双核2.40GHz,NVIDIA Quadro K5000,以及多核CPU环境下测试。为了实现CPU和GPU之间、CPU多核之间的任务负载平衡。本算法采用的技术方案是为CPU和GPU之间以及CPU多核之间的任务划分建立两个间接光照及采样数据库,分别对计算和存储场景点的深度、表面法向量、flux通量及片段着色器中采样的分级结构存储和方差计算,记录任务的划分比例,其中CPU与GPU之间的任务划分比例根据问题规模确定,且在整个应用程序执行过程中根据CPU和GPU的实测性能自动调整任务划分的比例,实现任务划分的负载平衡。采用该方法既能保证CPU和GPU的任务负载平衡,提高科学计算程序利用GPU加速的性能,又能平衡CPU每个核之间的任务负载,提高多核CPU的性能[13]。图3所示为场景分辨率为(1408*848)下的深度、表面法向量和本采样算法的反射光源分布。最终绘制效果如图4所示,左侧为标准反射阴影图,右侧为本算法绘制效果,在相同采样数量下由于自适应细化(ARRSM)能对重要采样区域提高采样分辨率,因而细节及暗处更清晰。图5所示为ARRSM在不同采样数量下的绘制效果。
图4 反射阴影图(RSM)(左)采样与自适应细化采样(右)
图5 不同采样数量的ARRSM方法112(左)224(中)448(右)
表1RSM采样与ARRSM采样数量对比
CPU-GPU异构系统的混合编程方法负载平衡是关键,如果划分的任务不平衡,则将造成CPU或GPU中一方先完成,需要等待另一方任务完成,造成CPU或GPU空转,使得整个任务完成时间延迟,从而降低了并行效率[13]。本算法通过建立两个间接光照及采样数据库,分别对计算和存储场景点的深度、表面法向量、flux通量及片段着色器中采样的分级结构存储和方差计算,并记录任务的划分比例,达到负载平衡的目的,图7为本算法应用的CUDA tools中计算能力为2.0以及共享内存为16348下相同24个采样时刻下的CPU-GPU任务计算时间分配关系,充分发挥了CPU和GPU的运算能力。
图6 24个相同采样时下GPU与CPU计算时间分配关系(单位:μs)
通过对RSM采样与ARRSM采样数量对比,根据场景不同,ARRSM能在RSM的基础上去掉约11.6%~20.5%的采样点。为进一步衡量间接光照计算时间的计算效率,运用本算法对不同模型进行测试,在112和224两种随机采样数量下本文算法和标准反射阴影图对比如表2所示,间接光照计算时间在原基础上可以减少约20%。
表2RSM与ARRSM间接光照计算时间对比(ms)
实验表明,通过异构CPU-GPU平台下与基于GPGPU的对大量虚拟点光源的间接光照计算对比,并获得了负载平衡和运算峰值,提高计算效率。
[1]Sloan P,Kautz J,Snyder J.Precomputed Radiance transfer for real-time rendering in dynamic,low-frequency lighting environments[J].ACM Transactions on Graphics,2002,21(3):527-536.
[2]Walter B,Alppay G,Lafortune.Fitting virtual lights fornon-diffusewalk throughs[C].ComputerGraphics Proceedings,1997:45-48.
[3]Tabellion E,Lamorlette A.An approximate global illumination system for computer generated[J].ACM Transactions,2004,23(3):469-476.
[4]Dachsbacher C,Stamminger M.Reflective shadow maps[R].Interactive 3D Graphics,2005:203-231.
[5]Williams L.Casting curved shadows on curved surfaces[C].ACM SIGGRAPH Computer Graphics,1978,12(3):270-274.
[6]KellerA.Instantradiosity[C].In Proceedingsof SIGGRAPH,1997:49-56.
[7]Tabellion E,Lamorlette A.An approximate global illumination system for computer generated films[J].ACM Transactions on Graphics,2004,23(3):469-476.
[8]Dachsbacher C,Stamminger M.Translucent shadow maps.eurographics symposium on rendering[C].2003:197-201.
[9]Ritschel T,Grosch T,Kim M,et al.Imperfect shadow maps for efficient computation of indirect illumination[J].ACM Transactions on Graphics,2008,27(5):129.
[10]Kien T Nguyen,Hanyoung J.Image space hierarchical coherence buffer[J].The Visual Computer 2011,27(6-8):759-768.
[11]Dachsbacher C,Stamminger M.Splatting indirect illumination[C].Interactive 3D Graphics and Games,2006:93-100.
[12]Nichols G,Wyman C.Multi-resolution splatting for indirect illumination[C].Interactive 3D Graphics and Games,2009:83-90.
[13]廖湘科,易会战,杜云飞,等.一种基于负载平衡的cpu和gpu两级动态任务划分方法[P].中国国家知识产权局,欧洲专利数据库(Espacenet)2012.